예제 #1
0
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:')
예제 #2
0
 def setUp(self):
     self.obj = Runner()
예제 #3
0
    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)