From 31a10e211078e80dd93bd494049b7d026281bb53 Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Mon, 1 Feb 2021 15:41:27 +0000 Subject: [PATCH] Add test validating against regression in #46469 (#47643) * Add test validating against regression in #46469 * fix test bug --- .../tests/ProcessTests.Unix.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Unix.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Unix.cs index 9097dd7672a53..8b5d7b1d28558 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Unix.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Unix.cs @@ -4,6 +4,7 @@ using System.Collections; using System.Collections.Generic; using System.ComponentModel; +using System.Globalization; using System.IO; using System.Linq; using System.Reflection; @@ -810,6 +811,24 @@ public void TestProcessRecycledPid() Assert.True(foundRecycled); } + [PlatformSpecific(TestPlatforms.AnyUnix)] + [ConditionalTheory(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] + [InlineData("/dev/stdin", O_RDONLY)] + [InlineData("/dev/stdout", O_WRONLY)] + [InlineData("/dev/stderr", O_WRONLY)] + public void ChildProcessRedirectedIO_FilePathOpenShouldSucceed(string filename, int flags) + { + var options = new RemoteInvokeOptions { StartInfo = new ProcessStartInfo { RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true }}; + using (RemoteInvokeHandle handle = RemoteExecutor.Invoke(ExecuteChildProcess, filename, flags.ToString(CultureInfo.InvariantCulture), options)) + { } + + static void ExecuteChildProcess(string filename, string flags) + { + int result = open(filename, int.Parse(flags, CultureInfo.InvariantCulture)); + Assert.True(result >= 0, $"failed to open file with {result} and errno {Marshal.GetLastWin32Error()}."); + } + } + [ConditionalTheory(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] [InlineData(true)] [InlineData(false)] @@ -940,6 +959,12 @@ private static unsafe HashSet GetGroups() [DllImport("libc", SetLastError = true)] private static extern int kill(int pid, int sig); + [DllImport("libc", SetLastError = true)] + private static extern int open(string pathname, int flags); + + private const int O_RDONLY = 0; + private const int O_WRONLY = 1; + private static readonly string[] s_allowedProgramsToRun = new string[] { "xdg-open", "gnome-open", "kfmclient" }; private string WriteScriptFile(string directory, string name, int returnValue)