def test_usage(self) -> None: run = beam_job_domain.BeamJobRun('123', 'FooJob', 'RUNNING', self.NOW, self.NOW, True) self.assertEqual(run.job_id, '123') self.assertEqual(run.job_name, 'FooJob') self.assertEqual(run.job_state, 'RUNNING') self.assertEqual(run.job_started_on, self.NOW) self.assertEqual(run.job_updated_on, self.NOW) self.assertTrue(run.job_is_synchronous)
def test_to_dict(self) -> None: run = beam_job_domain.BeamJobRun('123', 'FooJob', 'RUNNING', self.NOW, self.NOW, True) self.assertEqual( run.to_dict(), { 'job_id': '123', 'job_name': 'FooJob', 'job_state': 'RUNNING', 'job_started_on_msecs': utils.get_time_in_millisecs(self.NOW), 'job_updated_on_msecs': utils.get_time_in_millisecs(self.NOW), 'job_is_synchronous': True, })
def test_delete_cancels_job(self) -> None: model = beam_job_services.create_beam_job_run_model('FooJob') model.put() run = beam_job_domain.BeamJobRun( model.id, 'FooJob', 'CANCELLING', datetime.datetime.utcnow(), datetime.datetime.utcnow(), False) swap_cancel_beam_job = self.swap_to_always_return( beam_job_services, 'cancel_beam_job', value=run) with swap_cancel_beam_job: response = self.delete_json('/beam_job_run', {'job_id': model.id}) # type: ignore[no-untyped-call] self.assertEqual(response, run.to_dict())
def _get_beam_job_run_from_model(beam_job_run_model): """Returns a domain object corresponding to the given BeamJobRunModel. Args: beam_job_run_model: BeamJobRunModel. The model. Returns: BeamJobRun. The corresponding domain object. """ return beam_job_domain.BeamJobRun( beam_job_run_model.id, beam_job_run_model.job_name, beam_job_run_model.latest_job_state, beam_job_run_model.job_arguments, beam_job_run_model.created_on, beam_job_run_model.last_updated, beam_job_run_model.dataflow_job_id is None)
def test_put_starts_new_job(self) -> None: now = datetime.datetime.utcnow() mock_job = beam_job_domain.BeamJobRun('123', 'FooJob', 'RUNNING', [], now, now, False) run_job_sync_swap = self.swap_to_always_return(jobs_manager, 'run_job_sync', value=mock_job) with run_job_sync_swap: response = self.put_json( # type: ignore[no-untyped-call] '/beam_job_run', { 'job_name': 'FooJob', 'job_arguments': [] }, csrf_token=self.get_new_csrf_token() ) # type: ignore[no-untyped-call] self.assertEqual(response, mock_job.to_dict())
def test_in_terminal_state(self) -> None: cancelled_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.CANCELLED.value, self.NOW, self.NOW, True) drained_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DRAINED.value, self.NOW, self.NOW, True) updated_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.UPDATED.value, self.NOW, self.NOW, True) done_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DONE.value, self.NOW, self.NOW, True) failed_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.FAILED.value, self.NOW, self.NOW, True) cancelling_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.CANCELLING.value, self.NOW, self.NOW, True) draining_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DRAINING.value, self.NOW, self.NOW, True) pending_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.PENDING.value, self.NOW, self.NOW, True) running_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.RUNNING.value, self.NOW, self.NOW, True) stopped_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.STOPPED.value, self.NOW, self.NOW, True) unknown_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.UNKNOWN.value, self.NOW, self.NOW, True) self.assertTrue(cancelled_beam_job_run.in_terminal_state) self.assertTrue(drained_beam_job_run.in_terminal_state) self.assertTrue(updated_beam_job_run.in_terminal_state) self.assertTrue(done_beam_job_run.in_terminal_state) self.assertTrue(failed_beam_job_run.in_terminal_state) self.assertFalse(cancelling_beam_job_run.in_terminal_state) self.assertFalse(draining_beam_job_run.in_terminal_state) self.assertFalse(pending_beam_job_run.in_terminal_state) self.assertFalse(running_beam_job_run.in_terminal_state) self.assertFalse(stopped_beam_job_run.in_terminal_state) self.assertFalse(unknown_beam_job_run.in_terminal_state)
def test_is_state_terminal(self) -> None: now = datetime.datetime.utcnow() cancelled_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.CANCELLED.value, now, now, True ) drained_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DRAINED.value, now, now, True ) updated_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.UPDATED.value, now, now, True ) done_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DONE.value, now, now, True ) failed_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.FAILED.value, now, now, True ) cancelling_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.CANCELLING.value, now, now, True ) draining_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.DRAINING.value, now, now, True ) pending_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.PENDING.value, now, now, True ) running_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.RUNNING.value, now, now, True ) stopped_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.STOPPED.value, now, now, True ) unknown_beam_job_run = beam_job_domain.BeamJobRun( '123', 'FooJob', beam_job_models.BeamJobState.UNKNOWN.value, now, now, True ) self.assertTrue(beam_job_services.is_state_terminal( cancelled_beam_job_run.job_state )) self.assertTrue(beam_job_services.is_state_terminal( drained_beam_job_run.job_state )) self.assertTrue(beam_job_services.is_state_terminal( updated_beam_job_run.job_state )) self.assertTrue(beam_job_services.is_state_terminal( done_beam_job_run.job_state )) self.assertTrue(beam_job_services.is_state_terminal( failed_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( cancelling_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( draining_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( pending_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( running_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( stopped_beam_job_run.job_state )) self.assertFalse(beam_job_services.is_state_terminal( unknown_beam_job_run.job_state ))