def test_submitQuery_with_tarball(self): self.factory.tarball = 'Magma-1.1.tar.gz' self.factory.submitJob2Launcher = Mock() job = self.factory.fromScratch(u'bob') jobquery = JobQuery(job.dir, "", []) status_cb_url = 'http://example.com/status/{}.json'.format(job.id) jobquery.status_callback_url = status_cb_url self.factory.submitQuery(jobquery, job) jobmanager_query = {'jobdir': jobquery.dir + '/', 'executable': "/bin/sh", 'prestaged': [self.factory.script_fn, 'results.db', # tarball is staged as well 'Magma-1.1.tar.gz' ], "poststaged": ['results.db'], "stderr": "stderr.txt", "stdout": "stdout.txt", 'arguments': [self.factory.script_fn], 'status_callback_url': status_cb_url } self.factory.submitJob2Launcher.assert_called_with(jobmanager_query) self.assertEqual(job.state, u'PENDING')
def test_submitQuery_invalid_joblauncher(self): from requests.exceptions import HTTPError from magmaweb.job import JobSubmissionError exc = HTTPError('422 Client Error: Unprocessable Entity') self.factory.submitJob2Launcher = Mock(side_effect=exc) job = self.factory.fromScratch(u'bob') jobquery = JobQuery(job.dir, "", []) status_cb_url = 'http://example.com/status/{}.json'.format(job.id) jobquery.status_callback_url = status_cb_url with self.assertRaises(JobSubmissionError): self.factory.submitQuery(jobquery, job) self.assertEqual(job.state, 'SUBMISSION_ERROR')
def test_submitQuery_no_joblauncher(self): from requests.exceptions import ConnectionError from magmaweb.job import JobSubmissionError exc = ConnectionError('[Errno 111] Connection refused') self.factory.submitJob2Launcher = Mock(side_effect=exc) job = self.factory.fromScratch(u'bob') jobquery = JobQuery(job.dir, "", []) status_cb_url = 'http://example.com/status/{}.json'.format(job.id) jobquery.status_callback_url = status_cb_url with self.assertRaises(JobSubmissionError): self.factory.submitQuery(jobquery, job) self.assertEqual(job.state, 'SUBMISSION_ERROR')
def test_submitQuery(self): self.factory.init_script = "# make magma available" job = self.factory.fromScratch(u'bob') self.factory.script_fn = 'script.sh' cmd = "magma add_structures -t smiles structures.dat results.db\n" jobquery = JobQuery(job.dir, cmd, ['structures.dat']) status_cb_url = 'http://example.com/status/{}.json'.format(job.id) jobquery.status_callback_url = status_cb_url launcher_url = 'http://localhost:9998/job/' launcher_url += '70a00fe2-f698-41ed-b28c-b37c22f10440' self.factory.submitJob2Launcher = Mock(return_value=launcher_url) self.factory.submitQuery(jobquery, job) job_script_fn = os.path.join(jobquery.dir, self.factory.script_fn) job_script = open(job_script_fn).read() exp_script = "# make magma available\n" exp_script += "magma add_structures -t smiles " exp_script += "structures.dat results.db\n" self.assertMultiLineEqual(job_script, exp_script) jobmanager_query = {'jobdir': jobquery.dir + '/', 'executable': "/bin/sh", 'prestaged': [self.factory.script_fn, 'results.db', 'structures.dat' ], "poststaged": ['results.db'], "stderr": "stderr.txt", "stdout": "stdout.txt", 'arguments': [self.factory.script_fn], 'status_callback_url': status_cb_url } self.factory.submitJob2Launcher.assert_called_with(jobmanager_query) self.assertEqual(job.state, u'PENDING') self.assertEqual(job.launcher_url, launcher_url)