This commit is contained in:
parent
c5d8f8c34e
commit
98be5a3ca5
|
|
@ -37,17 +37,31 @@ namespace Microsoft.DotNet.Watcher.Internal
|
|||
{
|
||||
cancellationToken.Register(() => processState.TryKill());
|
||||
|
||||
process.OutputDataReceived += (_, a) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(a.Data))
|
||||
{
|
||||
processSpec.OutputCapture.AddLine(a.Data);
|
||||
}
|
||||
};
|
||||
process.ErrorDataReceived += (_, a) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(a.Data))
|
||||
{
|
||||
processSpec.OutputCapture.AddLine(a.Data);
|
||||
}
|
||||
};
|
||||
|
||||
stopwatch.Start();
|
||||
process.Start();
|
||||
|
||||
_reporter.Verbose($"Started '{processSpec.Executable}' with process id {process.Id}");
|
||||
|
||||
if (processSpec.IsOutputCaptured)
|
||||
{
|
||||
await Task.WhenAll(
|
||||
processState.Task,
|
||||
ConsumeStreamAsync(process.StandardOutput, processSpec.OutputCapture.AddLine),
|
||||
ConsumeStreamAsync(process.StandardError, processSpec.OutputCapture.AddLine)
|
||||
);
|
||||
process.BeginErrorReadLine();
|
||||
process.BeginOutputReadLine();
|
||||
await processState.Task;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -86,15 +100,6 @@ namespace Microsoft.DotNet.Watcher.Internal
|
|||
return process;
|
||||
}
|
||||
|
||||
private static async Task ConsumeStreamAsync(StreamReader reader, Action<string> consume)
|
||||
{
|
||||
string line;
|
||||
while ((line = await reader.ReadLineAsync().ConfigureAwait(false)) != null)
|
||||
{
|
||||
consume?.Invoke(line);
|
||||
}
|
||||
}
|
||||
|
||||
private class ProcessState : IDisposable
|
||||
{
|
||||
private readonly IReporter _reporter;
|
||||
|
|
|
|||
|
|
@ -49,19 +49,8 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
|
|||
|
||||
await _app.IsWaitingForFileChange();
|
||||
|
||||
try
|
||||
{
|
||||
File.SetLastWriteTime(source, DateTime.Now);
|
||||
await _app.HasRestarted();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.WriteLine("Retrying. First attempt to restart app failed: " + ex.Message);
|
||||
|
||||
// retry
|
||||
File.SetLastWriteTime(source, DateTime.Now);
|
||||
await _app.HasRestarted();
|
||||
}
|
||||
File.SetLastWriteTime(source, DateTime.Now);
|
||||
await _app.HasRestarted(TimeSpan.FromMinutes(1));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Testing.xunit;
|
||||
using Xunit;
|
||||
|
||||
[assembly: CollectionBehavior(DisableTestParallelization = true)]
|
||||
|
|
@ -42,7 +42,10 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
|
|||
public string SourceDirectory { get; }
|
||||
|
||||
public Task HasRestarted()
|
||||
=> Process.GetOutputLineAsync(StartedMessage, DefaultMessageTimeOut);
|
||||
=> HasRestarted(DefaultMessageTimeOut);
|
||||
|
||||
public Task HasRestarted(TimeSpan timeout)
|
||||
=> Process.GetOutputLineAsync(StartedMessage, timeout);
|
||||
|
||||
public async Task HasExited()
|
||||
{
|
||||
|
|
@ -50,9 +53,9 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
|
|||
await Process.GetOutputLineStartsWithAsync(WatchExitedMessage, DefaultMessageTimeOut);
|
||||
}
|
||||
|
||||
public async Task IsWaitingForFileChange()
|
||||
public Task IsWaitingForFileChange()
|
||||
{
|
||||
await Process.GetOutputLineStartsWithAsync(WaitingForFileChangeMessage, DefaultMessageTimeOut);
|
||||
return Process.GetOutputLineStartsWithAsync(WaitingForFileChangeMessage, DefaultMessageTimeOut);
|
||||
}
|
||||
|
||||
public bool UsePollingWatcher { get; set; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue