def test_job_launch_calls_record_initial_stats(self): '''When a job is launched, make sure that :py:method:`openquake.engine.JobContext._record_initial_stats` is called. ''' # Mock out pieces of the test job so it doesn't actually run. eb_haz_calc = ('openquake.calculators.hazard.event_based.core' '.EventBasedHazardCalculator') eb_risk_calc = ('openquake.calculators.risk.event_based.core' '.EventBasedRiskCalculator') methods = ('initialize', 'pre_execute', 'execute', 'post_execute') haz_patchers = [patch('%s.%s' % (eb_haz_calc, m)) for m in methods] risk_patchers = [patch('%s.%s' % (eb_risk_calc, m)) for m in methods] for p in haz_patchers: p.start() for p in risk_patchers: p.start() try: record = 'openquake.engine.JobContext._record_initial_stats' with patch(record) as record_mock: engine._launch_job( self.eb_job, ['general', 'HAZARD', 'RISK']) self.assertEqual(1, record_mock.call_count) finally: for p in haz_patchers: p.stop() for p in risk_patchers: p.stop()
def test_job_launch_calls_record_initial_stats(self): """When a job is launched, make sure that :py:method:`openquake.engine.JobContext._record_initial_stats` is called. """ # Mock out pieces of the test job so it doesn't actually run. eb_haz_calc = "openquake.calculators.hazard.event_based.core" ".EventBasedHazardCalculator" eb_risk_calc = "openquake.calculators.risk.event_based.core" ".EventBasedRiskCalculator" methods = ("initialize", "pre_execute", "execute", "post_execute") haz_patchers = [patch("%s.%s" % (eb_haz_calc, m)) for m in methods] risk_patchers = [patch("%s.%s" % (eb_risk_calc, m)) for m in methods] for p in haz_patchers: p.start() for p in risk_patchers: p.start() try: record = "openquake.engine.JobContext._record_initial_stats" with patch(record) as record_mock: engine._launch_job(self.eb_job, ["general", "HAZARD", "RISK"]) self.assertEqual(1, record_mock.call_count) finally: for p in haz_patchers: p.stop() for p in risk_patchers: p.stop()
def test__launch_job_calls_core_calc_methods(self): # The `Calculator` interface defines 4 general methods: # - initialize # - pre_execute # - execute # - post_execute # When `_launch_job` is called, each of these methods should be # called once per job type (hazard, risk). # Calculation setup: cfg_file = helpers.demo_file('classical_psha_based_risk/config.gem') job = engine.prepare_job() job_profile, params, sections = engine.import_job_profile( cfg_file, job) job_ctxt = engine.JobContext( params, job.id, sections=sections, serialize_results_to=['xml', 'db'], oq_job_profile=job_profile, oq_job=job) # Mocking setup: cls_haz_calc = ('openquake.calculators.hazard.classical.core' '.ClassicalHazardCalculator') cls_risk_calc = ('openquake.calculators.risk.classical.core' '.ClassicalRiskCalculator') methods = ('initialize', 'pre_execute', 'execute', 'post_execute') haz_patchers = [helpers.patch('%s.%s' % (cls_haz_calc, m)) for m in methods] risk_patchers = [helpers.patch('%s.%s' % (cls_risk_calc, m)) for m in methods] haz_mocks = [p.start() for p in haz_patchers] risk_mocks = [p.start() for p in risk_patchers] # Call the function under test: engine._launch_job(job_ctxt, sections) self.assertTrue(all(x.call_count == 1 for x in haz_mocks)) self.assertTrue(all(x.call_count == 1 for x in risk_mocks)) # Tear down the mocks: for p in haz_patchers: p.stop() for p in risk_patchers: p.stop()