Skip to content

Commit d51a695

Browse files
authored
Add more logging for flaky tests on CI (#393)
1 parent f14799c commit d51a695

File tree

4 files changed

+19
-11
lines changed

4 files changed

+19
-11
lines changed

test/dotnet-watch.FunctionalTests/AwaitableProcess.cs

+13-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Diagnostics;
77
using System.Threading.Tasks;
88
using System.Threading.Tasks.Dataflow;
9+
using Microsoft.AspNetCore.Testing;
910
using Microsoft.Extensions.Internal;
1011
using Microsoft.Extensions.CommandLineUtils;
1112
using Xunit.Abstractions;
@@ -61,10 +62,19 @@ public void Start()
6162
_logger.WriteLine($"{DateTime.Now}: process start: '{_process.StartInfo.FileName} {_process.StartInfo.Arguments}'");
6263
}
6364

64-
public Task<string> GetOutputLineAsync(string message)
65-
=> GetOutputLineAsync(m => message == m);
65+
public async Task<string> GetOutputLineAsync(string message, TimeSpan timeout)
66+
{
67+
_logger.WriteLine($"Waiting for output line [msg == '{message}']. Will wait for {timeout.TotalSeconds} sec.");
68+
return await GetOutputLineAsync(m => message == m).TimeoutAfter(timeout);
69+
}
70+
71+
public async Task<string> GetOutputLineStartsWithAsync(string message, TimeSpan timeout)
72+
{
73+
_logger.WriteLine($"Waiting for output line [msg.StartsWith('{message}')]. Will wait for {timeout.TotalSeconds} sec.");
74+
return await GetOutputLineAsync(m => m.StartsWith(message)).TimeoutAfter(timeout);
75+
}
6676

67-
public async Task<string> GetOutputLineAsync(Predicate<string> predicate)
77+
private async Task<string> GetOutputLineAsync(Predicate<string> predicate)
6878
{
6979
while (!_source.Completion.IsCompleted)
7080
{

test/dotnet-watch.FunctionalTests/DotNetWatcherTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public async Task RunsWithDotnetWatchEnvVariable()
2525

2626
await _app.StartWatcherAsync();
2727
const string messagePrefix = "DOTNET_WATCH = ";
28-
var message = await _app.Process.GetOutputLineAsync(m => m.StartsWith(messagePrefix));
28+
var message = await _app.Process.GetOutputLineStartsWithAsync(messagePrefix, TimeSpan.FromMinutes(2));
2929
var envValue = message.Substring(messagePrefix.Length);
3030
Assert.Equal("1", envValue);
3131
}

test/dotnet-watch.FunctionalTests/GlobbingAppTests.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.IO;
66
using System.Linq;
77
using System.Threading.Tasks;
8-
using Microsoft.AspNetCore.Testing;
98
using Microsoft.DotNet.Watcher.Tools.Tests;
109
using Xunit;
1110
using Xunit.Abstractions;
@@ -129,7 +128,7 @@ public GlobbingApp(ITestOutputHelper logger)
129128

130129
public async Task<int> GetCompiledAppDefinedTypes()
131130
{
132-
var definedTypesMessage = await Process.GetOutputLineAsync(m => m.StartsWith("Defined types = ")).TimeoutAfter(TimeSpan.FromSeconds(30));
131+
var definedTypesMessage = await Process.GetOutputLineStartsWithAsync("Defined types = ", TimeSpan.FromSeconds(30));
133132
return int.Parse(definedTypesMessage.Split('=').Last());
134133
}
135134
}

test/dotnet-watch.FunctionalTests/Scenario/WatchableApp.cs

+4-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Linq;
88
using System.Runtime.CompilerServices;
99
using System.Threading.Tasks;
10-
using Microsoft.AspNetCore.Testing;
1110
using Microsoft.Extensions.CommandLineUtils;
1211
using Xunit.Abstractions;
1312

@@ -41,16 +40,16 @@ public WatchableApp(string appName, ITestOutputHelper logger)
4140
public string SourceDirectory { get; }
4241

4342
public Task HasRestarted()
44-
=> Process.GetOutputLineAsync(StartedMessage).TimeoutAfter(DefaultMessageTimeOut);
43+
=> Process.GetOutputLineAsync(StartedMessage, DefaultMessageTimeOut);
4544

4645
public Task HasExited()
47-
=> Process.GetOutputLineAsync(ExitingMessage).TimeoutAfter(DefaultMessageTimeOut);
46+
=> Process.GetOutputLineAsync(ExitingMessage, DefaultMessageTimeOut);
4847

4948
public bool UsePollingWatcher { get; set; }
5049

5150
public async Task<int> GetProcessId()
5251
{
53-
var line = await Process.GetOutputLineAsync(l => l.StartsWith("PID =")).TimeoutAfter(DefaultMessageTimeOut);
52+
var line = await Process.GetOutputLineStartsWithAsync("PID =", DefaultMessageTimeOut);
5453
var pid = line.Split('=').Last();
5554
return int.Parse(pid);
5655
}
@@ -106,7 +105,7 @@ public async Task StartWatcherAsync(string[] arguments, [CallerMemberName] strin
106105

107106
// Make this timeout long because it depends much on the MSBuild compilation speed.
108107
// Slow machines may take a bit to compile and boot test apps
109-
await Process.GetOutputLineAsync(StartedMessage).TimeoutAfter(TimeSpan.FromMinutes(2));
108+
await Process.GetOutputLineAsync(StartedMessage, TimeSpan.FromMinutes(2));
110109
}
111110

112111
public virtual void Dispose()

0 commit comments

Comments
 (0)