| File: DataCollection\ParallelDataCollectionEventsHandler.cs | Web Access |
| Project: src\vstest\src\Microsoft.TestPlatform.CrossPlatEngine\Microsoft.TestPlatform.CrossPlatEngine.csproj (Microsoft.TestPlatform.CrossPlatEngine) |
// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Interfaces; using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.Parallel; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Engine; namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection; internal class ParallelDataCollectionEventsHandler : ParallelRunEventsHandler { private readonly ParallelRunDataAggregator _runDataAggregator; private readonly ITestRunAttachmentsProcessingManager? _attachmentsProcessingManager; private readonly CancellationToken _cancellationToken; public ParallelDataCollectionEventsHandler(IRequestData requestData, IProxyExecutionManager proxyExecutionManager, IInternalTestRunEventsHandler actualRunEventsHandler, IParallelProxyExecutionManager parallelProxyExecutionManager, ParallelRunDataAggregator runDataAggregator, ITestRunAttachmentsProcessingManager attachmentsProcessingManager, CancellationToken cancellationToken) : this(requestData, proxyExecutionManager, actualRunEventsHandler, parallelProxyExecutionManager, runDataAggregator, JsonDataSerializer.Instance) { _attachmentsProcessingManager = attachmentsProcessingManager; _cancellationToken = cancellationToken; } internal ParallelDataCollectionEventsHandler(IRequestData requestData, IProxyExecutionManager proxyExecutionManager, IInternalTestRunEventsHandler actualRunEventsHandler, IParallelProxyExecutionManager parallelProxyExecutionManager, ParallelRunDataAggregator runDataAggregator, IDataSerializer dataSerializer) : base(requestData, proxyExecutionManager, actualRunEventsHandler, parallelProxyExecutionManager, runDataAggregator, dataSerializer) { _runDataAggregator = runDataAggregator; } /// <summary> /// Handles the Run Complete event from a parallel proxy manager /// </summary> public override void HandleTestRunComplete( TestRunCompleteEventArgs testRunCompleteArgs, TestRunChangedEventArgs? lastChunkArgs, ICollection<AttachmentSet>? runContextAttachments, ICollection<string>? executorUris) { var parallelRunComplete = HandleSingleTestRunComplete(testRunCompleteArgs, lastChunkArgs, runContextAttachments, executorUris); if (!parallelRunComplete) { return; } TPDebug.Assert(_attachmentsProcessingManager is not null, "_attachmentsProcessingManager is null"); _runDataAggregator.RunContextAttachments = _attachmentsProcessingManager.ProcessTestRunAttachmentsAsync(_runDataAggregator.RunSettings, _requestData, _runDataAggregator.RunContextAttachments, _runDataAggregator.InvokedDataCollectors, _cancellationToken).Result ?? _runDataAggregator.RunContextAttachments; var completedArgs = new TestRunCompleteEventArgs(_runDataAggregator.GetAggregatedRunStats(), _runDataAggregator.IsCanceled, _runDataAggregator.IsAborted, _runDataAggregator.GetAggregatedException(), _runDataAggregator.RunContextAttachments, new Collection<InvokedDataCollector>(_runDataAggregator.InvokedDataCollectors.ToList()), _runDataAggregator.ElapsedTime); // Add Metrics from Test Host completedArgs.Metrics = _runDataAggregator.GetAggregatedRunDataMetrics(); HandleParallelTestRunComplete(completedArgs); } }