| File: Certificates\CertificateProcessRunnerTests.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using Microsoft.AspNetCore.Certificates.Generation; using Microsoft.AspNetCore.InternalTesting; namespace Aspire.Cli.Tests.Certificates; public class CertificateProcessRunnerTests { [Fact] public async Task Run_DiscardsRedirectedOutputBeforeWaitingForExit() { var startInfo = CreateProcessStartInfo(); var result = await Task.Run(() => CertificateProcessRunner.Run(startInfo)) .DefaultTimeout(); Assert.Equal(ExitCode, result.ExitCode); Assert.Equal(string.Empty, result.StandardOutput); Assert.Equal(string.Empty, result.StandardError); } [Fact] public async Task RunAndCaptureText_CapturesRedirectedOutputBeforeWaitingForExit() { var startInfo = CreateProcessStartInfo(); var result = await Task.Run(() => CertificateProcessRunner.RunAndCaptureText(startInfo)) .DefaultTimeout(); var expectedStandardOutput = string.Concat(Enumerable.Repeat(StandardOutputLine + Environment.NewLine, LineCount)); var expectedStandardError = string.Concat(Enumerable.Repeat(StandardErrorLine + Environment.NewLine, LineCount)); Assert.Equal(ExitCode, result.ExitCode); Assert.Equal(expectedStandardOutput, result.StandardOutput); Assert.Equal(expectedStandardError, result.StandardError); } private const int LineCount = 2048; private const int ExitCode = 17; private const string StandardOutputLine = "standard-output-0123456789abcdef0123456789abcdef0123456789abcdef"; private const string StandardErrorLine = "standard-error--0123456789abcdef0123456789abcdef0123456789abcdef"; private static ProcessStartInfo CreateProcessStartInfo() { ProcessStartInfo startInfo; if (OperatingSystem.IsWindows()) { startInfo = new ProcessStartInfo("powershell.exe"); startInfo.ArgumentList.Add("-NoLogo"); startInfo.ArgumentList.Add("-NoProfile"); startInfo.ArgumentList.Add("-NonInteractive"); startInfo.ArgumentList.Add("-Command"); startInfo.ArgumentList.Add( $"1..{LineCount} | ForEach-Object {{ [Console]::Out.WriteLine('{StandardOutputLine}') }}; " + $"1..{LineCount} | ForEach-Object {{ [Console]::Error.WriteLine('{StandardErrorLine}') }}; " + $"exit {ExitCode}"); } else { startInfo = new ProcessStartInfo("/bin/sh"); startInfo.ArgumentList.Add("-c"); startInfo.ArgumentList.Add( $"i=0; while [ \"$i\" -lt {LineCount} ]; do printf '{StandardOutputLine}\\n'; i=$((i+1)); done; " + $"i=0; while [ \"$i\" -lt {LineCount} ]; do printf '{StandardErrorLine}\\n' >&2; i=$((i+1)); done; " + $"exit {ExitCode}"); } startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; return startInfo; } }