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,
            })
Example #3
0
    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())
Example #4
0
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)
Example #5
0
    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())
Example #6
0
    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)
Example #7
0
    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
        ))