Exemplo n.º 1
0
        private Task StartProcessingAsync(ITestRequestHandler requestHandler, ITestHostManagerFactory managerFactory)
        {
            var task = new Task(
                () =>
            {
                // Wait for the connection to the sender and start processing requests from sender
                // Note that we are waiting here infinitely to connect to vstest.console, but at the same time vstest.console doesn't wait infinitely.
                // It has a default timeout of 60secs(which is configurable), & then it kills testhost.exe
                // The reason to wait infinitely, was remote debugging scenarios of UWP app,
                // in such cases after the app gets launched, VS debugger takes control of it, & causes a lot of delay, which frequently causes timeout with vstest.console.
                // One fix would be just double this timeout, but there is no telling how much time it can actually take.
                // Hence we are waiting here indefinitely, to avoid such guessed timeouts, & letting user kill the debugging if they feel it is taking too much time.
                // In other cases if vstest.console's timeout exceeds it will definitely such down the app.
                if (requestHandler.WaitForRequestSenderConnection(ClientListenTimeOut))
                {
                    EqtTrace.Info("DefaultEngineInvoker.StartProcessingAsync: Connected to vstest.console, Starting process requests.");
                    requestHandler.ProcessRequests(managerFactory);
                }
                else
                {
                    EqtTrace.Info(
                        "DefaultEngineInvoker.StartProcessingAsync: RequestHandler timed out while connecting to the Sender.");
                    throw new TimeoutException();
                }
            },
                TaskCreationOptions.LongRunning);

            task.Start();
            return(task);
        }
Exemplo n.º 2
0
 private Task StartProcessingAsync(ITestRequestHandler requestHandler, ITestHostManagerFactory managerFactory)
 {
     return(Task.Run(() =>
     {
         // Wait for the connection to the sender and start processing requests from sender
         if (requestHandler.WaitForRequestSenderConnection(ClientListenTimeOut))
         {
             requestHandler.ProcessRequests(managerFactory);
         }
         else
         {
             EqtTrace.Info("DefaultEngineInvoker: RequestHandler timed out while connecting to the Sender.");
             throw new TimeoutException();
         }
     }));
 }
 private Task ProcessRequestsAsync(ITestHostManagerFactory testHostManagerFactory)
 {
     return(Task.Run(() => this.requestHandler.ProcessRequests(testHostManagerFactory)));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="InProcessProxyDiscoveryManager"/> class.
 /// </summary>
 /// <param name="testHostManager">
 /// The test Host Manager.
 /// </param>
 /// <param name="testHostManagerFactory">
 /// Manager factory
 /// </param>
 public InProcessProxyDiscoveryManager(ITestRuntimeProvider testHostManager, ITestHostManagerFactory testHostManagerFactory)
 {
     this.testHostManager        = testHostManager;
     this.testHostManagerFactory = testHostManagerFactory;
     this.discoveryManager       = this.testHostManagerFactory.GetDiscoveryManager();
 }
 /// <inheritdoc />
 public void ProcessRequests(ITestHostManagerFactory testHostManagerFactory)
 {
     this.testHostManagerFactory = testHostManagerFactory;
     this.testHostManagerFactoryReady.Set();
     this.sessionCompleted.Wait();
 }
Exemplo n.º 6
0
        /// <summary>
        /// Listens to the commands from server
        /// </summary>
        /// <param name="testHostManagerFactory">the test host manager.</param>
        public void ProcessRequests(ITestHostManagerFactory testHostManagerFactory)
        {
            bool isSessionEnd = false;

            var jobQueue = new JobQueue <Action>(
                action => { action(); },
                "TestHostOperationQueue",
                500,
                25000000,
                true,
                (message) => EqtTrace.Error(message));

            do
            {
                var message = this.communicationManager.ReceiveMessage();

                switch (message.MessageType)
                {
                case MessageType.VersionCheck:
                    var version = this.dataSerializer.DeserializePayload <int>(message);
                    this.protocolVersion = Math.Min(version, highestSupportedVersion);
                    this.communicationManager.SendMessage(MessageType.VersionCheck, this.protocolVersion);

                    // Can only do this after InitializeCommunication because TestHost cannot "Send Log" unless communications are initialized
                    if (!string.IsNullOrEmpty(EqtTrace.LogFile))
                    {
                        this.SendLog(TestMessageLevel.Informational, string.Format(CrossPlatResources.TesthostDiagLogOutputFile, EqtTrace.LogFile));
                    }
                    else if (!string.IsNullOrEmpty(EqtTrace.ErrorOnInitialization))
                    {
                        this.SendLog(TestMessageLevel.Warning, EqtTrace.ErrorOnInitialization);
                    }

                    break;

                case MessageType.DiscoveryInitialize:
                {
                    EqtTrace.Info("Discovery Session Initialize.");
                    var pathToAdditionalExtensions = this.dataSerializer.DeserializePayload <IEnumerable <string> >(message);
                    jobQueue.QueueJob(
                        () => testHostManagerFactory.GetDiscoveryManager()
                        .Initialize(pathToAdditionalExtensions),
                        0);
                    break;
                }

                case MessageType.StartDiscovery:
                {
                    EqtTrace.Info("Discovery started.");

                    var discoveryEventsHandler = new TestDiscoveryEventHandler(this);
                    var discoveryCriteria      = this.dataSerializer.DeserializePayload <DiscoveryCriteria>(message);
                    jobQueue.QueueJob(
                        () => testHostManagerFactory.GetDiscoveryManager()
                        .DiscoverTests(discoveryCriteria, discoveryEventsHandler),
                        0);

                    break;
                }

                case MessageType.ExecutionInitialize:
                {
                    EqtTrace.Info("Discovery Session Initialize.");
                    var pathToAdditionalExtensions = this.dataSerializer.DeserializePayload <IEnumerable <string> >(message);
                    jobQueue.QueueJob(
                        () => testHostManagerFactory.GetExecutionManager()
                        .Initialize(pathToAdditionalExtensions),
                        0);
                    break;
                }

                case MessageType.StartTestExecutionWithSources:
                {
                    EqtTrace.Info("Execution started.");
                    var testRunEventsHandler = new TestRunEventsHandler(this);

                    var testRunCriteriaWithSources = this.dataSerializer.DeserializePayload <TestRunCriteriaWithSources>(message);
                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetExecutionManager()
                        .StartTestRun(
                            testRunCriteriaWithSources.AdapterSourceMap,
                            testRunCriteriaWithSources.Package,
                            testRunCriteriaWithSources.RunSettings,
                            testRunCriteriaWithSources.TestExecutionContext,
                            this.GetTestCaseEventsHandler(testRunCriteriaWithSources.RunSettings),
                            testRunEventsHandler),
                        0);

                    break;
                }

                case MessageType.StartTestExecutionWithTests:
                {
                    EqtTrace.Info("Execution started.");
                    var testRunEventsHandler = new TestRunEventsHandler(this);

                    var testRunCriteriaWithTests =
                        this.communicationManager.DeserializePayload <TestRunCriteriaWithTests>(message);

                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetExecutionManager()
                        .StartTestRun(
                            testRunCriteriaWithTests.Tests,
                            testRunCriteriaWithTests.Package,
                            testRunCriteriaWithTests.RunSettings,
                            testRunCriteriaWithTests.TestExecutionContext,
                            this.GetTestCaseEventsHandler(testRunCriteriaWithTests.RunSettings),
                            testRunEventsHandler),
                        0);

                    break;
                }

                case MessageType.CancelTestRun:
                    jobQueue.Pause();
                    testHostManagerFactory.GetExecutionManager().Cancel();
                    break;

                case MessageType.LaunchAdapterProcessWithDebuggerAttachedCallback:
                    this.onAckMessageRecieved?.Invoke(message);
                    break;

                case MessageType.AbortTestRun:
                    jobQueue.Pause();
                    testHostManagerFactory.GetExecutionManager().Abort();
                    break;

                case MessageType.SessionEnd:
                {
                    EqtTrace.Info("Session End message received from server. Closing the connection.");
                    isSessionEnd = true;
                    this.Close();
                    break;
                }

                case MessageType.SessionAbort:
                {
                    // Dont do anything for now.
                    break;
                }

                default:
                {
                    EqtTrace.Info("Invalid Message types");
                    break;
                }
                }
            }while (!isSessionEnd);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="InProcessProxyexecutionManager"/> class.
 /// </summary>
 /// <param name="testHostManager">
 /// The test Host Manager.
 /// </param>
 /// <param name="testHostManagerFactory">
 /// Manager factory
 /// </param>
 public InProcessProxyExecutionManager(ITestRuntimeProvider testHostManager, ITestHostManagerFactory testHostManagerFactory)
 {
     this.testHostManager        = testHostManager;
     this.testHostManagerFactory = testHostManagerFactory;
     this.executionManager       = this.testHostManagerFactory.GetExecutionManager();
 }
Exemplo n.º 8
0
        /// <summary>
        /// Listens to the commands from server
        /// </summary>
        /// <param name="testHostManagerFactory">the test host manager.</param>
        public void ProcessRequests(ITestHostManagerFactory testHostManagerFactory)
        {
            bool isSessionEnd = false;

            var jobQueue = new JobQueue <Action>(
                (action) => { action(); },
                "TestHostOperationQueue",
                500,
                25000000,
                true,
                (message) => EqtTrace.Error(message));

            do
            {
                var message = this.communicationManager.ReceiveMessage();
                switch (message.MessageType)
                {
                case MessageType.DiscoveryInitialize:
                {
                    EqtTrace.Info("Discovery Session Initialize.");
                    var pathToAdditionalExtensions = message.Payload.ToObject <IEnumerable <string> >();
                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetDiscoveryManager().Initialize(pathToAdditionalExtensions), 0);
                    break;
                }

                case MessageType.StartDiscovery:
                {
                    EqtTrace.Info("Discovery started.");

                    var discoveryEventsHandler = new TestDiscoveryEventHandler(this);
                    var discoveryCriteria      = message.Payload.ToObject <DiscoveryCriteria>();
                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetDiscoveryManager()
                        .DiscoverTests(discoveryCriteria, discoveryEventsHandler), 0);

                    break;
                }

                case MessageType.ExecutionInitialize:
                {
                    EqtTrace.Info("Discovery Session Initialize.");
                    var pathToAdditionalExtensions = message.Payload.ToObject <IEnumerable <string> >();
                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetExecutionManager().Initialize(pathToAdditionalExtensions), 0);
                    break;
                }

                case MessageType.StartTestExecutionWithSources:
                {
                    EqtTrace.Info("Execution started.");
                    var testRunEventsHandler = new TestRunEventsHandler(this);

                    var testRunCriteriaWithSources = message.Payload.ToObject <TestRunCriteriaWithSources>();
                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetExecutionManager()
                        .StartTestRun(
                            testRunCriteriaWithSources.AdapterSourceMap,
                            testRunCriteriaWithSources.RunSettings,
                            testRunCriteriaWithSources.TestExecutionContext,
                            null,
                            testRunEventsHandler),
                        0);

                    break;
                }

                case MessageType.StartTestExecutionWithTests:
                {
                    EqtTrace.Info("Execution started.");
                    var testRunEventsHandler = new TestRunEventsHandler(this);

                    var testRunCriteriaWithTests =
                        this.communicationManager.DeserializePayload <TestRunCriteriaWithTests>
                            (message);

                    jobQueue.QueueJob(
                        () =>
                        testHostManagerFactory.GetExecutionManager()
                        .StartTestRun(
                            testRunCriteriaWithTests.Tests,
                            testRunCriteriaWithTests.RunSettings,
                            testRunCriteriaWithTests.TestExecutionContext,
                            null,
                            testRunEventsHandler),
                        0);

                    break;
                }

                case MessageType.CancelTestRun:
                    jobQueue.Pause();
                    testHostManagerFactory.GetExecutionManager().Cancel();
                    break;

                case MessageType.LaunchAdapterProcessWithDebuggerAttachedCallback:
                    this.OnAckMessageRecieved?.Invoke(message);
                    break;

                case MessageType.AbortTestRun:
                    jobQueue.Pause();
                    testHostManagerFactory.GetExecutionManager().Abort();
                    break;

                case MessageType.SessionEnd:
                {
                    EqtTrace.Info("Session End message received from server. Closing the connection.");
                    isSessionEnd = true;
                    this.Close();
                    break;
                }

                case MessageType.SessionAbort:
                {
                    // Dont do anything for now.
                    break;
                }

                default:
                {
                    EqtTrace.Info("Invalid Message types");
                    break;
                }
                }
            }while (!isSessionEnd);
        }