示例#1
0
 def setUp(self):
     self._command = AbortUpdate()
     self._mock_options = mock_verb_options(self._command)
     self._mock_options.jobspec = self.TEST_JOBKEY
     self._fake_context = FakeAuroraCommandContext()
     self._fake_context.set_options(self._mock_options)
     self._mock_api = self._fake_context.get_api('UNUSED')
示例#2
0
class TestAbortUpdate(AuroraClientCommandTest):
    def setUp(self):
        self._command = AbortUpdate()
        self._mock_options = mock_verb_options(self._command)
        self._mock_options.jobspec = self.TEST_JOBKEY
        self._fake_context = FakeAuroraCommandContext()
        self._fake_context.set_options(self._mock_options)
        self._mock_api = self._fake_context.get_api("UNUSED")

    def test_abort_update_command_line_succeeds(self):
        self._mock_api.query_job_updates.return_value = get_status_query_response()
        self._mock_api.abort_job_update.return_value = self.create_simple_success_response()
        self._mock_options.message = "hello"
        assert self._command.execute(self._fake_context) == EXIT_OK

        assert self._mock_api.query_job_updates.mock_calls == [
            call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)
        ]
        assert self._mock_api.abort_job_update.mock_calls == [call(UPDATE_KEY, "hello")]
        assert self._fake_context.get_out() == ["Update has been aborted."]
        assert self._fake_context.get_err() == []

    def test_abort_update_command_line_error(self):
        self._mock_api.query_job_updates.return_value = get_status_query_response()
        self._mock_api.abort_job_update.return_value = self.create_error_response()

        with pytest.raises(Context.CommandError):
            self._command.execute(self._fake_context)
        assert self._mock_api.query_job_updates.mock_calls == [
            call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)
        ]
        assert self._mock_api.abort_job_update.mock_calls == [call(UPDATE_KEY, None)]
        assert self._fake_context.get_out() == []
        assert self._fake_context.get_err() == ["Failed to abort update due to error:", "\tWhoops"]

    def test_abort_invalid_api_response(self):
        # Mimic the API returning two active updates for one job, which should be impossible.
        self._mock_api.query_job_updates.return_value = get_status_query_response(count=2)
        self._mock_api.abort_job_update.return_value = self.create_error_response()
        with pytest.raises(Context.CommandError) as error:
            self._command.execute(self._fake_context)
            assert error.message == ("scheduler returned multiple active updates for this job.")

        assert self._mock_api.query_job_updates.mock_calls == [
            call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)
        ]
        assert self._mock_api.abort_job_update.mock_calls == []
        assert self._fake_context.get_out() == []
        assert self._fake_context.get_err() == []
示例#3
0
 def setUp(self):
   self._command = AbortUpdate()
   self._mock_options = mock_verb_options(self._command)
   self._mock_options.jobspec = self.TEST_JOBKEY
   self._fake_context = FakeAuroraCommandContext()
   self._fake_context.set_options(self._mock_options)
   self._mock_api = self._fake_context.get_api('UNUSED')
示例#4
0
class TestAbortUpdate(AuroraClientCommandTest):
  def setUp(self):
    self._command = AbortUpdate()
    self._mock_options = mock_verb_options(self._command)
    self._mock_options.jobspec = self.TEST_JOBKEY
    self._fake_context = FakeAuroraCommandContext()
    self._fake_context.set_options(self._mock_options)
    self._mock_api = self._fake_context.get_api('UNUSED')

  def test_abort_update_command_line_succeeds(self):
    self._mock_api.query_job_updates.return_value = get_status_query_response()
    self._mock_api.abort_job_update.return_value = self.create_simple_success_response()
    self._mock_options.message = 'hello'
    assert self._command.execute(self._fake_context) == EXIT_OK

    assert self._mock_api.query_job_updates.mock_calls == [
        call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)]
    assert self._mock_api.abort_job_update.mock_calls == [call(UPDATE_KEY, 'hello')]
    assert self._fake_context.get_out() == ["Update has been aborted."]
    assert self._fake_context.get_err() == []

  def test_abort_update_command_line_error(self):
    self._mock_api.query_job_updates.return_value = get_status_query_response()
    self._mock_api.abort_job_update.return_value = self.create_error_response()

    with pytest.raises(Context.CommandError):
      self._command.execute(self._fake_context)
    assert self._mock_api.query_job_updates.mock_calls == [
        call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)]
    assert self._mock_api.abort_job_update.mock_calls == [call(UPDATE_KEY, None)]
    assert self._fake_context.get_out() == []
    assert self._fake_context.get_err() == ["Failed to abort update due to error:", "\tWhoops"]

  def test_abort_invalid_api_response(self):
    # Mimic the API returning two active updates for one job, which should be impossible.
    self._mock_api.query_job_updates.return_value = get_status_query_response(count=2)
    self._mock_api.abort_job_update.return_value = self.create_error_response()
    with pytest.raises(Context.CommandError) as error:
      self._command.execute(self._fake_context)
      assert error.message == (
        'scheduler returned multiple active updates for this job.')

    assert self._mock_api.query_job_updates.mock_calls == [
        call(update_statuses=ACTIVE_JOB_UPDATE_STATES, job_key=self.TEST_JOBKEY)]
    assert self._mock_api.abort_job_update.mock_calls == []
    assert self._fake_context.get_out() == []
    assert self._fake_context.get_err() == []