class RunnerTest(unittest.TestCase): def setUp(self): self.obj = Runner() def test_takes_executable(self): self.obj.exe = Executable() self.assertIsInstance(self.obj.exe, Executable) def test_ensures_type_of_executable(self): with self.assertRaises(ValueError): self.obj.exe = 'not an Executable' def test_runs_with_arbitrary_arguments(self): self.obj.exe = Executable(exe=sys.executable) with self.assertLogs('pfasst_py') as cptr: self.obj.run(['-c "import sys; print(sys.version_info)"']) self.assertRegex(' '.join(cptr.output), 'Executing') self.assertRegex(' '.join(cptr.output), 'Finished') def test_stores_output(self): self.obj.exe = Executable(exe=sys.executable) self.obj.run(['-c "import sys; print(sys.version_info)"']) self.assertEqual(self.obj.stdout_lines, [str(sys.version_info)]) def test_no_output_stored_if_not_run(self): self.assertIsNone(self.obj.stdout_lines) def test_checks_return_status(self): self.obj.exe = Executable(exe='exit') with self.assertRaises(RuntimeError): self.obj.run('1') def test_checks_stderr(self): self.obj.exe = Executable(exe='echo') with self.assertLogs('pfasst_py', level='WARNING') as cptr: self.obj.run('"Hello" >&2') self.assertRegex(''.join(cptr.output), 'Process put something on stderr:')
def setUp(self): self.obj = Runner()
from pfasst_py.runner.executable import MPIExec from pfasst_py.runner.wrapper import Wrapper from pfasst_py.runner.runner import Runner example_dir = pathlib.Path('/home/t.klatt/projects/PFASST/build_mpi/examples/advec_diff') exe_file = 'advec_diff_faulty_pfasst' exe = AdvecDiffFaultyPfasstExecutable(exe=(example_dir / exe_file)) exe.abs_res_tol.value = 1e-10 exe.dt.value = 0.05 exe.tend.value = 0.2 exe.num_iters.value = 10 exe.nocolor.toggle() print(exe.build_cmd_line()) mpi = MPIExec() mpi.np.value = 4 wrapper = Wrapper() wrapper.exe = mpi wrapper.wrapped = exe print(wrapper.build_cmd_line()) runner = Runner() runner.exe = wrapper runner.run() print(runner.stdout_lines)