Exemplo n.º 1
0
        public TestEngineResult Load(TestPackage package)
        {
            //System.Diagnostics.Debug.Assert(false, "Attach debugger if desired");

            this.runner = Services.TestRunnerFactory.MakeTestRunner(package);
            return(runner.Load(package));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            log.Info("Loading " + TestPackage.Name);
            Unload();

            try
            {
                if (_agent == null)
                {
                    _agent = _agency.GetAgent(TestPackage, 30000);

                    if (_agent == null)
                        throw new Exception("Unable to acquire remote process agent");
                }

                if (_remoteRunner == null)
                    _remoteRunner = _agent.CreateRunner(TestPackage);

                return _remoteRunner.Load();
            }
            catch(Exception)
            {
                // TODO: Check if this is really needed
                // Clean up if the load failed
                Unload();
                throw;
            }
        }
Exemplo n.º 3
0
        public TestEngineResult Load()
        {
            //System.Diagnostics.Debug.Assert(false, "Attach debugger if desired");

            _runner = Services.GetService <ITestRunnerFactory>().MakeTestRunner(_package);
            return(_runner.Load());
        }
Exemplo n.º 4
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package,
            // in case the client runner missed them.
            ValidatePackageSettings();

            // Some files in the top level package may be projects.
            // Expand them so that they contain subprojects for
            // each contained assembly.
            ExpandProjects();

            // Use SelectRuntimeFramework for its side effects.
            // Info will be left behind in the package about
            // each contained assembly, which will subsequently
            // be used to determine how to run the assembly.
            _runtimeService.SelectRuntimeFramework(TestPackage);

            if (IntPtr.Size == 8 &&
                TestPackage.GetSetting(PackageSettings.ProcessModel, "") == "InProcess" &&
                TestPackage.GetSetting(PackageSettings.RunAsX86, false))
            {
                throw new NUnitEngineException("Cannot run tests in process - a 32 bit process is required.");
            }

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return(_realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName));
        }
Exemplo n.º 5
0
        //Exposed for testing
        internal ITestEngineRunner GetEngineRunner()
        {
            if (_engineRunner == null)
            {
                // Expand any project subpackages
                _packageAnalyzer.ExpandProjectPackages(TestPackage);

                // Add package settings to reflect the target runtime
                // and test framework usage of each assembly.
                foreach (var package in TestPackage.Select(p => p.IsAssemblyPackage()))
                {
                    if (File.Exists(package.FullName))
                    {
                        _packageAnalyzer.ApplyImageSettings(package);
                    }
                }

                // Use SelectRuntimeFramework for its side effects.
                // Info will be left behind in the package about
                // each contained assembly, which will subsequently
                // be used to determine how to run the assembly.
                _runtimeService.SelectRuntimeFramework(TestPackage);

                _engineRunner = _testRunnerFactory.MakeTestRunner(TestPackage);
            }

            return(_engineRunner);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            log.Info("Loading " + TestPackage.Name);
            Unload();

            try
            {
                if (_agent == null)
                {
                    _agent = _agency.GetAgent(TestPackage, 30000);

                    if (_agent == null)
                    {
                        throw new Exception("Unable to acquire remote process agent");
                    }
                }

                if (_remoteRunner == null)
                {
                    _remoteRunner = _agent.CreateRunner(TestPackage);
                }

                return(_remoteRunner.Load());
            }
            catch (Exception)
            {
                // TODO: Check if this is really needed
                // Clean up if the load failed
                Unload();
                throw;
            }
        }
Exemplo n.º 7
0
 public TestExecutionTask(ITestEngineRunner runner, ITestEventListener listener, TestFilter filter, bool disposeRunner)
 {
     _disposeRunner = disposeRunner;
     _filter        = filter;
     _listener      = listener;
     _runner        = runner;
 }
Exemplo n.º 8
0
 public TestExecutionTask(ITestEngineRunner runner, ITestEventListener listener, TestFilter filter, bool disposeRunner)
 {
     _disposeRunner = disposeRunner;
     _filter = filter;
     _listener = listener;
     _runner = runner;
 }
        public override bool CanReuse(ITestEngineRunner runner, TestPackage package)
        {
            RuntimeFramework currentFramework = RuntimeFramework.CurrentFramework;
            RuntimeFramework targetFramework  = ServiceContext.RuntimeFrameworkSelector.SelectRuntimeFramework(package);

            ProcessModel processModel = (ProcessModel)System.Enum.Parse(
                typeof(ProcessModel),
                package.GetSetting(RunnerSettings.ProcessModel, "Default"));

            if (processModel == ProcessModel.Default)
            {
                if (!currentFramework.Supports(targetFramework))
                {
                    processModel = ProcessModel.Separate;
                }
            }

            switch (processModel)
            {
            case ProcessModel.Multiple:
                return(runner is MultipleTestProcessRunner);

            case ProcessModel.Separate:
                ProcessRunner processRunner = runner as ProcessRunner;
                return(processRunner != null && processRunner.RuntimeFramework == targetFramework);

            default:
                return(base.CanReuse(runner, package));
            }
        }
        public MasterTestRunner(IServiceLocator services, TestPackage package)
        {
            if (services == null)
            {
                throw new ArgumentNullException("services");
            }
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            _services   = services;
            TestPackage = package;

            // Get references to the services we use
            _projectService = _services.GetService <IProjectService>();
#if !NETSTANDARD1_6 && !NETSTANDARD2_0
            _runtimeService = _services.GetService <IRuntimeFrameworkService>();
#endif
#if !NETSTANDARD1_6
            _extensionService = _services.GetService <ExtensionService>();
#endif
            _engineRunner = _services.GetService <ITestRunnerFactory>().MakeTestRunner(package);

            InitializePackage();
        }
Exemplo n.º 11
0
        // TODO: Review this method once used by a gui - the implementation is
        // overly simplistic. It is not currently used by any known runner.
        public bool CanReuse(ITestEngineRunner runner, TestPackage package)
        {
#if NETSTANDARD2_0
            return(false);
#else
            return(runner is MultipleTestProcessRunner);
#endif
        }
Exemplo n.º 12
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Temporarily using AggregatingTestRunner for everything
            //_realRunner = new AggregatingTestRunner(Services, TestPackage);
            _realRunner = Services.TestRunnerFactory.MakeTestRunner(TestPackage);

            return(_realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName));
        }
Exemplo n.º 13
0
        /// <summary>
        /// Construct a new TestRun
        /// </summary>
        /// <param name="listener">The ITestEventListener to use for this run</param>
        /// <param name="filter">The TestFilter to use for this run</param>
        public TestRun(ITestEngineRunner runner)
        {
            _runner = runner;

            _worker = new BackgroundWorker();
            _worker.WorkerSupportsCancellation = true;
            _worker.WorkerReportsProgress      = true; // ?
        }
Exemplo n.º 14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TestRun"/> class.
        /// </summary>
        /// <param name="runner">The <see cref="ITestEngineRunner"/> to use for this run.</param>
        public TestRun(ITestEngineRunner runner)
        {
            _runner = runner;

            _worker = new BackgroundWorker();
            _worker.WorkerSupportsCancellation = true;
            _worker.WorkerReportsProgress = true; // ?
        }
Exemplo n.º 15
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void UnloadPackage()
 {
     if (_remoteRunner != null)
     {
         log.Info("Unloading remote runner");
         _remoteRunner.Unload();
         _remoteRunner = null;
     }
 }
Exemplo n.º 16
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void Unload()
 {
     if (this.remoteRunner != null)
     {
         log.Info("Unloading remote runner");
         this.remoteRunner.Unload();
         this.remoteRunner = null;
     }
 }
Exemplo n.º 17
0
        private void CommandLoop()
        {
            bool keepRunning  = true;
            var  socketReader = new SocketReader(_clientSocket, new BinarySerializationProtocol());

            while (keepRunning)
            {
                var command = socketReader.GetNextMessage <CommandMessage>();

                switch (command.CommandName)
                {
                case "CreateRunner":
                    var package = (TestPackage)command.Arguments[0];
                    _runner = CreateRunner(package);
                    break;

                case "Load":
                    SendResult(_runner.Load());
                    break;

                case "Reload":
                    SendResult(_runner.Reload());
                    break;

                case "Unload":
                    _runner.Unload();
                    break;

                case "Explore":
                    var filter = (TestFilter)command.Arguments[0];
                    SendResult(_runner.Explore(filter));
                    break;

                case "CountTestCases":
                    filter = (TestFilter)command.Arguments[0];
                    SendResult(_runner.CountTestCases(filter));
                    break;

                case "Run":
                    filter = (TestFilter)command.Arguments[0];
                    SendResult(_runner.Run(this, filter));
                    break;

                case "RunAsync":
                    filter = (TestFilter)command.Arguments[0];
                    _runner.RunAsync(this, filter);
                    break;

                case "Stop":
                    keepRunning = false;
                    break;
                }
            }

            Stop();
        }
Exemplo n.º 18
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package,
            // in case the client runner missed them.
            ValidatePackageSettings();

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return(_realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName));
        }
Exemplo n.º 19
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package, 
            // in case the client runner missed them.
            ValidatePackageSettings();

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return _realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName);
        }
Exemplo n.º 20
0
        private static RunnerResult GetRunnerResult(ITestEngineRunner runner)
        {
            var result = new RunnerResult(runner.GetType());

            if (runner is AggregatingTestRunner aggRunner)
            {
                result.SubRunners = aggRunner.Runners.Select(GetRunnerResult).ToList();
            }

            return(result);
        }
Exemplo n.º 21
0
        public MasterTestRunner(IServiceLocator services, TestPackage package)
        {
            _services   = services;
            TestPackage = package;

            _testRunnerFactory = _services.GetService <ITestRunnerFactory>();
            _projectService    = _services.GetService <IProjectService>();
            _runtimeService    = _services.GetService <IRuntimeFrameworkService>();
            _extensionService  = _services.GetService <ExtensionService>();
            _engineRunner      = _testRunnerFactory.MakeTestRunner(package);
        }
Exemplo n.º 22
0
        public MasterTestRunner(IServiceLocator services, TestPackage package)
        {
            _services = services;
            TestPackage = package;

            _testRunnerFactory = _services.GetService<ITestRunnerFactory>();
            _projectService = _services.GetService<IProjectService>();
            _runtimeService = _services.GetService<IRuntimeFrameworkService>();
            _extensionService = _services.GetService<ExtensionService>();
            _engineRunner = _testRunnerFactory.MakeTestRunner(package);
        }
Exemplo n.º 23
0
        private void PerformPackageSetup(TestPackage package)
        {
            this.TestPackage = package;

            // Expand projects, updating the count of projects and assemblies
            ExpandProjects();

            // If there is more than one project or a mix of assemblies and
            // projects, AggregatingTestRunner will call MakeTestRunner for
            // each project or assembly.
            _realRunner = _projectCount > 1 || _projectCount > 0 && _assemblyCount > 0
                ? new AggregatingTestRunner(Services, package)
                : Services.TestRunnerFactory.MakeTestRunner(package);
        }
Exemplo n.º 24
0
        public MasterTestRunner(TestPackage package)
        {
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            TestPackage = package;

            // Get references to the services we use
            var runnerFactory = new DefaultTestRunnerFactory();

            _engineRunner = runnerFactory.MakeTestRunner(package);

            InitializePackage();
        }
Exemplo n.º 25
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void UnloadPackage()
 {
     try
     {
         if (_remoteRunner != null)
         {
             log.Info("Unloading remote runner");
             _remoteRunner.Unload();
             _remoteRunner = null;
         }
     }
     catch (Exception e)
     {
         log.Warning("Failed to unload the remote runner. {0}", e.Message);
         _remoteRunner = null;
     }
 }
Exemplo n.º 26
0
        private void CreateAgentAndRunnerIfNeeded()
        {
            if (_agent == null)
            {
                _agent = _agency.GetAgent(TestPackage);

                if (_agent == null)
                {
                    throw new NUnitEngineException("Unable to acquire remote process agent");
                }
            }

            if (_remoteRunner == null)
            {
                _remoteRunner = _agent.CreateRunner(TestPackage);
            }
        }
Exemplo n.º 27
0
        // TODO: Review this method once we have a gui - not used by console runner
        public override bool CanReuse(ITestEngineRunner runner, TestPackage package)
        {
            ProcessModel processModel = GetTargetProcessModel(package);

            switch (processModel)
            {
            case ProcessModel.Default:
            case ProcessModel.Multiple:
                return(runner is MultipleTestProcessRunner);

            case ProcessModel.Separate:
                return(runner is ProcessRunner);

            default:
                return(base.CanReuse(runner, package));
            }
        }
Exemplo n.º 28
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void UnloadPackage()
 {
     try
     {
         if (_remoteRunner != null)
         {
             log.Info("Unloading " + TestPackage.Name);
             _remoteRunner.Unload();
             _remoteRunner = null;
         }
     }
     catch (Exception e)
     {
         log.Warning("Failed to unload the remote runner. {0}", ExceptionHelper.BuildMessageAndStackTrace(e));
         _remoteRunner = null;
         throw;
     }
 }
        public void Run(string filePath, string expectedType)
        {
            // We only create runners for subpackages
            var package = new TestPackage(filePath).SubPackages[0];
            ITestEngineRunner runner = CreateRunner(package);
            var result = runner.Run(new NullListener(), TestFilter.Empty).Xml;

            Assert.That(result.Name, Is.EqualTo("test-suite"));
            Assert.That(result.GetAttribute("id"), Is.EqualTo(package.ID));
            Assert.That(result.GetAttribute("name"), Is.EqualTo(filePath));
            Assert.That(result.GetAttribute("fullname"), Is.EqualTo(Path.GetFullPath(filePath)));
            Assert.That(result.GetAttribute("type"), Is.EqualTo(expectedType));
            Assert.That(result.GetAttribute("runstate"), Is.EqualTo(_expectedRunState));
            Assert.That(result.GetAttribute("testcasecount"), Is.EqualTo("0"));
            Assert.That(GetSkipReason(result), Is.EqualTo(_expectedReason));
            Assert.That(result.SelectNodes("test-suite").Count, Is.EqualTo(0), "Load result should not have child tests");
            Assert.That(result.GetAttribute("result"), Is.EqualTo(_expectedResult));
            Assert.That(result.GetAttribute("label"), Is.EqualTo(_expectedLabel));
            Assert.That(result.SelectSingleNode("reason/message").InnerText, Is.EqualTo(_expectedReason));
        }
Exemplo n.º 30
0
        public MasterTestRunner(IServiceLocator services, TestPackage package)
        {
            if (services == null)
            {
                throw new ArgumentNullException("services");
            }
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            _services   = services;
            TestPackage = package;

            _projectService   = _services.GetService <IProjectService>();
            _runtimeService   = _services.GetService <IRuntimeFrameworkService>();
            _extensionService = _services.GetService <ExtensionService>();
            _engineRunner     = _services.GetService <ITestRunnerFactory>().MakeTestRunner(package);
            LoadPackage();
        }
Exemplo n.º 31
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package,
            // in case the client runner missed them.
            ValidatePackageSettings();

            // Some files in the top level package may be projects.
            // Expand them so that they contain subprojects for
            // each contained assembly.
            ExpandProjects();

            // Use SelectRuntimeFramework for its side effects.
            // Info will be left behind in the package about
            // each contained assembly, which will subsequently
            // be used to determine how to run the assembly.
            RuntimeService.SelectRuntimeFramework(TestPackage);

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return(_realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName));
        }
Exemplo n.º 32
0
        //Exposed for testing
        internal ITestEngineRunner GetEngineRunner()
        {
            if (_engineRunner == null)
            {
                // Expand projects and update package settings to reflect the
                // target runtime and test framework usage of each assembly.
                _packageSettingsService.UpdatePackage(TestPackage);

                // Use SelectRuntimeFramework for its side effects.
                // Info will be left behind in the package about
                // each contained assembly, which will subsequently
                // be used to determine how to run the assembly.
#if !NETSTANDARD2_0
                _runtimeService.SelectRuntimeFramework(TestPackage);
#endif

                _engineRunner = _testRunnerFactory.MakeTestRunner(TestPackage);
            }

            return(_engineRunner);
        }
Exemplo n.º 33
0
        private void CreateAgentAndRunner()
        {
            if (_agent == null)
            {
                // Increase the timeout to give time to attach a debugger
                bool debug = TestPackage.GetSetting(EnginePackageSettings.DebugAgent, false) ||
                             TestPackage.GetSetting(EnginePackageSettings.PauseBeforeRun, false);

                _agent = _agency.GetAgent(TestPackage, debug ? DEBUG_TIMEOUT : NORMAL_TIMEOUT);

                if (_agent == null)
                {
                    throw new NUnitEngineException("Unable to acquire remote process agent");
                }
            }

            if (_remoteRunner == null)
            {
                _remoteRunner = _agent.CreateRunner(TestPackage);
            }
        }
Exemplo n.º 34
0
        private void CreateAgentAndRunner(bool enableDebug, string agentArgs)
        {
            if (_agent == null)
            {
                _agent = Services.TestAgency.GetAgent(
                    RuntimeFramework,
                    30000,
                    enableDebug,
                    agentArgs);

                if (_agent == null)
                {
                    throw new Exception("Unable to acquire remote process agent");
                }
            }

            if (_remoteRunner == null)
            {
                _remoteRunner = _agent.CreateRunner(TestPackage);
            }
        }
Exemplo n.º 35
0
        //Exposed for testing
        internal ITestEngineRunner GetEngineRunner()
        {
            if (_engineRunner == null)
            {
                // Some files in the top level package may be projects.
                // Expand them so that they contain subprojects for
                // each contained assembly.
                EnsurePackagesAreExpanded(TestPackage);

                // Use SelectRuntimeFramework for its side effects.
                // Info will be left behind in the package about
                // each contained assembly, which will subsequently
                // be used to determine how to run the assembly.
#if !NETSTANDARD1_6 && !NETSTANDARD2_0
                _runtimeService.SelectRuntimeFramework(TestPackage);
#endif

                _engineRunner = _testRunnerFactory.MakeTestRunner(TestPackage);
            }

            return(_engineRunner);
        }
        public override bool CanReuse(ITestEngineRunner runner, TestPackage package)
        {
            RuntimeFramework currentFramework = RuntimeFramework.CurrentFramework;
            RuntimeFramework targetFramework = ServiceContext.RuntimeFrameworkSelector.SelectRuntimeFramework(package);

            ProcessModel processModel = (ProcessModel)System.Enum.Parse(
                typeof(ProcessModel),
                package.GetSetting(RunnerSettings.ProcessModel, "Default"));
            if (processModel == ProcessModel.Default)
                if (!currentFramework.Supports(targetFramework))
                    processModel = ProcessModel.Separate;

            switch (processModel)
            {
                case ProcessModel.Multiple:
                    return runner is MultipleTestProcessRunner;
                case ProcessModel.Separate:
                    ProcessRunner processRunner = runner as ProcessRunner;
                    return processRunner != null && processRunner.RuntimeFramework == targetFramework;
                default:
                    return base.CanReuse(runner, package);
            }
        }
 public virtual bool CanReuse(ITestEngineRunner runner, TestPackage package)
 {
     return false;
 }
Exemplo n.º 38
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package,
            // in case the client runner missed them.
            ValidatePackageSettings();

            // Some files in the top level package may be projects.
            // Expand them so that they contain subprojects for
            // each contained assembly.
            ExpandProjects();

            // Use SelectRuntimeFramework for its side effects.
            // Info will be left behind in the package about
            // each contained assembly, which will subsequently
            // be used to determine how to run the assembly.
            _runtimeService.SelectRuntimeFramework(TestPackage);

            if (TestPackage.GetSetting(PackageSettings.ProcessModel, "") == "InProcess" &&
                TestPackage.GetSetting(PackageSettings.RunAsX86, false))
            {
                throw new NUnitEngineException("Cannot run tests in process - a 32 bit process is required.");
            }

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return _realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName);
        }
Exemplo n.º 39
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TestRun"/> class.
 /// </summary>
 public TestRun(ITestEngineRunner runner)
 {
     _runner = runner;
     _waitHandle = new ManualResetEvent(initialState: false);
 }
Exemplo n.º 40
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void UnloadPackage()
 {
     try
     {
         if (_remoteRunner != null)
         {
             log.Info("Unloading remote runner");
             _remoteRunner.Unload();
             _remoteRunner = null;
         }
     }
     catch (Exception e)
     {
         log.Warning("Failed to unload the remote runner. {0}", e.Message);
         _remoteRunner = null;
     }
 }
Exemplo n.º 41
0
        public TestEngineResult Load()
        {
            //System.Diagnostics.Debug.Assert(false, "Attach debugger if desired");

            _runner = Services.GetService<ITestRunnerFactory>().MakeTestRunner(_package);
            return _runner.Load();
        }
Exemplo n.º 42
0
        private void PerformPackageSetup(TestPackage package)
        {
            this.TestPackage = package;

            // Expand projects, updating the count of projects and assemblies
            ExpandProjects();

            // If there is more than one project or a mix of assemblies and 
            // projects, AggregatingTestRunner will call MakeTestRunner for
            // each project or assembly.
            _realRunner = _projectCount > 1 || _projectCount > 0 && _assemblyCount > 0
                ? new AggregatingTestRunner(Services, package)
                : Services.TestRunnerFactory.MakeTestRunner(package);
        }
Exemplo n.º 43
0
        private void CreateAgentAndRunner(bool enableDebug, string agentArgs)
        {
            if (_agent == null)
            {
                _agent = Services.TestAgency.GetAgent(
                    RuntimeFramework,
                    30000,
                    enableDebug,
                    agentArgs);

                if (_agent == null)
                    throw new Exception("Unable to acquire remote process agent");
            }

            if (_remoteRunner == null)
                _remoteRunner = _agent.CreateRunner(TestPackage);
        }
Exemplo n.º 44
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            // Last chance to catch invalid settings in package,
            // in case the client runner missed them.
            ValidatePackageSettings();

            // Some files in the top level package may be projects.
            // Expand them so that they contain subprojects for
            // each contained assembly.
            ExpandProjects();

            // Use SelectRuntimeFramework for its side effects.
            // Info will be left behind in the package about
            // each contained assembly, which will subsequently
            // be used to determine how to run the assembly.
            RuntimeService.SelectRuntimeFramework(TestPackage);

            _realRunner = TestRunnerFactory.MakeTestRunner(TestPackage);

            return _realRunner.Load().Aggregate(TEST_RUN_ELEMENT, TestPackage.Name, TestPackage.FullName);
        }
Exemplo n.º 45
0
 /// <summary>
 /// Unload any loaded TestPackage and clear
 /// the reference to the remote runner.
 /// </summary>
 public override void UnloadPackage()
 {
     if (_remoteRunner != null)
     {
         log.Info("Unloading remote runner");
         _remoteRunner.Unload();
         _remoteRunner = null;
     }
 }
Exemplo n.º 46
0
        /// <summary>
        /// Load a TestPackage for possible execution
        /// </summary>
        /// <returns>A TestEngineResult.</returns>
        protected override TestEngineResult LoadPackage()
        {
            log.Info("Loading " + TestPackage.Name);
            Unload();

            try
            {
                if (_agent == null)
                {
                    // Increase the timeout to give time to attach a debugger
                    bool debug = TestPackage.GetSetting(PackageSettings.DebugAgent, false) ||
                                 TestPackage.GetSetting(PackageSettings.PauseBeforeRun, false);

                    _agent = _agency.GetAgent(TestPackage, debug ? DEBUG_TIMEOUT : NORMAL_TIMEOUT);

                    if (_agent == null)
                        throw new Exception("Unable to acquire remote process agent");
                }

                if (_remoteRunner == null)
                    _remoteRunner = _agent.CreateRunner(TestPackage);

                return _remoteRunner.Load();
            }
            catch(Exception)
            {
                // TODO: Check if this is really needed
                // Clean up if the load failed
                Unload();
                throw;
            }
        }
Exemplo n.º 47
0
        // TODO: Review this method once we have a gui - not used by console runner
        public override bool CanReuse(ITestEngineRunner runner, TestPackage package)
        {
            ProcessModel processModel = GetTargetProcessModel(package);

            switch (processModel)
            {
                case ProcessModel.Default:
                case ProcessModel.Multiple:
                    return runner is MultipleTestProcessRunner;
                case ProcessModel.Separate:
                    return runner is ProcessRunner;
                default:
                    return base.CanReuse(runner, package);
            }
        }