From 1b56ba1533515ac91b86fbe26551460d21d13e98 Mon Sep 17 00:00:00 2001 From: Sarabjot Singh Date: Mon, 21 Oct 2019 19:26:57 +0530 Subject: [PATCH 1/4] Adding the missing implementation for cancellation of discovery request --- .../Interfaces/ITestRequestSender.cs | 5 +++++ .../TestRequestSender.cs | 17 +++++++++++++++++ .../Client/ProxyDiscoveryManager.cs | 8 +++++++- .../EventHandlers/TestRequestHandler.cs | 6 ++++++ .../TestRequestSenderTests.cs | 13 +++++++++++++ .../Client/ProxyDiscoveryManagerTests.cs | 15 +++++++++++++++ .../EventHandlers/TestRequestHandlerTests.cs | 14 +++++++++++--- 7 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs index d65aa7bb0f..ece9a948bb 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs @@ -87,6 +87,11 @@ public interface ITestRequestSender : IDisposable /// void SendTestRunAbort(); + /// + /// Send the request to cancel the test discovery + /// + void SendTestDiscoveryCancel(); + /// /// Handle client process exit /// diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs index 9cebf09b3d..64a46b4e71 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs @@ -317,6 +317,23 @@ public void StartTestRun(TestRunCriteriaWithTests runCriteria, ITestRunEventsHan this.channel.Send(message); } + /// + public void SendTestDiscoveryCancel() + { + if (this.IsOperationComplete()) + { + EqtTrace.Verbose("TestRequestSender: SendTestDiscoveryCancel: Operation is already complete. Skip error message."); + return; + } + + if (EqtTrace.IsVerboseEnabled) + { + EqtTrace.Verbose("TestRequestSender.SendTestDiscoveryCancel: Sending test discovery cancel."); + } + + this.channel?.Send(this.dataSerializer.SerializeMessage(MessageType.CancelDiscovery)); + } + /// public void SendTestRunCancel() { diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs index 8ba381f1ac..23afa0c077 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs @@ -140,7 +140,13 @@ public void DiscoverTests(DiscoveryCriteria discoveryCriteria, ITestDiscoveryEve /// public void Abort() { - // This is no-op for the moment. There is no discovery abort message? + // Cancel fast, try to stop testhost deployment/launch + this.CancellationTokenSource.Cancel(); + + if (this.isCommunicationEstablished) + { + this.RequestSender.SendTestDiscoveryCancel(); + } } /// diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs index 3149b022d9..e6988fe6c5 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs @@ -318,6 +318,12 @@ public void OnMessageReceived(object sender, MessageReceivedEventArgs messageRec break; } + case MessageType.CancelDiscovery: + jobQueue.Pause(); + this.testHostManagerFactoryReady.Wait(); + testHostManagerFactory.GetDiscoveryManager().Abort(); + break; + case MessageType.CancelTestRun: jobQueue.Pause(); this.testHostManagerFactoryReady.Wait(); diff --git a/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs b/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs index c911923149..6f91d67482 100644 --- a/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs +++ b/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs @@ -202,6 +202,19 @@ public void EndSessionShouldNotSendTestRunAbortMessageIfClientDisconnected() this.mockChannel.Verify(mockChannel => mockChannel.Send(MessageType.CancelTestRun), Times.Never); } + [TestMethod] + public void SendTestDiscoveryCancelShouldSendTestDiscoveryCancelMessage() + { + var serializedCancelMessage = "Message : TestDiscovery.Cancel"; + this.SetupFakeCommunicationChannel(); + this.testRequestSender.DiscoverTests(new DiscoveryCriteria(), this.mockDiscoveryEventsHandler.Object); + this.mockDataSerializer.Setup(ds => ds.SerializeMessage(MessageType.CancelDiscovery)).Returns(serializedCancelMessage); + + this.testRequestSender.SendTestDiscoveryCancel(); + + this.mockChannel.Verify(mockChannel => mockChannel.Send(serializedCancelMessage), Times.Once); + } + [DataTestMethod] [DataRow("")] [DataRow(" ")] diff --git a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs index 36659baa4a..6df1826cd8 100644 --- a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs +++ b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs @@ -493,6 +493,21 @@ public void DiscoveryManagerShouldPassOnHandleLogMessage() mockTestDiscoveryEventsHandler.Verify(mtdeh => mtdeh.HandleLogMessage(It.IsAny(), It.IsAny()), Times.Once); } + [TestMethod] + public void AbortShouldSendTestDiscoveryCancelIfCommunicationSuccessful() + { + var mockTestDiscoveryEventsHandler = new Mock(); + this.mockRequestSender.Setup(s => s.WaitForRequestHandlerConnection(It.IsAny(), It.IsAny())).Returns(true); + + Mock mockTestRunEventsHandler = new Mock(); + + this.testDiscoveryManager.DiscoverTests(this.discoveryCriteria, mockTestDiscoveryEventsHandler.Object); + + this.testDiscoveryManager.Abort(); + + this.mockRequestSender.Verify(s => s.SendTestDiscoveryCancel(), Times.Once); + } + private void InvokeAndVerifyDiscoverTests(bool skipDefaultAdapters) { TestPluginCache.Instance = null; diff --git a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs index 4b5d5a2d24..5958f120c7 100644 --- a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs +++ b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs @@ -286,7 +286,17 @@ public void ProcessRequestsExecutionCancelShouldCancelTestRun() this.SendSessionEnd(); } - // ProcessRequestsExecutionCancelShouldStopRequestProcessing + [TestMethod] + public void ProcessRequestsDiscoveryCancelShouldCancelDiscovery() + { + var message = this.dataSerializer.SerializePayload(MessageType.CancelDiscovery, string.Empty); + + this.ProcessRequestsAsync(this.mockTestHostManagerFactory.Object); + this.SendMessageOnChannel(message); + + mockDiscoveryManager.Verify(dm => dm.Abort(), Times.Once); + this.SendSessionEnd(); + } [TestMethod] public void ProcessRequestsExecutionLaunchAdapterProcessWithDebuggerShouldSendAckMessage() @@ -312,8 +322,6 @@ public void ProcessRequestsExecutionAbortShouldStopTestRun() this.SendSessionEnd(); } - // ProcessRequestsExecutionAbortShouldStopRequestProcessing - [TestMethod] public void SendExecutionCompleteShouldSendTestRunCompletePayloadOnChannel() { From b292ffce3c3906c994c8440ac1264e5f6114d91f Mon Sep 17 00:00:00 2001 From: Sarabjot Singh Date: Wed, 23 Oct 2019 19:29:14 +0530 Subject: [PATCH 2/4] Using endsession to end the session for testhost in case of discovery abort/cancel. --- .../Interfaces/ITestRequestSender.cs | 5 ----- .../TestRequestSender.cs | 17 ----------------- .../Client/ProxyDiscoveryManager.cs | 2 +- .../EventHandlers/TestRequestHandler.cs | 6 ------ .../TestRequestSenderTests.cs | 13 ------------- .../Client/ProxyDiscoveryManagerTests.cs | 2 +- .../EventHandlers/TestRequestHandlerTests.cs | 12 ------------ 7 files changed, 2 insertions(+), 55 deletions(-) diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs index ece9a948bb..d65aa7bb0f 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/Interfaces/ITestRequestSender.cs @@ -87,11 +87,6 @@ public interface ITestRequestSender : IDisposable /// void SendTestRunAbort(); - /// - /// Send the request to cancel the test discovery - /// - void SendTestDiscoveryCancel(); - /// /// Handle client process exit /// diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs index 64a46b4e71..9cebf09b3d 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs @@ -317,23 +317,6 @@ public void StartTestRun(TestRunCriteriaWithTests runCriteria, ITestRunEventsHan this.channel.Send(message); } - /// - public void SendTestDiscoveryCancel() - { - if (this.IsOperationComplete()) - { - EqtTrace.Verbose("TestRequestSender: SendTestDiscoveryCancel: Operation is already complete. Skip error message."); - return; - } - - if (EqtTrace.IsVerboseEnabled) - { - EqtTrace.Verbose("TestRequestSender.SendTestDiscoveryCancel: Sending test discovery cancel."); - } - - this.channel?.Send(this.dataSerializer.SerializeMessage(MessageType.CancelDiscovery)); - } - /// public void SendTestRunCancel() { diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs index 23afa0c077..e11deb9df3 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs @@ -145,7 +145,7 @@ public void Abort() if (this.isCommunicationEstablished) { - this.RequestSender.SendTestDiscoveryCancel(); + this.RequestSender.EndSession(); } } diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs index e6988fe6c5..3149b022d9 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs @@ -318,12 +318,6 @@ public void OnMessageReceived(object sender, MessageReceivedEventArgs messageRec break; } - case MessageType.CancelDiscovery: - jobQueue.Pause(); - this.testHostManagerFactoryReady.Wait(); - testHostManagerFactory.GetDiscoveryManager().Abort(); - break; - case MessageType.CancelTestRun: jobQueue.Pause(); this.testHostManagerFactoryReady.Wait(); diff --git a/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs b/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs index 6f91d67482..c911923149 100644 --- a/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs +++ b/test/Microsoft.TestPlatform.CommunicationUtilities.UnitTests/TestRequestSenderTests.cs @@ -202,19 +202,6 @@ public void EndSessionShouldNotSendTestRunAbortMessageIfClientDisconnected() this.mockChannel.Verify(mockChannel => mockChannel.Send(MessageType.CancelTestRun), Times.Never); } - [TestMethod] - public void SendTestDiscoveryCancelShouldSendTestDiscoveryCancelMessage() - { - var serializedCancelMessage = "Message : TestDiscovery.Cancel"; - this.SetupFakeCommunicationChannel(); - this.testRequestSender.DiscoverTests(new DiscoveryCriteria(), this.mockDiscoveryEventsHandler.Object); - this.mockDataSerializer.Setup(ds => ds.SerializeMessage(MessageType.CancelDiscovery)).Returns(serializedCancelMessage); - - this.testRequestSender.SendTestDiscoveryCancel(); - - this.mockChannel.Verify(mockChannel => mockChannel.Send(serializedCancelMessage), Times.Once); - } - [DataTestMethod] [DataRow("")] [DataRow(" ")] diff --git a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs index 6df1826cd8..e10c7c7c60 100644 --- a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs +++ b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs @@ -505,7 +505,7 @@ public void AbortShouldSendTestDiscoveryCancelIfCommunicationSuccessful() this.testDiscoveryManager.Abort(); - this.mockRequestSender.Verify(s => s.SendTestDiscoveryCancel(), Times.Once); + this.mockRequestSender.Verify(s => s.EndSession(), Times.Once); } private void InvokeAndVerifyDiscoverTests(bool skipDefaultAdapters) diff --git a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs index 5958f120c7..d90d5e4b2b 100644 --- a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs +++ b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs @@ -286,18 +286,6 @@ public void ProcessRequestsExecutionCancelShouldCancelTestRun() this.SendSessionEnd(); } - [TestMethod] - public void ProcessRequestsDiscoveryCancelShouldCancelDiscovery() - { - var message = this.dataSerializer.SerializePayload(MessageType.CancelDiscovery, string.Empty); - - this.ProcessRequestsAsync(this.mockTestHostManagerFactory.Object); - this.SendMessageOnChannel(message); - - mockDiscoveryManager.Verify(dm => dm.Abort(), Times.Once); - this.SendSessionEnd(); - } - [TestMethod] public void ProcessRequestsExecutionLaunchAdapterProcessWithDebuggerShouldSendAckMessage() { From d40376d0e4ae9cae786dc181a797fb1d5efbdaf3 Mon Sep 17 00:00:00 2001 From: Sarabjot Singh Date: Wed, 23 Oct 2019 21:26:37 +0530 Subject: [PATCH 3/4] Revert "Implemented cancellation of individual source files discovery (#2134)" This reverts commit 8e6f70f444299a122e71f7924f3db3f6feb4adeb. --- .../Discovery/DiscovererEnumerator.cs | 52 ++++++++----------- .../Discovery/DiscovererEnumeratorTests.cs | 21 ++------ 2 files changed, 26 insertions(+), 47 deletions(-) diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/Discovery/DiscovererEnumerator.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/Discovery/DiscovererEnumerator.cs index 5e1948a3ae..48666d0c3d 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/Discovery/DiscovererEnumerator.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/Discovery/DiscovererEnumerator.cs @@ -161,9 +161,7 @@ private void LoadTestsFromAnExtension(string extensionAssembly, IEnumerable discoverer, - IEnumerable sources, + Dictionary, IEnumerable> discovererToSourcesMap, DiscoveryContext context, TestCaseDiscoverySink discoverySink, IMessageLogger logger, - CancellationToken cancellationToken) + ref double totalAdaptersUsed, + ref double totalTimeTakenByAdapters) { - var result = new DiscoveryResult(); if (DiscovererEnumerator.TryToLoadDiscoverer(discoverer, logger, out var discovererType) == false) { // Fail to instantiate the discoverer type. - return result; + return; } // on instantiated successfully, get tests @@ -219,19 +217,12 @@ private void CollectTelemetryAtEnd(double totalTimeTakenByAdapters, double total var newTimeStart = DateTime.UtcNow; this.testPlatformEventSource.AdapterDiscoveryStart(discoverer.Metadata.DefaultExecutorUri.AbsoluteUri); - foreach (var testSource in sources) - { - if (cancellationToken.IsCancellationRequested) - { - EqtTrace.Info("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Cancellation Requested. Aborting the discovery"); - break; - } - - discoverer.Value.DiscoverTests(new[] { testSource }, context, logger, discoverySink); - } + discoverer.Value.DiscoverTests(discovererToSourcesMap[discoverer], context, logger, discoverySink); var totalAdapterRunTime = DateTime.UtcNow - newTimeStart; - this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests); + + this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests - + currentTotalTests); // Record Total Tests Discovered By each Discoverer. var totalTestsDiscoveredByCurrentDiscoverer = this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests; @@ -239,7 +230,8 @@ private void CollectTelemetryAtEnd(double totalTimeTakenByAdapters, double total string.Format("{0}.{1}", TelemetryDataConstants.TotalTestsByAdapter, discoverer.Metadata.DefaultExecutorUri), totalTestsDiscoveredByCurrentDiscoverer); - result.TotalAdaptersUsed++; + totalAdaptersUsed++; + EqtTrace.Verbose("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Done loading tests for {0}", discoverer.Value.GetType().FullName); @@ -252,18 +244,22 @@ private void CollectTelemetryAtEnd(double totalTimeTakenByAdapters, double total } // Collecting Data Point for Time Taken to Discover Tests by each Adapter - this.requestData.MetricsCollection.Add($"{TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter}.{discoverer.Metadata.DefaultExecutorUri}", totalAdapterRunTime.TotalSeconds); - result.TotalTimeSpentInAdapaters += totalAdapterRunTime.TotalSeconds; + this.requestData.MetricsCollection.Add( + string.Format("{0}.{1}", TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter, + discoverer.Metadata.DefaultExecutorUri), totalAdapterRunTime.TotalSeconds); + totalTimeTakenByAdapters += totalAdapterRunTime.TotalSeconds; } catch (Exception e) { - var message = string.Format(CultureInfo.CurrentUICulture, CrossPlatEngineResources.ExceptionFromLoadTests, discovererType.Name, e.Message); + var message = string.Format( + CultureInfo.CurrentUICulture, + CrossPlatEngineResources.ExceptionFromLoadTests, + discovererType.Name, + e.Message); logger.SendMessage(TestMessageLevel.Error, message); EqtTrace.Error("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: {0} ", e); } - - return result; } private static bool TryToLoadDiscoverer(LazyExtension discoverer, IMessageLogger logger, out Type discovererType) @@ -499,11 +495,5 @@ private static bool IsAssembly(string filePath) } } - private class DiscoveryResult - { - public double TotalTimeSpentInAdapaters { get; set; } - public int TotalAdaptersUsed { get; set; } - } - } } diff --git a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Discovery/DiscovererEnumeratorTests.cs b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Discovery/DiscovererEnumeratorTests.cs index d5dbab08f5..cb56326c87 100644 --- a/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Discovery/DiscovererEnumeratorTests.cs +++ b/test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Discovery/DiscovererEnumeratorTests.cs @@ -637,18 +637,13 @@ public static void Reset() [Category("managed")] private class ManagedDllTestDiscoverer : DllTestDiscoverer { - static ManagedDllTestDiscoverer() - { - Sources = new List(); - } - public static bool IsManagedDiscoverTestCalled { get; private set; } - public static List Sources { get; private set; } + public static IEnumerable Sources { get; set; } public override void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink) { - Sources.AddRange(sources); + Sources = sources; IsManagedDiscoverTestCalled = true; base.DiscoverTests(sources, discoveryContext, logger, discoverySink); } @@ -656,7 +651,7 @@ public override void DiscoverTests(IEnumerable sources, IDiscoveryContex public static void Reset() { IsManagedDiscoverTestCalled = false; - Sources = new List(); + Sources = null; } } @@ -726,14 +721,9 @@ private static bool ShouldTestDiscovered(IEnumerable sources) [DefaultExecutorUri("discoverer://jsondiscoverer")] private class JsonTestDiscoverer : ITestDiscoverer { - static JsonTestDiscoverer() - { - Sources = new List(); - } - public static bool IsDiscoverTestCalled { get; private set; } - public static List Sources { get; private set; } + public static IEnumerable Sources { get; private set; } public static IDiscoveryContext DiscoveryContext { get; private set; } @@ -744,7 +734,7 @@ static JsonTestDiscoverer() public void DiscoverTests(IEnumerable sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink) { IsDiscoverTestCalled = true; - Sources.AddRange(sources); + Sources = sources; DiscoveryContext = discoveryContext; MessageLogger = logger; DiscoverySink = discoverySink; @@ -753,7 +743,6 @@ public void DiscoverTests(IEnumerable sources, IDiscoveryContext discove public static void Reset() { IsDiscoverTestCalled = false; - Sources = new List(); } } From 3d26f56d597ba69e1b945f7fc47cbc00c1df6a10 Mon Sep 17 00:00:00 2001 From: Sarabjot Singh Date: Wed, 23 Oct 2019 21:31:09 +0530 Subject: [PATCH 4/4] Calling close instead of endsession to make sure we kill the test host in case it does not exit --- .../TestRequestSender.cs | 2 +- .../Client/ProxyDiscoveryManager.cs | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs index 9cebf09b3d..755f39cd13 100644 --- a/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs +++ b/src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs @@ -363,7 +363,7 @@ public void EndSession() EqtTrace.Verbose("TestRequestSender.EndSession: Sending end session."); } - this.channel.Send(this.dataSerializer.SerializeMessage(MessageType.SessionEnd)); + this.channel?.Send(this.dataSerializer.SerializeMessage(MessageType.SessionEnd)); } } diff --git a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs index e11deb9df3..b20a8fcf4f 100644 --- a/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs +++ b/src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs @@ -142,11 +142,7 @@ public void Abort() { // Cancel fast, try to stop testhost deployment/launch this.CancellationTokenSource.Cancel(); - - if (this.isCommunicationEstablished) - { - this.RequestSender.EndSession(); - } + this.Close(); } ///