private void StartTestSession(StartTestSessionPayload payload, ITestRequestManager requestManager)
        {
            Task.Run(() =>
            {
                var eventsHandler = new TestSessionEventsHandler(this.communicationManager);

                try
                {
                    var customLauncher = payload.HasCustomHostLauncher
                        ? DesignModeTestHostLauncherFactory.GetCustomHostLauncherForTestRun(this, payload.IsDebuggingEnabled)
                        : null;

                    requestManager.ResetOptions();
                    requestManager.StartTestSession(payload, customLauncher, eventsHandler, this.protocolConfig);
                }
                catch (Exception ex)
                {
                    EqtTrace.Error("DesignModeClient: Exception in StartTestSession: " + ex);

                    eventsHandler.HandleLogMessage(TestMessageLevel.Error, ex.ToString());
                    eventsHandler.HandleStartTestSessionComplete(null);
                }
            });
        }
Esempio n. 2
0
        /// <inheritdoc/>
        public void StartTestSession(
            StartTestSessionPayload payload,
            ITestHostLauncher testHostLauncher,
            ITestSessionEventsHandler eventsHandler,
            ProtocolConfig protocolConfig)
        {
            EqtTrace.Info("TestRequestManager.StartTestSession: Starting test session.");

            if (payload.TestPlatformOptions != null)
            {
                this.telemetryOptedIn = payload.TestPlatformOptions.CollectMetrics;
            }

            var requestData = this.GetRequestData(protocolConfig);

            if (this.UpdateRunSettingsIfRequired(
                    payload.RunSettings,
                    payload.Sources,
                    null,
                    out string updatedRunsettings))
            {
                payload.RunSettings = updatedRunsettings;
            }

            if (InferRunSettingsHelper.AreRunSettingsCollectorsIncompatibleWithTestSettings(payload.RunSettings))
            {
                throw new SettingsException(
                          string.Format(
                              Resources.RunsettingsWithDCErrorMessage,
                              payload.RunSettings));
            }

            // TODO (copoiena): Collect metrics ?

            lock (this.syncObject)
            {
                try
                {
                    EqtTrace.Info("TestRequestManager.StartTestRunner: Synchronization context taken.");
                    this.TestPlatformEventSourceInstance.StartTestSessionStart();

                    var criteria = new StartTestSessionCriteria()
                    {
                        Sources          = payload.Sources,
                        RunSettings      = payload.RunSettings,
                        TestHostLauncher = testHostLauncher
                    };

                    this.testPlatform.StartTestSession(requestData, criteria, eventsHandler);
                }
                finally
                {
                    EqtTrace.Info("TestRequestManager.StartTestSession: Starting test session completed.");
                    this.TestPlatformEventSourceInstance.StartTestSessionStop();

                    // Post the attachments processing complete event.
                    this.metricsPublisher.Result.PublishMetrics(
                        TelemetryDataConstants.StartTestSessionCompleteEvent,
                        requestData.MetricsCollection.Metrics);
                }
            }
        }