コード例 #1
0
        private void HandleAfterTestRunEnd(Message message)
        {
            var isCancelled = this.dataSerializer.DeserializePayload <bool>(message);

            if (isCancelled)
            {
                this.cancellationTokenSource.Cancel();
            }

            try
            {
                this.testCaseEventMonitorTask?.Wait(this.cancellationTokenSource.Token);
                this.dataCollectionTestCaseEventHandler.Close();
            }
            catch (Exception ex)
            {
                EqtTrace.Error("DataCollectionRequestHandler.HandleAfterTestRunEnd : Error while processing event from testhost: {0}", ex.ToString());
            }

            var attachmentsets        = this.dataCollectionManager.SessionEnded(isCancelled);
            var afterTestRunEndResult = new AfterTestRunEndResult(attachmentsets, this.requestData.MetricsCollection.Metrics);

            // Dispose all datacollectors before sending attachments to vstest.console process.
            // As datacollector process exits itself on parent process(vstest.console) exits.
            this.dataCollectionManager?.Dispose();

            this.communicationManager.SendMessage(MessageType.AfterTestRunEndResult, afterTestRunEndResult);
            EqtTrace.Info("DataCollectionRequestHandler.ProcessRequests : Session End message received from server. Closing the connection.");

            this.Close();

            EqtTrace.Info("DataCollectionRequestHandler.ProcessRequests : DataCollection completed");
        }
コード例 #2
0
        /// <summary>
        /// Invoked after ending of test run
        /// </summary>
        /// <param name="isCanceled">
        /// The is Canceled.
        /// </param>
        /// <param name="runEventsHandler">
        /// The run Events Handler.
        /// </param>
        /// <returns>
        /// The <see cref="Collection"/>.
        /// </returns>
        public Collection <AttachmentSet> AfterTestRunEnd(bool isCanceled, ITestMessageEventHandler runEventsHandler)
        {
            AfterTestRunEndResult afterTestRunEnd = null;

            this.InvokeDataCollectionServiceAction(
                () =>
            {
                EqtTrace.Info("ProxyDataCollectionManager.AfterTestRunEnd: Get attachment set for datacollector processId: {0} port: {1}", dataCollectionProcessId, dataCollectionPort);
                afterTestRunEnd = this.dataCollectionRequestSender.SendAfterTestRunEndAndGetResult(runEventsHandler, isCanceled);
            },
                runEventsHandler);

            if (requestData.IsTelemetryOptedIn && afterTestRunEnd?.Metrics != null)
            {
                foreach (var metric in afterTestRunEnd.Metrics)
                {
                    requestData.MetricsCollection.Add(metric.Key, metric.Value);
                }
            }

            return(afterTestRunEnd?.AttachmentSets);
        }
コード例 #3
0
        /// <inheritdoc/>
        public AfterTestRunEndResult SendAfterTestRunEndAndGetResult(ITestMessageEventHandler runEventsHandler, bool isCancelled)
        {
            var isDataCollectionComplete = false;
            AfterTestRunEndResult result = null;

            if (EqtTrace.IsVerboseEnabled)
            {
                EqtTrace.Verbose("DataCollectionRequestSender.SendAfterTestRunStartAndGetResult : Send AfterTestRunEnd message with isCancelled: {0}", isCancelled);
            }

            this.communicationManager.SendMessage(MessageType.AfterTestRunEnd, isCancelled);

            // Cycle through the messages that the datacollector sends.
            // Currently each of the operations are not separate tasks since they should not each take much time. This is just a notification.
            while (!isDataCollectionComplete && !isCancelled)
            {
                var message = this.communicationManager.ReceiveMessage();

                if (EqtTrace.IsVerboseEnabled)
                {
                    EqtTrace.Verbose("DataCollectionRequestSender.SendAfterTestRunStartAndGetResult : Received message: {0}", message);
                }

                if (message.MessageType == MessageType.DataCollectionMessage)
                {
                    var dataCollectionMessageEventArgs = this.dataSerializer.DeserializePayload <DataCollectionMessageEventArgs>(message);
                    this.LogDataCollectorMessage(dataCollectionMessageEventArgs, runEventsHandler);
                }
                else if (message.MessageType == MessageType.AfterTestRunEndResult)
                {
                    result = this.dataSerializer.DeserializePayload <AfterTestRunEndResult>(message);
                    isDataCollectionComplete = true;
                }
            }

            return(result);
        }