diff --git a/tests/test_run.py b/tests/test_run.py index 5a79d2d52485ea5865cadb953cbc7f8cdf2a5690..9a260de5c543b71132b42b6ca716633b8dfbda1f 100644 --- a/tests/test_run.py +++ b/tests/test_run.py @@ -27,6 +27,12 @@ import fsl.utils.fslsub as fslsub from . import make_random_image, mockFSLDIR, CaptureStdout +def mkexec(path, contents): + with open(path, 'wt') as f: + f.write(contents) + os.chmod(path, 0o755) + + def test_run(): test_script = textwrap.dedent(""" @@ -40,9 +46,7 @@ def test_run(): with tempdir.tempdir(): # return code == 0 - with open('script.sh', 'wt') as f: - f.write(test_script.format(0)) - os.chmod('script.sh', 0o755) + mkexec('script.sh', test_script.format(0)) expstdout = "standard output - arguments: 1 2 3\n" expstderr = "standard error\n" @@ -56,29 +60,34 @@ def test_run(): assert run.run(*('./script.sh', '1', '2', '3')) == expstdout # test stdout/stderr - stdout, stderr = run.run('./script.sh 1 2 3', err=True) + stdout, stderr = run.run('./script.sh 1 2 3', stderr=True) assert stdout == expstdout assert stderr == expstderr # test return code - res = run.run('./script.sh 1 2 3', ret=True) + res = run.run('./script.sh 1 2 3', exitcode=True) stdout, ret = res assert stdout == expstdout assert ret == 0 - stdout, stderr, ret = run.run('./script.sh 1 2 3', err=True, ret=True) + stdout, stderr, ret = run.run('./script.sh 1 2 3', stderr=True, + exitcode=True) assert stdout == expstdout assert stderr == expstderr assert ret == 0 + # stdout=False + res = run.run('./script.sh 1 2 3', stdout=False) + assert res == () + stderr = run.run('./script.sh 1 2 3', stdout=False, stderr=True) + assert stderr == expstderr + # return code != 0 - with open('./script.sh', 'wt') as f: - f.write(test_script.format(255)) - os.chmod('./script.sh', 0o755) + mkexec('./script.sh', test_script.format(255)) with pytest.raises(RuntimeError): run.run('./script.sh 1 2 3') - stdout, ret = run.run('./script.sh 1 2 3', ret=True) + stdout, ret = run.run('./script.sh 1 2 3', exitcode=True) assert stdout == expstdout assert ret == 255 @@ -93,9 +102,7 @@ def test_run_tee(): """).strip() with tempdir.tempdir(): - with open('script.sh', 'wt') as f: - f.write(test_script) - os.chmod('script.sh', 0o755) + mkexec('script.sh', test_script) expstdout = "standard output - arguments: 1 2 3\n" expstderr = "standard error\n" @@ -103,13 +110,14 @@ def test_run_tee(): capture = CaptureStdout() with capture: - stdout = run.run('./script.sh 1 2 3', tee=True) + stdout = run.run('./script.sh 1 2 3', log={'tee' : True}) assert stdout == expstdout assert capture.stdout == expstdout with capture.reset(): - stdout, stderr = run.run('./script.sh 1 2 3', err=True, tee=True) + stdout, stderr = run.run('./script.sh 1 2 3', stderr=True, + log={'tee' : True}) assert stdout == expstdout assert stderr == expstderr @@ -118,7 +126,9 @@ def test_run_tee(): with capture.reset(): stdout, stderr, ret = run.run('./script.sh 1 2 3', - err=True, ret=True, tee=True) + stderr=True, + exitcode=True, + log={'tee' : True}) assert ret == 0 assert stdout == expstdout @@ -127,7 +137,9 @@ def test_run_tee(): assert capture.stderr == expstderr with capture.reset(): - stdout, ret = run.run('./script.sh 1 2 3', ret=True, tee=True) + stdout, ret = run.run('./script.sh 1 2 3', + exitcode=True, + log={'tee' : True}) assert ret == 0 assert stdout == expstdout @@ -142,9 +154,7 @@ def test_dryrun(): """).strip() with tempdir.tempdir(): - with open('./script.sh', 'wt') as f: - f.write(test_script) - os.chmod('./script.sh', 0o755) + mkexec('./script.sh', test_script) run.run('./script.sh') assert op.exists('foo') @@ -169,7 +179,6 @@ def test_runfsl(): old_fsldir = fslplatform.fsldir old_fsldevdir = fslplatform.fsldevdir - try: with tempdir.tempdir(): @@ -185,9 +194,8 @@ def test_runfsl(): fsldir = op.abspath('./fsl') fslhd = op.join(fsldir, 'bin', 'fslhd') os.makedirs(op.join(fsldir, 'bin')) - with open(fslhd, 'wt') as f: - f.write(test_script.format('fsldir')) - os.chmod(fslhd, 0o777) + + mkexec(fslhd, test_script.format('fsldir')) fslplatform.fsldir = fsldir assert run.runfsl('fslhd').strip() == 'fsldir' @@ -196,8 +204,8 @@ def test_runfsl(): fsldevdir = './fsldev' fslhd = op.join(fsldevdir, 'bin', 'fslhd') shutil.copytree(fsldir, fsldevdir) - with open(fslhd, 'wt') as f: - f.write(test_script.format('fsldevdir')) + + mkexec(fslhd, test_script.format('fsldevdir')) fslplatform.fsldevdir = fsldevdir fslplatform.fsldir = None @@ -207,10 +215,7 @@ def test_runfsl(): override = './override' fslhd = op.join(override, 'fslhd') os.makedirs(override) - with open(fslhd, 'wt') as f: - f.write(test_script.format('override')) - os.chmod(fslhd, 0o777) - + mkexec(fslhd, test_script.format('override')) fslplatform.fsldir = None fslplatform.fsldevdir = None @@ -285,3 +290,80 @@ def test_run_submit(): assert stdout == 'test_script running\n' assert stderr == experr + + +def test_run_streams(): + """ + """ + + test_script = textwrap.dedent(""" + #!/usr/bin/env bash + echo standard output + echo standard error >&2 + exit 0 + """).strip() + + expstdout = 'standard output\n' + expstderr = 'standard error\n' + + with tempdir.tempdir(): + mkexec('./script.sh', test_script) + + with open('my_stdout', 'wt') as stdout, \ + open('my_stderr', 'wt') as stderr: + + stdout, stderr = run.run('./script.sh', + stderr=True, + log={'stdout' : stdout, + 'stderr' : stderr}) + + assert stdout == expstdout + assert stderr == expstderr + assert open('my_stdout', 'rt').read() == expstdout + assert open('my_stderr', 'rt').read() == expstderr + + + capture = CaptureStdout() + + with open('my_stdout', 'wt') as stdout, \ + open('my_stderr', 'wt') as stderr, \ + capture.reset(): + + stdout, stderr = run.run('./script.sh', + stderr=True, + log={'tee' : True, + 'stdout' : stdout, + 'stderr' : stderr}) + + assert stdout == expstdout + assert stderr == expstderr + assert capture.stdout == expstdout + assert capture.stderr == expstderr + assert open('my_stdout', 'rt').read() == expstdout + assert open('my_stderr', 'rt').read() == expstderr + + +def test_run_logcmd(): + test_script = textwrap.dedent(""" + #!/usr/bin/env bash + echo output $@ + exit 0 + """).strip() + + expstdout = './script.sh 1 2 3\noutput 1 2 3\n' + + with tempdir.tempdir(): + mkexec('script.sh', test_script) + stdout = run.run('./script.sh 1 2 3', log={'cmd' : True}) + assert stdout == expstdout + + mkexec('script.sh', test_script) + stdout = run.run('./script.sh 1 2 3', log={'cmd' : True}) + assert stdout == expstdout + + with open('my_stdout', 'wt') as stdoutf: + stdout = run.run('./script.sh 1 2 3', + log={'cmd' : True, 'stdout' : stdoutf}) + + assert stdout == expstdout + assert open('my_stdout', 'rt').read() == expstdout