// Copyright Keysight Technologies 2012-2019 // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at http://mozilla.org/MPL/2.0/. using NUnit.Framework; using System.IO; using System.Linq; using System.Reflection; using System.Threading; using OpenTap.Engine.UnitTests; namespace OpenTap.EngineUnitTestUtils { public class TestPlanRunner { private TestPlanRunner() { } TestTraceListener trace; TestPlan plan; void RunTestPlanCommon() { // Add database result output: PlanRunCollectorListener pl = new PlanRunCollectorListener(); const string outputDir = @"PlatformTests/"; if (!Directory.Exists(outputDir)) Directory.CreateDirectory(outputDir); // Set log file path: LogResultListener log = ResultSettings.Current.GetDefault(); if (log == null) { log = new LogResultListener(); ResultSettings.Current.Add(log); } string logFilePath = $"{outputDir}/{plan.Name}.log"; log.FilePath.Text = logFilePath; TestPlanRun planRun = plan.Execute(ResultSettings.Current.Concat(new IResultListener[] { pl })); ResultSettings.Current.Remove(log); Log.RemoveListener(trace); trace.AssertErrors(); foreach (var stepRun in pl.StepRuns) { Assert.IsTrue(stepRun.Verdict <= Verdict.Pass, "TestPlan ran to completion but verdict was '{1}' on step '{0}'.\r\nLog:\r\n{2}", stepRun.TestStepName, stepRun.Verdict, trace.GetLog()); } } static TestPlanRunner runTestPlanPre() { TestTraceListener trace = new TestTraceListener(); Log.AddListener(trace); return new TestPlanRunner { trace = trace }; } public static void RunTestPlan(TestPlan plan) { var runner = runTestPlanPre(); runner.plan = plan; runner.RunTestPlanCommon(); } public static void RunTestPlan(string resourceNamespaceName, string testPlanName) { var runner = runTestPlanPre(); TestTraceListener trace = new TestTraceListener(); Log.AddListener(trace); AutoResetEvent plugInSearchComplete = new AutoResetEvent(false); var searching = PluginManager.SearchAsync(); Assembly asm = Assembly.GetCallingAssembly(); Stream planRes = asm.GetManifestResourceStream(resourceNamespaceName + "." + testPlanName); using (TextReader reader = new StreamReader(planRes)) { File.WriteAllText(testPlanName, reader.ReadToEnd()); } TestPlan plan = TestPlan.Load(testPlanName); runner.plan = plan; runner.RunTestPlanCommon(); } } }