From d799be6e0597b888ae64f3e23f4b5fe9b9caf15a Mon Sep 17 00:00:00 2001 From: Jakub Chocholowicz Date: Thu, 21 May 2020 20:35:00 +0200 Subject: [PATCH] More changes --- .../IMultiTestRunsFinalizationManager.cs | 25 +++---- .../MultiTestRunsFinalizationEventsHandler.cs | 74 +++++++++++++++++++ .../Interfaces/ITestRequestHandler.cs | 6 ++ .../Messages/MessageType.cs | 2 +- ...TestRunsDataCollectorAttachmentsHandler.cs | 42 +++++++++++ .../ParallelDataCollectionEventsHandler.cs | 28 +------ .../EventHandlers/TestRequestHandler.cs | 34 +++++++++ .../MultiTestRunsFinalizationManager.cs | 34 ++++++++- ...IMultiTestRunsFinalizationEventsHandler.cs | 6 +- .../MultiTestRunsFinalizationPayload.cs | 4 +- .../ITranslationLayerRequestSender.cs | 2 +- .../Interfaces/IVsTestConsoleWrapper2.cs | 2 +- .../VsTestConsoleRequestSender.cs | 7 +- .../VsTestConsoleWrapper.cs | 2 +- 14 files changed, 214 insertions(+), 54 deletions(-) create mode 100644 src/Microsoft.TestPlatform.CommunicationUtilities/EventHandlers/MultiTestRunsFinalizationEventsHandler.cs create mode 100644 src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/MultiTestRunsDataCollectorAttachmentsHandler.cs diff --git a/src/Microsoft.TestPlatform.Common/Interfaces/Engine/TesthostProtocol/IMultiTestRunsFinalizationManager.cs b/src/Microsoft.TestPlatform.Common/Interfaces/Engine/TesthostProtocol/IMultiTestRunsFinalizationManager.cs index b67250e839..e21350c231 100644 --- a/src/Microsoft.TestPlatform.Common/Interfaces/Engine/TesthostProtocol/IMultiTestRunsFinalizationManager.cs +++ b/src/Microsoft.TestPlatform.Common/Interfaces/Engine/TesthostProtocol/IMultiTestRunsFinalizationManager.cs @@ -1,24 +1,21 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; +using System.Collections.Generic; + namespace Microsoft.VisualStudio.TestPlatform.ObjectModel.Engine.TesthostProtocol { - using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; - using System.Collections.Generic; - - namespace Microsoft.VisualStudio.TestPlatform.Common.Interfaces.Engine.TesthostProtocol + /// + /// Orchestrates multi test runs finalization operations for the engine communicating with the test host process. + /// + public interface IMultiTestRunsFinalizationManager { /// - /// Orchestrates multi test runs finalization operations for the engine communicating with the test host process. + /// Finalizes multi test runs /// - public interface IMultiTestRunsFinalizationManager - { - /// - /// Discovers tests - /// - /// Settings, parameters for the discovery request - /// EventHandler for handling discovery events from Engine - void FinalizeMultiTestRuns(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler eventHandler); - } + /// Attachments + /// EventHandler for handling multi test runs finalization events from Engine + void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler eventHandler); } } diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/EventHandlers/MultiTestRunsFinalizationEventsHandler.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/EventHandlers/MultiTestRunsFinalizationEventsHandler.cs new file mode 100644 index 0000000000..bc4ba4b350 --- /dev/null +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/EventHandlers/MultiTestRunsFinalizationEventsHandler.cs @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.EventHandlers +{ + using System.Collections.Generic; + + using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Interfaces; + using Microsoft.VisualStudio.TestPlatform.ObjectModel; + using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; + using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; + + /// + /// The multi test finalization event handler. + /// + public class MultiTestRunsFinalizationEventsHandler : IMultiTestRunsFinalizationEventsHandler + { + private ITestRequestHandler requestHandler; + + /// + /// Initializes a new instance of the class. + /// + /// The Request Handler. + public MultiTestRunsFinalizationEventsHandler(ITestRequestHandler requestHandler) + { + this.requestHandler = requestHandler; + } + + /// + /// The handle discovery message. + /// + /// Logging level. + /// Logging message. + public void HandleLogMessage(TestMessageLevel level, string message) + { + switch ((TestMessageLevel)level) + { + case TestMessageLevel.Informational: + EqtTrace.Info(message); + break; + + case TestMessageLevel.Warning: + EqtTrace.Warning(message); + break; + + case TestMessageLevel.Error: + EqtTrace.Error(message); + break; + + default: + EqtTrace.Info(message); + break; + } + + this.requestHandler.SendLog(level, message); + } + + public void HandleMultiTestRunsFinalizationComplete(ICollection attachments) + { + if (EqtTrace.IsInfoEnabled) + { + EqtTrace.Info("Multi test runs finalization completed."); + } + + this.requestHandler.MultiTestRunsFinalizationComplete(attachments); + } + + public void HandleRawMessage(string rawMessage) + { + // No-Op + // TestHost at this point has no functionality where it requires rawmessage + } + } +} diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestHandler.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestHandler.cs index 8908a72fc7..a83897979d 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestHandler.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestHandler.cs @@ -79,6 +79,12 @@ public interface ITestRequestHandler : IDisposable /// The last Chunk. void DiscoveryComplete(DiscoveryCompleteEventArgs discoveryCompleteEventArgs, IEnumerable lastChunk); + /// + /// The multi test runs finalization complete handler + /// + /// Attachments + void MultiTestRunsFinalizationComplete(ICollection attachments); + /// /// Launches a process with a given process info under debugger /// Adapter get to call into this to launch any additional processes under debugger diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/Messages/MessageType.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/Messages/MessageType.cs index d4564a3c45..a5af0cd46a 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/Messages/MessageType.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/Messages/MessageType.cs @@ -131,7 +131,7 @@ public static class MessageType /// /// Multi test runs finalization callback /// - public const string MultiTestRunsFinalizationCallback = "TestExecution.MultiTestRunsFinalizationCallback"; + public const string MultiTestRunsFinalizationComplete = "TestExecution.MultiTestRunsFinalizationComplete"; /// /// Extensions Initialization diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/MultiTestRunsDataCollectorAttachmentsHandler.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/MultiTestRunsDataCollectorAttachmentsHandler.cs new file mode 100644 index 0000000000..cad95055ff --- /dev/null +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/MultiTestRunsDataCollectorAttachmentsHandler.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection +{ + public class MultiTestRunsDataCollectorAttachmentsHandler + { + private readonly IDataCollectorAttachments dataCollectorAttachmentsHandler; + + public MultiTestRunsDataCollectorAttachmentsHandler(IDataCollectorAttachments dataCollectorAttachmentsHandler) + { + this.dataCollectorAttachmentsHandler = dataCollectorAttachmentsHandler; + } + + public void HandleAttachements(ICollection attachments) + { + Uri attachementUri = dataCollectorAttachmentsHandler.GetExtensionUri(); + if (attachementUri != null) + { + var coverageAttachments = attachments.Where(dataCollectionAttachment => attachementUri.Equals(dataCollectionAttachment.Uri)).ToArray(); + + foreach (var coverageAttachment in coverageAttachments) + { + attachments.Remove(coverageAttachment); + } + + ICollection mergedAttachments = dataCollectorAttachmentsHandler.HandleDataCollectionAttachmentSets(new Collection(coverageAttachments)); + foreach (var attachment in mergedAttachments) + { + attachments.Add(attachment); + } + } + } + } +} diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/ParallelDataCollectionEventsHandler.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/ParallelDataCollectionEventsHandler.cs index 0f5432cd78..67d9d2df70 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/ParallelDataCollectionEventsHandler.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/DataCollection/ParallelDataCollectionEventsHandler.cs @@ -3,10 +3,7 @@ namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection { - using System; using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.Linq; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Interfaces; @@ -19,6 +16,7 @@ namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection internal class ParallelDataCollectionEventsHandler : ParallelRunEventsHandler { private readonly ParallelRunDataAggregator runDataAggregator; + private readonly MultiTestRunsDataCollectorAttachmentsHandler attachmentsHandler; public ParallelDataCollectionEventsHandler(IRequestData requestData, IProxyExecutionManager proxyExecutionManager, @@ -27,6 +25,8 @@ public ParallelDataCollectionEventsHandler(IRequestData requestData, ParallelRunDataAggregator runDataAggregator) : this(requestData, proxyExecutionManager, actualRunEventsHandler, parallelProxyExecutionManager, runDataAggregator, JsonDataSerializer.Instance) { + // TODO : use TestPluginCache to iterate over all IDataCollectorAttachments + attachmentsHandler = new MultiTestRunsDataCollectorAttachmentsHandler(new CodeCoverageDataAttachmentsHandler()); } internal ParallelDataCollectionEventsHandler(IRequestData requestData, @@ -53,27 +53,7 @@ public override void HandleTestRunComplete( if (parallelRunComplete) { - // TODO : use TestPluginCache to iterate over all IDataCollectorAttachments - { - var coverageHandler = new CodeCoverageDataAttachmentsHandler(); - Uri attachementUri = coverageHandler.GetExtensionUri(); - if (attachementUri != null) - { - var coverageAttachments = runDataAggregator.RunContextAttachments - .Where(dataCollectionAttachment => attachementUri.Equals(dataCollectionAttachment.Uri)).ToArray(); - - foreach (var coverageAttachment in coverageAttachments) - { - runDataAggregator.RunContextAttachments.Remove(coverageAttachment); - } - - ICollection attachments = coverageHandler.HandleDataCollectionAttachmentSets(new Collection(coverageAttachments)); - foreach (var attachment in attachments) - { - runDataAggregator.RunContextAttachments.Add(attachment); - } - } - } + attachmentsHandler.HandleAttachements(runDataAggregator.RunContextAttachments); var completedArgs = new TestRunCompleteEventArgs(this.runDataAggregator.GetAggregatedRunStats(), this.runDataAggregator.IsCanceled, diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs index 5319d0bb78..18759177dd 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs @@ -5,12 +5,15 @@ namespace Microsoft.VisualStudio.TestPlatform.CommunicationUtilities { using System; using System.Collections.Generic; + using System.Linq; using System.Threading; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.EventHandlers; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Interfaces; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel; + using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection; using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.EventHandlers; + using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.MultiTestRunsFinalization; using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Engine; @@ -193,6 +196,19 @@ public void DiscoveryComplete(DiscoveryCompleteEventArgs discoveryCompleteEventA this.SendData(data); } + /// + public void MultiTestRunsFinalizationComplete(ICollection attachments) + { + var data = this.dataSerializer.SerializePayload( + MessageType.MultiTestRunsFinalizationComplete, + new MultiTestRunsFinalizationCompletePayload + { + Attachments = attachments + }, + this.protocolVersion); + this.SendData(data); + } + /// public int LaunchProcessWithDebuggerAttached(TestProcessStartInfo testProcessStartInfo) { @@ -359,6 +375,24 @@ public void OnMessageReceived(object sender, MessageReceivedEventArgs messageRec break; } + case MessageType.MultiTestRunsFinalization: + { + EqtTrace.Info("Multi test runs finalization started."); + var multiTestRunsFinalizationEventsHandler = new MultiTestRunsFinalizationEventsHandler(this); + var multiTestRunsFinalizationManager = new MultiTestRunsFinalizationManager(new MultiTestRunsDataCollectorAttachmentsHandler(new CodeCoverageDataAttachmentsHandler())); + var multiTestRunsFinalizationPayload = this.dataSerializer.DeserializePayload(message); + + jobQueue.QueueJob( + () => + multiTestRunsFinalizationManager + .FinalizeMultiTestRuns( + multiTestRunsFinalizationPayload.Attachments, + multiTestRunsFinalizationEventsHandler), + 0); + + break; + } + case MessageType.CancelTestRun: jobQueue.Pause(); this.testHostManagerFactoryReady.Wait(); diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/MultiTestRunsFinalization/MultiTestRunsFinalizationManager.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/MultiTestRunsFinalization/MultiTestRunsFinalizationManager.cs index 9fad708282..7d338890f8 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/MultiTestRunsFinalization/MultiTestRunsFinalizationManager.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/MultiTestRunsFinalization/MultiTestRunsFinalizationManager.cs @@ -1,10 +1,38 @@ -using System; +// 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.Text; +using Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; +using Microsoft.VisualStudio.TestPlatform.ObjectModel.Engine.TesthostProtocol; namespace Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.MultiTestRunsFinalization { - class MultiTestRunsFinalizationManager + /// + /// Orchestrates multi test runs finalization operations for the engine communicating with the test host process. + /// + public class MultiTestRunsFinalizationManager : IMultiTestRunsFinalizationManager { + private readonly MultiTestRunsDataCollectorAttachmentsHandler attachmentsHandler; + + /// + /// Initializes a new instance of the class. + /// + public MultiTestRunsFinalizationManager(MultiTestRunsDataCollectorAttachmentsHandler attachmentsHandler) + { + this.attachmentsHandler = attachmentsHandler; + } + + /// + /// Finalizes multi test runs + /// + /// Attachments + /// EventHandler for handling multi test runs finalization events from Engine + public void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler eventHandler) + { + attachmentsHandler.HandleAttachements(attachments); + eventHandler.HandleMultiTestRunsFinalizationComplete(attachments); + } } } diff --git a/src/Microsoft.TestPlatform.ObjectModel/Client/Interfaces/IMultiTestRunsFinalizationEventsHandler.cs b/src/Microsoft.TestPlatform.ObjectModel/Client/Interfaces/IMultiTestRunsFinalizationEventsHandler.cs index aad25a5359..ed4cbd7b8d 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Client/Interfaces/IMultiTestRunsFinalizationEventsHandler.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Client/Interfaces/IMultiTestRunsFinalizationEventsHandler.cs @@ -1,10 +1,10 @@ // 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; + namespace Microsoft.VisualStudio.TestPlatform.ObjectModel.Client { - using System.Collections.Generic; - /// /// Interface contract for handling multi test runs finalization complete events /// @@ -14,6 +14,6 @@ public interface IMultiTestRunsFinalizationEventsHandler : ITestMessageEventHand /// Dispatch MultiTestRunsFinalizationComplete event to listeners. /// /// Attachments reprocessed. - void HandleMultiTestRunsFinalizationComplete(IEnumerable attachments); + void HandleMultiTestRunsFinalizationComplete(ICollection attachments); } } \ No newline at end of file diff --git a/src/Microsoft.TestPlatform.ObjectModel/Client/Payloads/MultiTestRunsFinalizationPayload.cs b/src/Microsoft.TestPlatform.ObjectModel/Client/Payloads/MultiTestRunsFinalizationPayload.cs index 662c6dc6f6..63f81593e5 100644 --- a/src/Microsoft.TestPlatform.ObjectModel/Client/Payloads/MultiTestRunsFinalizationPayload.cs +++ b/src/Microsoft.TestPlatform.ObjectModel/Client/Payloads/MultiTestRunsFinalizationPayload.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -namespace Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.Payloads +namespace Microsoft.VisualStudio.TestPlatform.ObjectModel.Client { using System.Collections.Generic; using System.Runtime.Serialization; @@ -15,6 +15,6 @@ public class MultiTestRunsFinalizationPayload /// Settings used for the discovery request. /// [DataMember] - public IEnumerable Attachments { get; set; } + public ICollection Attachments { get; set; } } } diff --git a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/ITranslationLayerRequestSender.cs b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/ITranslationLayerRequestSender.cs index 9af7ac69f6..a8e73ab57c 100644 --- a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/ITranslationLayerRequestSender.cs +++ b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/ITranslationLayerRequestSender.cs @@ -116,6 +116,6 @@ internal interface ITranslationLayerRequestSender : IDisposable /// /// List of attachements /// - void FinalizeMultiTestRuns(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler multiTestRunsFinalizationCompleteEventsHandler); + void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler multiTestRunsFinalizationCompleteEventsHandler); } } diff --git a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/IVsTestConsoleWrapper2.cs b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/IVsTestConsoleWrapper2.cs index 674a0dd0f5..9988ed548a 100644 --- a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/IVsTestConsoleWrapper2.cs +++ b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/Interfaces/IVsTestConsoleWrapper2.cs @@ -18,6 +18,6 @@ public interface IVsTestConsoleWrapper2 : IVsTestConsoleWrapper /// /// List of attachements /// EventHandler to receive session complete event - void FinalizeMultiTestRuns(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler multiTestRunsFinalizationCompleteEventsHandler); + void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler multiTestRunsFinalizationCompleteEventsHandler); } } diff --git a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/VsTestConsoleRequestSender.cs b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/VsTestConsoleRequestSender.cs index 8c3d0f05d1..b01516f499 100644 --- a/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/VsTestConsoleRequestSender.cs +++ b/src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/VsTestConsoleRequestSender.cs @@ -19,7 +19,6 @@ namespace Microsoft.TestPlatform.VsTestConsole.TranslationLayer using Microsoft.VisualStudio.TestPlatform.ObjectModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.Interfaces; - using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.Payloads; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; using TranslationLayerResources = Microsoft.VisualStudio.TestPlatform.VsTestConsole.TranslationLayer.Resources.Resources; @@ -385,7 +384,7 @@ public void EndSession() } /// - public void FinalizeMultiTestRuns(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler testSessionEventsHandler) + public void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler testSessionEventsHandler) { this.SendMessageAndListenAndReportAttachements(attachments, testSessionEventsHandler); } @@ -732,7 +731,7 @@ private async Task SendMessageAndListenAndReportTestResultsAsync(string messageT this.testPlatformEventSource.TranslationLayerExecutionStop(); } - private void SendMessageAndListenAndReportAttachements(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler eventHandler) + private void SendMessageAndListenAndReportAttachements(ICollection attachments, IMultiTestRunsFinalizationEventsHandler eventHandler) { try { @@ -750,7 +749,7 @@ private void SendMessageAndListenAndReportAttachements(IEnumerable - public void FinalizeMultiTestRuns(IEnumerable attachments, IMultiTestRunsFinalizationEventsHandler testSessionEventsHandler) + public void FinalizeMultiTestRuns(ICollection attachments, IMultiTestRunsFinalizationEventsHandler testSessionEventsHandler) { this.testPlatformEventSource.TranslationLayerMultiTestRunsFinalizationStart();