Skip to content

Commit 829659f

Browse files
authored
Add missing discovery cancel implementation (#2227)
* Revert "Implemented cancellation of individual source files discovery (#2134)" This reverts commit 8e6f70f. * Calling close instead of endsession to make sure we kill the test host in case it does not exit
1 parent 7ba379f commit 829659f

File tree

6 files changed

+45
-53
lines changed

6 files changed

+45
-53
lines changed

src/Microsoft.TestPlatform.CommunicationUtilities/TestRequestSender.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ public void EndSession()
363363
EqtTrace.Verbose("TestRequestSender.EndSession: Sending end session.");
364364
}
365365

366-
this.channel.Send(this.dataSerializer.SerializeMessage(MessageType.SessionEnd));
366+
this.channel?.Send(this.dataSerializer.SerializeMessage(MessageType.SessionEnd));
367367
}
368368
}
369369

src/Microsoft.TestPlatform.CrossPlatEngine/Client/ProxyDiscoveryManager.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ public void DiscoverTests(DiscoveryCriteria discoveryCriteria, ITestDiscoveryEve
140140
/// <inheritdoc/>
141141
public void Abort()
142142
{
143-
// This is no-op for the moment. There is no discovery abort message?
143+
// Cancel fast, try to stop testhost deployment/launch
144+
this.CancellationTokenSource.Cancel();
145+
this.Close();
144146
}
145147

146148
/// <inheritdoc/>

src/Microsoft.TestPlatform.CrossPlatEngine/Discovery/DiscovererEnumerator.cs

+21-31
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,7 @@ private void LoadTestsFromAnExtension(string extensionAssembly, IEnumerable<stri
161161
return;
162162
}
163163

164-
var result = this.DiscoverTestsFromSingleDiscoverer(discoverer, discovererToSourcesMap[discoverer], context, discoverySink, logger, cancellationToken);
165-
totalAdaptersUsed += result.TotalAdaptersUsed;
166-
totalTimeTakenByAdapters += result.TotalTimeSpentInAdapaters;
164+
this.DiscoverTestsFromSingleDiscoverer(discoverer, discovererToSourcesMap, context, discoverySink, logger, ref totalAdaptersUsed, ref totalTimeTakenByAdapters);
167165
}
168166

169167
if (this.discoveryResultCache.TotalDiscoveredTests == 0)
@@ -193,19 +191,19 @@ private void CollectTelemetryAtEnd(double totalTimeTakenByAdapters, double total
193191
totalAdaptersUsed);
194192
}
195193

196-
private DiscoveryResult DiscoverTestsFromSingleDiscoverer(
194+
private void DiscoverTestsFromSingleDiscoverer(
197195
LazyExtension<ITestDiscoverer, ITestDiscovererCapabilities> discoverer,
198-
IEnumerable<string> sources,
196+
Dictionary<LazyExtension<ITestDiscoverer, ITestDiscovererCapabilities>, IEnumerable<string>> discovererToSourcesMap,
199197
DiscoveryContext context,
200198
TestCaseDiscoverySink discoverySink,
201199
IMessageLogger logger,
202-
CancellationToken cancellationToken)
200+
ref double totalAdaptersUsed,
201+
ref double totalTimeTakenByAdapters)
203202
{
204-
var result = new DiscoveryResult();
205203
if (DiscovererEnumerator.TryToLoadDiscoverer(discoverer, logger, out var discovererType) == false)
206204
{
207205
// Fail to instantiate the discoverer type.
208-
return result;
206+
return;
209207
}
210208

211209
// on instantiated successfully, get tests
@@ -219,27 +217,21 @@ private DiscoveryResult DiscoverTestsFromSingleDiscoverer(
219217
var newTimeStart = DateTime.UtcNow;
220218

221219
this.testPlatformEventSource.AdapterDiscoveryStart(discoverer.Metadata.DefaultExecutorUri.AbsoluteUri);
222-
foreach (var testSource in sources)
223-
{
224-
if (cancellationToken.IsCancellationRequested)
225-
{
226-
EqtTrace.Info("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Cancellation Requested. Aborting the discovery");
227-
break;
228-
}
229-
230-
discoverer.Value.DiscoverTests(new[] { testSource }, context, logger, discoverySink);
231-
}
220+
discoverer.Value.DiscoverTests(discovererToSourcesMap[discoverer], context, logger, discoverySink);
232221

233222
var totalAdapterRunTime = DateTime.UtcNow - newTimeStart;
234-
this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests);
223+
224+
this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests -
225+
currentTotalTests);
235226

236227
// Record Total Tests Discovered By each Discoverer.
237228
var totalTestsDiscoveredByCurrentDiscoverer = this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests;
238229
this.requestData.MetricsCollection.Add(
239230
string.Format("{0}.{1}", TelemetryDataConstants.TotalTestsByAdapter,
240231
discoverer.Metadata.DefaultExecutorUri), totalTestsDiscoveredByCurrentDiscoverer);
241232

242-
result.TotalAdaptersUsed++;
233+
totalAdaptersUsed++;
234+
243235

244236
EqtTrace.Verbose("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Done loading tests for {0}",
245237
discoverer.Value.GetType().FullName);
@@ -252,18 +244,22 @@ private DiscoveryResult DiscoverTestsFromSingleDiscoverer(
252244
}
253245

254246
// Collecting Data Point for Time Taken to Discover Tests by each Adapter
255-
this.requestData.MetricsCollection.Add($"{TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter}.{discoverer.Metadata.DefaultExecutorUri}", totalAdapterRunTime.TotalSeconds);
256-
result.TotalTimeSpentInAdapaters += totalAdapterRunTime.TotalSeconds;
247+
this.requestData.MetricsCollection.Add(
248+
string.Format("{0}.{1}", TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter,
249+
discoverer.Metadata.DefaultExecutorUri), totalAdapterRunTime.TotalSeconds);
250+
totalTimeTakenByAdapters += totalAdapterRunTime.TotalSeconds;
257251
}
258252
catch (Exception e)
259253
{
260-
var message = string.Format(CultureInfo.CurrentUICulture, CrossPlatEngineResources.ExceptionFromLoadTests, discovererType.Name, e.Message);
254+
var message = string.Format(
255+
CultureInfo.CurrentUICulture,
256+
CrossPlatEngineResources.ExceptionFromLoadTests,
257+
discovererType.Name,
258+
e.Message);
261259

262260
logger.SendMessage(TestMessageLevel.Error, message);
263261
EqtTrace.Error("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: {0} ", e);
264262
}
265-
266-
return result;
267263
}
268264

269265
private static bool TryToLoadDiscoverer(LazyExtension<ITestDiscoverer, ITestDiscovererCapabilities> discoverer, IMessageLogger logger, out Type discovererType)
@@ -499,11 +495,5 @@ private static IEnumerable<LazyExtension<ITestDiscoverer, ITestDiscovererCapabil
499495
}
500496
}
501497

502-
private class DiscoveryResult
503-
{
504-
public double TotalTimeSpentInAdapaters { get; set; }
505-
public int TotalAdaptersUsed { get; set; }
506-
}
507-
508498
}
509499
}

test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Client/ProxyDiscoveryManagerTests.cs

+15
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,21 @@ public void DiscoveryManagerShouldPassOnHandleLogMessage()
493493
mockTestDiscoveryEventsHandler.Verify(mtdeh => mtdeh.HandleLogMessage(It.IsAny<TestMessageLevel>(), It.IsAny<string>()), Times.Once);
494494
}
495495

496+
[TestMethod]
497+
public void AbortShouldSendTestDiscoveryCancelIfCommunicationSuccessful()
498+
{
499+
var mockTestDiscoveryEventsHandler = new Mock<ITestDiscoveryEventsHandler2>();
500+
this.mockRequestSender.Setup(s => s.WaitForRequestHandlerConnection(It.IsAny<int>(), It.IsAny<CancellationToken>())).Returns(true);
501+
502+
Mock<ITestRunEventsHandler> mockTestRunEventsHandler = new Mock<ITestRunEventsHandler>();
503+
504+
this.testDiscoveryManager.DiscoverTests(this.discoveryCriteria, mockTestDiscoveryEventsHandler.Object);
505+
506+
this.testDiscoveryManager.Abort();
507+
508+
this.mockRequestSender.Verify(s => s.EndSession(), Times.Once);
509+
}
510+
496511
private void InvokeAndVerifyDiscoverTests(bool skipDefaultAdapters)
497512
{
498513
TestPluginCache.Instance = null;

test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/Discovery/DiscovererEnumeratorTests.cs

+5-16
Original file line numberDiff line numberDiff line change
@@ -637,26 +637,21 @@ public static void Reset()
637637
[Category("managed")]
638638
private class ManagedDllTestDiscoverer : DllTestDiscoverer
639639
{
640-
static ManagedDllTestDiscoverer()
641-
{
642-
Sources = new List<string>();
643-
}
644-
645640
public static bool IsManagedDiscoverTestCalled { get; private set; }
646641

647-
public static List<string> Sources { get; private set; }
642+
public static IEnumerable<string> Sources { get; set; }
648643

649644
public override void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink)
650645
{
651-
Sources.AddRange(sources);
646+
Sources = sources;
652647
IsManagedDiscoverTestCalled = true;
653648
base.DiscoverTests(sources, discoveryContext, logger, discoverySink);
654649
}
655650

656651
public static void Reset()
657652
{
658653
IsManagedDiscoverTestCalled = false;
659-
Sources = new List<string>();
654+
Sources = null;
660655
}
661656
}
662657

@@ -726,14 +721,9 @@ private static bool ShouldTestDiscovered(IEnumerable<string> sources)
726721
[DefaultExecutorUri("discoverer://jsondiscoverer")]
727722
private class JsonTestDiscoverer : ITestDiscoverer
728723
{
729-
static JsonTestDiscoverer()
730-
{
731-
Sources = new List<string>();
732-
}
733-
734724
public static bool IsDiscoverTestCalled { get; private set; }
735725

736-
public static List<string> Sources { get; private set; }
726+
public static IEnumerable<string> Sources { get; private set; }
737727

738728
public static IDiscoveryContext DiscoveryContext { get; private set; }
739729

@@ -744,7 +734,7 @@ static JsonTestDiscoverer()
744734
public void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink)
745735
{
746736
IsDiscoverTestCalled = true;
747-
Sources.AddRange(sources);
737+
Sources = sources;
748738
DiscoveryContext = discoveryContext;
749739
MessageLogger = logger;
750740
DiscoverySink = discoverySink;
@@ -753,7 +743,6 @@ public void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discove
753743
public static void Reset()
754744
{
755745
IsDiscoverTestCalled = false;
756-
Sources = new List<string>();
757746
}
758747
}
759748

test/Microsoft.TestPlatform.CrossPlatEngine.UnitTests/EventHandlers/TestRequestHandlerTests.cs

-4
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,6 @@ public void ProcessRequestsExecutionCancelShouldCancelTestRun()
286286
this.SendSessionEnd();
287287
}
288288

289-
// ProcessRequestsExecutionCancelShouldStopRequestProcessing
290-
291289
[TestMethod]
292290
public void ProcessRequestsExecutionLaunchAdapterProcessWithDebuggerShouldSendAckMessage()
293291
{
@@ -312,8 +310,6 @@ public void ProcessRequestsExecutionAbortShouldStopTestRun()
312310
this.SendSessionEnd();
313311
}
314312

315-
// ProcessRequestsExecutionAbortShouldStopRequestProcessing
316-
317313
[TestMethod]
318314
public void SendExecutionCompleteShouldSendTestRunCompletePayloadOnChannel()
319315
{

0 commit comments

Comments
 (0)