def test_job_status(self): # Given/When j = jobs.Job([sys.executable, '-c', 'import time; time.sleep(0.25)'], output_dir=self.root) # Then self.assertEqual(j.status(), 'not started') # When j.run() # Then self.assertEqual(j.status(), 'running') # When j.proc.wait() self.assertEqual(j.status(), 'done') # Given j = jobs.Job([sys.executable, '-c', 'asdf'], output_dir=self.root) # When j.run() j.proc.wait() # Then self.assertEqual(j.status(), 'error') self.assertTrue('NameError' in j.get_stderr())
def test_simple_job(self): # Given command = [ 'python', '-c', 'import sys;sys.stdout.write("1");sys.stderr.write("2")' ] j = jobs.Job(command=command, output_dir=self.root) # When j.run() j.proc.wait() # Then self.assertEqual(j.status(), 'done') self.assertEqual(j.output_dir, self.root) self.assertEqual(j.n_core, 1) self.assertEqual(j.n_thread, 1) self.assertEqual(j.get_stdout(), '1') self.assertEqual(j.get_stderr(), '2') state = j.to_dict() expect = dict(command=command, output_dir=self.root, n_core=1, n_thread=1, env=None) expect['command'][0] = sys.executable self.assertDictEqual(state, expect)
def _make_dummy_job(self, n_core=1, sleep=0.05): output = os.path.join(self.root, 'job%d' % self.count) job = jobs.Job([ sys.executable, '-c', 'import time; time.sleep(%f); print(1)' % sleep ], output_dir=output, n_core=n_core) self.count += 1 return job
def test_that_job_sets_env_var(self): # Given/When j = jobs.Job( [sys.executable, '-c', 'import os;print(os.environ.get("FOO"))'], output_dir=self.root, env=dict(FOO='hello')) j.run() j.proc.wait() # Then self.assertEqual(j.status(), 'done') self.assertEqual(j.get_stdout().strip(), 'hello')
def test_job_can_handle_string_command(self): # Given command = '''\ python -c 'import sys;sys.stdout.write("1");sys.stderr.write("2")' ''' j = jobs.Job(command=command, output_dir=self.root) # When j.run() j.proc.wait() # Then. self.assertTrue(isinstance(j.command, list)) self.assertTrue(j.status(), 'done') self.assertEqual(j.get_stdout(), '1') self.assertEqual(j.get_stderr(), '2')
def test_scheduler_starts_worker_on_submit(self, mock_lw): attrs = {'host': 'localhost', 'free_cores.return_value': 2} mock_lw.return_value = mock.MagicMock(**attrs) # Given config = [dict(host='localhost')] s = jobs.Scheduler(worker_config=config) j = jobs.Job([sys.executable, '-c', 'print(1)'], output_dir=self.root) # When s.submit(j) # Then self.assertEqual(mock_lw.call_count, 1) self.assertEqual(len(s.workers), 1)
def test_scheduler_works_with_local_worker(self): # Given s = jobs.Scheduler(worker_config=[dict(host='localhost')]) # When j = jobs.Job( [sys.executable, '-c', 'import time; time.sleep(0.05); print(1)'], output_dir=self.root) proxy = s.submit(j) # Then wait_until(lambda: proxy.status() != 'done', timeout=2) self.assertEqual(proxy.status(), 'done') self.assertEqual(proxy.get_stderr(), '') self.assertEqual(proxy.get_stdout().strip(), '1')
def test_that_job_sets_omp_var(self): j = jobs.Job( [ sys.executable, '-c', 'import os;print(os.environ.get("OMP_NUM_THREADS"))' ], output_dir=self.root, n_thread=4, ) j.run() j.proc.wait() # Then self.assertEqual(j.status(), 'done') self.assertEqual(j.get_stdout().strip(), '4')
def test_simple(self): # Given r = jobs.RemoteWorker(host='localhost', python=sys.executable, testing=True) # When j = jobs.Job( [sys.executable, '-c', 'import time; time.sleep(0.05); print(1)'], output_dir=self.root) proxy = r.run(j) # Then wait_until(lambda: proxy.status() != 'done') self.assertEqual(proxy.status(), 'done') self.assertEqual(proxy.get_stderr(), '') self.assertEqual(proxy.get_stdout().strip(), '1')