diff --git a/tests/launcher.py b/tests/launcher.py index c6f96825c3c484d91859f95ac75f529bdde7b6d3..be470e2578928a658fe97b792b5dcd5345b8e424 100755 --- a/tests/launcher.py +++ b/tests/launcher.py @@ -5,6 +5,7 @@ import logging import os +import shutil import signal import subprocess import sys @@ -56,6 +57,9 @@ class TestLauncher(BaseTest): def test_socket_directory(self) -> None: with tempfile.TemporaryDirectory(prefix='test-') as temp: + printf_symlink = os.path.join(temp, 'printf=symlink') + os.symlink(shutil.which('printf'), printf_symlink) + proc = subprocess.Popen( [ 'env', @@ -132,7 +136,8 @@ class TestLauncher(BaseTest): completed = run_subprocess( [ - 'env', 'PV_TEST_VAR=not-inherited', + 'env', + 'PV_TEST_VAR=not-inherited', ] + self.launch + [ '--socket', socket, '--', @@ -144,6 +149,74 @@ class TestLauncher(BaseTest): ) self.assertEqual(completed.stdout, b'from-launcher') + completed = run_subprocess( + [ + 'env', + '-u', 'PV_TEST_VAR', + 'PV_TEST_VAR_ONE=one', + 'PV_TEST_VAR_TWO=two', + ] + self.launch + [ + '--pass-env=PV_TEST_VAR', + '--pass-env-matching=PV_TEST_VAR_*', + '--socket', socket, + '--', + 'sh', '-euc', + 'printf \'%s\' ' + '"' + '${PV_TEST_VAR-cleared}' + '${PV_TEST_VAR_ONE}' + '${PV_TEST_VAR_TWO}' + '"', + ], + check=True, + stdout=subprocess.PIPE, + stderr=2, + ) + self.assertEqual(completed.stdout, b'clearedonetwo') + + completed = run_subprocess( + [ + 'env', '-u', 'PV_TEST_VAR', + ] + self.launch + [ + '--env=PV_TEST_VAR=nope', + '--pass-env=PV_TEST_VAR', + '--socket', socket, + '--', + 'sh', '-euc', 'printf \'%s\' "${PV_TEST_VAR-cleared}"', + ], + check=True, + stdout=subprocess.PIPE, + stderr=2, + ) + self.assertEqual(completed.stdout, b'cleared') + + completed = run_subprocess( + self.launch + [ + '--env=PV_TEST_VAR=nope', + '--unset-env=PV_TEST_VAR', + '--socket', socket, + '--', + 'sh', '-euc', 'printf \'%s\' "${PV_TEST_VAR-cleared}"', + ], + check=True, + stdout=subprocess.PIPE, + stderr=2, + ) + self.assertEqual(completed.stdout, b'cleared') + + completed = run_subprocess( + self.launch + [ + '--unset-env=PV_TEST_VAR', + '--socket', socket, + '--', + printf_symlink, 'hello', + ], + check=True, + stdout=subprocess.PIPE, + stderr=2, + ) + self.assertEqual(completed.stdout, b'hello') + completed = run_subprocess( self.launch + [ '--clear-env', @@ -158,7 +231,12 @@ class TestLauncher(BaseTest): self.assertEqual(completed.stdout, b'cleared') completed = run_subprocess( - self.launch + [ + [ + 'env', + 'PV_TEST_VAR=not-inherited', + ] + self.launch + [ + '--pass-env=PV_TEST_VAR', + '--env=PV_TEST_VAR=nope', '--env=PV_TEST_VAR=overridden', '--socket', socket, '--',