diff --git a/tests/adverb.py b/tests/adverb.py index 1490ca2357e5f137f2f940ac13359485b5ea193c..09d9d6a06d37c4d4249eea66d3035c983a1d4f76 100755 --- a/tests/adverb.py +++ b/tests/adverb.py @@ -83,6 +83,30 @@ class TestAdverb(BaseTest): (128 + signal.SIGTERM, -signal.SIGTERM), ) + def test_fd_passthrough(self) -> None: + read_end, write_end = os.pipe2(os.O_CLOEXEC) + + proc = subprocess.Popen( + self.adverb + [ + '--pass-fd=%d' % write_end, + '--', + 'sh', '-euc', 'echo hello >&%d' % write_end, + ], + pass_fds=[write_end], + stdout=2, + stderr=2, + universal_newlines=True, + ) + + try: + os.close(write_end) + + with os.fdopen(read_end, 'rb') as reader: + self.assertEqual(reader.read(), b'hello\n') + finally: + proc.wait() + self.assertEqual(proc.returncode, 0) + def tearDown(self) -> None: super().tearDown()