def test_prepare_job(self): """ `prepare_job` returns a :py:class:`geonode.mtapi.models.OqJob` instance. The latter's `oq_params` property refers to the correct upload record. """ post_params = get_post_params() job = prepare_job(post_params) self.assertTrue(isinstance(job, OqJob)) self.upload = Upload.objects.get(id=post_params["upload"]) self.assertEqual(self.upload, job.oq_params.upload)
def test_prepare_job_result_with_failed(self): """ The result dictionary for failed OpenQuake jobs is prepared correctly. """ post_params = get_post_params() job = prepare_job(post_params) self.upload = job.oq_params.upload job.status = "failed" self.assertEqual( {"msg": "Calculation failed", "status": "failure", "id": job.id}, prepare_job_result(job))
def test_prepare_job_result_with_succeeded_no_maps(self): """ The result dictionary for succeeded OpenQuake jobs (w/o hazard/loss maps) is prepared correctly. """ post_params = get_post_params() job = prepare_job(post_params) self.upload = job.oq_params.upload job.status = "succeeded" self.assertEqual( {"msg": "Calculation succeeded", "status": "success", "id": job.id, "files": []}, prepare_job_result(job))
def test_prepare_job_param_values(self): """ `prepare_job` returns a :py:class:`geonode.mtapi.models.OqJob` instance. The latter's `oq_params` property is initialized correctly. """ post_params = get_post_params() oqp = prepare_job(post_params).oq_params self.upload = oqp.upload trans_tab = dict(reference_v30_value="reference_vs30_value") param_names = ( "job_type", "region_grid_spacing", "min_magnitude", "investigation_time", "component", "imt", "truncation_type", "truncation_level", "reference_v30_value", "imls", "poes", "realizations") for param_name in param_names: attr_name = trans_tab.get(param_name, param_name) self.assertEqual(getattr(oqp, attr_name), post_params["fields"][param_name])
def test_start_job(self): """ The oqrunner process is started with the correct path/arguments and its process ID (pid) is captured in the corresponding job record. """ post_params = get_post_params() job = prepare_job(post_params) self.upload = job.oq_params.upload process_mock = mock.MagicMock(name="mock:the-process") process_mock.pid = 31459 popen_mock = mock.MagicMock(name="mock:subprocess.Popen") popen_mock.return_value = process_mock with mock.patch('subprocess.Popen', new=popen_mock): self.assertEqual(0, job.job_pid) start_job(job) args, _kwargs = popen_mock.call_args self.assertEqual( ([settings.OQRUNNER_PATH, "-j", str(job.id)],), args) self.assertEqual(31459, job.job_pid)
def test_prepare_job_ignored_params(self): """ `prepare_job()` ignores the following parameters: "period", "gm_correlated" and "histories" for classical job types. """ ignored_fields = {"period": 1, "histories": 1, "gm_correlated": False} post_params = get_post_params(ignored_fields) oqp = prepare_job(post_params).oq_params self.upload = oqp.upload trans_tab = dict(reference_v30_value="reference_vs30_value") param_names = ( "job_type", "region_grid_spacing", "min_magnitude", "investigation_time", "component", "imt", "truncation_type", "truncation_level", "reference_v30_value", "imls", "poes", "realizations") for param_name in param_names: attr_name = trans_tab.get(param_name, param_name) self.assertEqual(getattr(oqp, attr_name), post_params["fields"][param_name])