Skip to content

Commit 5bc5a92

Browse files
authored
MTP extensions cleanup for cancellation (#7380)
1 parent e0fc3d4 commit 5bc5a92

11 files changed

Lines changed: 83 additions & 151 deletions

File tree

src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/AzureDevOpsReporter.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,7 @@ public Task<bool> IsEnabledAsync()
107107

108108
public async Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationToken cancellationToken)
109109
{
110-
if (cancellationToken.IsCancellationRequested)
111-
{
112-
return;
113-
}
110+
cancellationToken.ThrowIfCancellationRequested();
114111

115112
if (value is not TestNodeUpdateMessage nodeUpdateMessage)
116113
{

src/Platform/Microsoft.Testing.Extensions.CrashDump/CrashDumpProcessLifetimeHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public Task<bool> IsEnabledAsync()
5555

5656
public async Task OnTestHostProcessExitedAsync(ITestHostProcessInformation testHostProcessInformation, CancellationToken cancellationToken)
5757
{
58-
if (cancellationToken.IsCancellationRequested
59-
|| testHostProcessInformation.HasExitedGracefully
58+
cancellationToken.ThrowIfCancellationRequested();
59+
if (testHostProcessInformation.HasExitedGracefully
6060
|| (AppDomain.CurrentDomain.GetData("ProcessKilledByHangDump") is string processKilledByHangDump && processKilledByHangDump == "true"))
6161
{
6262
return;

src/Platform/Microsoft.Testing.Extensions.HangDump/HangDumpActivityIndicator.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,7 @@ public async Task OnTestSessionStartingAsync(ITestSessionContext testSessionCont
8383
{
8484
CancellationToken cancellationToken = testSessionContext.CancellationToken;
8585
ApplicationStateGuard.Ensure(_namedPipeClient is not null);
86-
87-
if (!await IsEnabledAsync().ConfigureAwait(false) || cancellationToken.IsCancellationRequested)
88-
{
89-
return;
90-
}
86+
cancellationToken.ThrowIfCancellationRequested();
9187

9288
try
9389
{
@@ -139,8 +135,8 @@ private async Task<IResponse> CallbackAsync(IRequest request)
139135

140136
public async Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationToken cancellationToken)
141137
{
142-
if (cancellationToken.IsCancellationRequested
143-
|| value is not TestNodeUpdateMessage nodeChangedMessage)
138+
cancellationToken.ThrowIfCancellationRequested();
139+
if (value is not TestNodeUpdateMessage nodeChangedMessage)
144140
{
145141
return;
146142
}

src/Platform/Microsoft.Testing.Extensions.HangDump/HangDumpProcessLifetimeHandler.cs

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -175,28 +175,23 @@ public async Task OnTestHostProcessStartedAsync(ITestHostProcessInformation test
175175
{
176176
ApplicationStateGuard.Ensure(_waitConnectionTask is not null);
177177
ApplicationStateGuard.Ensure(_singleConnectionNamedPipeServer is not null);
178-
try
179-
{
180-
_testHostProcessInformation = testHostProcessInformation;
181-
182-
await _logger.LogDebugAsync($"Wait for test host connection to the server pipe '{_singleConnectionNamedPipeServer.PipeName.Name}'").ConfigureAwait(false);
183-
await _waitConnectionTask.TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout).ConfigureAwait(false);
184-
using CancellationTokenSource timeout = new(TimeoutHelper.DefaultHangTimeSpanTimeout);
185-
using var linkedCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, timeout.Token);
186-
_waitConsumerPipeName.Wait(linkedCancellationToken.Token);
187-
ApplicationStateGuard.Ensure(_namedPipeClient is not null);
188-
await _namedPipeClient.ConnectAsync(cancellationToken).TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout).ConfigureAwait(false);
189-
await _logger.LogDebugAsync($"Connected to the test host server pipe '{_namedPipeClient.PipeName}'").ConfigureAwait(false);
190-
191-
_activityTimer = new Timer(
192-
_ => _activityIndicatorTask = TakeDumpOfTreeAsync(cancellationToken),
193-
null,
194-
_activityTimerValue!.Value,
195-
TimeSpan.FromMilliseconds(-1));
196-
}
197-
catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
198-
{
199-
}
178+
179+
_testHostProcessInformation = testHostProcessInformation;
180+
181+
await _logger.LogDebugAsync($"Wait for test host connection to the server pipe '{_singleConnectionNamedPipeServer.PipeName.Name}'").ConfigureAwait(false);
182+
await _waitConnectionTask.TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout).ConfigureAwait(false);
183+
using CancellationTokenSource timeout = new(TimeoutHelper.DefaultHangTimeSpanTimeout);
184+
using var linkedCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, timeout.Token);
185+
_waitConsumerPipeName.Wait(linkedCancellationToken.Token);
186+
ApplicationStateGuard.Ensure(_namedPipeClient is not null);
187+
await _namedPipeClient.ConnectAsync(cancellationToken).TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout).ConfigureAwait(false);
188+
await _logger.LogDebugAsync($"Connected to the test host server pipe '{_namedPipeClient.PipeName}'").ConfigureAwait(false);
189+
190+
_activityTimer = new Timer(
191+
_ => _activityIndicatorTask = TakeDumpOfTreeAsync(cancellationToken),
192+
null,
193+
_activityTimerValue!.Value,
194+
TimeSpan.FromMilliseconds(-1));
200195
}
201196

202197
private static string GetDiskInfo()
@@ -220,10 +215,7 @@ private static string GetDiskInfo()
220215

221216
public async Task OnTestHostProcessExitedAsync(ITestHostProcessInformation testHostProcessInformation, CancellationToken cancellationToken)
222217
{
223-
if (cancellationToken.IsCancellationRequested)
224-
{
225-
return;
226-
}
218+
cancellationToken.ThrowIfCancellationRequested();
227219

228220
if (!testHostProcessInformation.HasExitedGracefully)
229221
{

src/Platform/Microsoft.Testing.Extensions.MSBuild/MSBuildConsumer.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,7 @@ public Task OnTestSessionFinishingAsync(ITestSessionContext testSessionContext)
6262

6363
public async Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationToken cancellationToken)
6464
{
65-
if (cancellationToken.IsCancellationRequested)
66-
{
67-
return;
68-
}
65+
cancellationToken.ThrowIfCancellationRequested();
6966

7067
// Avoid processing messages if the session has ended.
7168
if (_sessionEnded)

src/Platform/Microsoft.Testing.Extensions.TrxReport/TrxDataConsumer.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,7 @@ public TrxReportGenerator(
104104

105105
public Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationToken cancellationToken)
106106
{
107-
if (!_isEnabled || cancellationToken.IsCancellationRequested)
108-
{
109-
return Task.CompletedTask;
110-
}
107+
cancellationToken.ThrowIfCancellationRequested();
111108

112109
try
113110
{
@@ -168,10 +165,7 @@ public Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationTo
168165
public async Task OnTestSessionStartingAsync(ITestSessionContext testSessionContext)
169166
{
170167
CancellationToken cancellationToken = testSessionContext.CancellationToken;
171-
if (!_isEnabled || cancellationToken.IsCancellationRequested)
172-
{
173-
return;
174-
}
168+
cancellationToken.ThrowIfCancellationRequested();
175169

176170
if (_logger.IsEnabled(LogLevel.Debug))
177171
{
@@ -198,7 +192,7 @@ await _trxTestApplicationLifecycleCallbacks.NamedPipeClient.RequestReplyAsync<Te
198192
}
199193

200194
ITrxReportCapability? trxCapability = _testFrameworkCapabilities.GetCapability<ITrxReportCapability>();
201-
if (_isEnabled && trxCapability is not null && trxCapability.IsSupported)
195+
if (trxCapability is not null && trxCapability.IsSupported)
202196
{
203197
_adapterSupportTrxCapability = true;
204198
trxCapability.Enable();
@@ -210,10 +204,7 @@ await _trxTestApplicationLifecycleCallbacks.NamedPipeClient.RequestReplyAsync<Te
210204
public async Task OnTestSessionFinishingAsync(ITestSessionContext testSessionContext)
211205
{
212206
CancellationToken cancellationToken = testSessionContext.CancellationToken;
213-
if (!_isEnabled || cancellationToken.IsCancellationRequested)
214-
{
215-
return;
216-
}
207+
cancellationToken.ThrowIfCancellationRequested();
217208

218209
try
219210
{

src/Platform/Microsoft.Testing.Extensions.TrxReport/TrxProcessLifetimeHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,7 @@ public Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationTo
148148

149149
public async Task OnTestHostProcessExitedAsync(ITestHostProcessInformation testHostProcessInformation, CancellationToken cancellationToken)
150150
{
151-
if (cancellationToken.IsCancellationRequested)
152-
{
153-
return;
154-
}
151+
cancellationToken.ThrowIfCancellationRequested();
155152

156153
Dictionary<IExtension, List<SessionFileArtifact>> artifacts = [];
157154

src/Platform/Microsoft.Testing.Extensions.TrxReport/TrxTestApplicationLifecycleCallbacks.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,21 @@ public TrxTestApplicationLifecycleCallbacks(
5252

5353
public async Task BeforeRunAsync(CancellationToken cancellationToken)
5454
{
55-
if (!_isEnabled || cancellationToken.IsCancellationRequested)
55+
cancellationToken.ThrowIfCancellationRequested();
56+
if (!_isEnabled)
5657
{
5758
return;
5859
}
5960

60-
try
61-
{
62-
if (_isEnabled)
63-
{
64-
string namedPipeName = _environment.GetEnvironmentVariable(TrxEnvironmentVariableProvider.TRXNAMEDPIPENAME)
65-
?? throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, ExtensionResources.TrxReportGeneratorMissingTrxNamedPipeEnvironmentVariable, TrxEnvironmentVariableProvider.TRXNAMEDPIPENAME));
66-
NamedPipeClient = new NamedPipeClient(namedPipeName, _environment);
67-
NamedPipeClient.RegisterSerializer(new ReportFileNameRequestSerializer(), typeof(ReportFileNameRequest));
68-
NamedPipeClient.RegisterSerializer(new TestAdapterInformationRequestSerializer(), typeof(TestAdapterInformationRequest));
69-
NamedPipeClient.RegisterSerializer(new VoidResponseSerializer(), typeof(VoidResponse));
70-
71-
// Connect to the named pipe server
72-
await NamedPipeClient.ConnectAsync(cancellationToken).TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout, cancellationToken).ConfigureAwait(false);
73-
}
74-
}
75-
catch (OperationCanceledException ex) when (ex.CancellationToken == cancellationToken)
76-
{
77-
// Do nothing, we're stopping
78-
}
61+
string namedPipeName = _environment.GetEnvironmentVariable(TrxEnvironmentVariableProvider.TRXNAMEDPIPENAME)
62+
?? throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, ExtensionResources.TrxReportGeneratorMissingTrxNamedPipeEnvironmentVariable, TrxEnvironmentVariableProvider.TRXNAMEDPIPENAME));
63+
NamedPipeClient = new NamedPipeClient(namedPipeName, _environment);
64+
NamedPipeClient.RegisterSerializer(new ReportFileNameRequestSerializer(), typeof(ReportFileNameRequest));
65+
NamedPipeClient.RegisterSerializer(new TestAdapterInformationRequestSerializer(), typeof(TestAdapterInformationRequest));
66+
NamedPipeClient.RegisterSerializer(new VoidResponseSerializer(), typeof(VoidResponse));
67+
68+
// Connect to the named pipe server
69+
await NamedPipeClient.ConnectAsync(cancellationToken).TimeoutAfterAsync(TimeoutHelper.DefaultHangTimeSpanTimeout, cancellationToken).ConfigureAwait(false);
7970
}
8071

8172
public void Dispose()

src/Platform/Microsoft.Testing.Platform/OutputDevice/SimplifiedConsoleOutputDeviceBase.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,8 @@ public async Task DisplayAfterSessionEndRunAsync(CancellationToken cancellationT
233233

234234
public Task OnTestSessionStartingAsync(ITestSessionContext testSessionContext)
235235
{
236-
if (testSessionContext.CancellationToken.IsCancellationRequested)
237-
{
238-
return Task.CompletedTask;
239-
}
236+
CancellationToken cancellationToken = testSessionContext.CancellationToken;
237+
cancellationToken.ThrowIfCancellationRequested();
240238

241239
// We implement IDataConsumerService and IOutputDisplayService.
242240
// So the engine is calling us before as IDataConsumerService and after as IOutputDisplayService.

src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,9 @@ private async Task DisplayAfterSessionEndRunInternalAsync()
337337

338338
public Task OnTestSessionStartingAsync(ITestSessionContext testSessionContext)
339339
{
340-
if (_isServerMode || testSessionContext.CancellationToken.IsCancellationRequested)
340+
CancellationToken cancellationToken = testSessionContext.CancellationToken;
341+
cancellationToken.ThrowIfCancellationRequested();
342+
if (_isServerMode)
341343
{
342344
return Task.CompletedTask;
343345
}
@@ -398,8 +400,8 @@ public async Task DisplayAsync(IOutputDeviceDataProducer producer, IOutputDevice
398400
public Task ConsumeAsync(IDataProducer dataProducer, IData value, CancellationToken cancellationToken)
399401
{
400402
RoslynDebug.Assert(_terminalTestReporter is not null);
401-
402-
if (_isServerMode || cancellationToken.IsCancellationRequested)
403+
cancellationToken.ThrowIfCancellationRequested();
404+
if (_isServerMode)
403405
{
404406
return Task.CompletedTask;
405407
}

0 commit comments

Comments
 (0)