Пример #1
0
 def test_pulse_interval_secs(self):
   config = UpdaterConfig(
     UpdateConfig(batch_size=1,
                  watch_secs=1,
                  max_per_shard_failures=1,
                  max_total_failures=1,
                  pulse_interval_secs=60))
   assert 60000 == config.to_thrift_update_settings().blockIfNoPulsesAfterMs
Пример #2
0
 def test_pulse_interval_unset(self):
     config = UpdaterConfig(
         UpdateConfig(batch_size=1,
                      watch_secs=1,
                      max_per_shard_failures=1,
                      max_total_failures=1))
     assert config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs is None
Пример #3
0
 def test_multiple_ranges(self):
   """Test multiple ranges."""
   ranges = [repr(e) for e in UpdaterConfig.instances_to_ranges([1, 2, 3, 5, 7, 8])]
   assert 3 == len(ranges), "Wrong number of ranges:%s" % len(ranges)
   assert repr(Range(first=1, last=3)) in ranges, "Missing range [1,3]"
   assert repr(Range(first=5, last=5)) in ranges, "Missing range [5,5]"
   assert repr(Range(first=7, last=8)) in ranges, "Missing range [7,8]"
Пример #4
0
    def test_restart_with_lock(self):
        command = RestartCommand()

        jobkey = AuroraJobKey("cluster", "role", "env", "job")
        mock_options = mock_verb_options(command)
        mock_options.instance_spec = TaskInstanceKey(jobkey, [])

        fake_context = FakeAuroraCommandContext()
        fake_context.set_options(mock_options)

        mock_api = fake_context.get_api("test")
        mock_api.restart.return_value = AuroraClientCommandTest.create_blank_response(
            ResponseCode.LOCK_ERROR, "Error.")

        with pytest.raises(Context.CommandError):
            command.execute(fake_context)

        updater_config = UpdaterConfig(mock_options.batch_size,
                                       mock_options.restart_threshold,
                                       mock_options.watch_secs,
                                       mock_options.max_per_instance_failures,
                                       mock_options.max_total_failures)

        mock_api.restart.assert_called_once_with(
            jobkey,
            mock_options.instance_spec.instance,
            updater_config,
            mock_options.healthcheck_interval_seconds,
            config=None)
        self.assert_lock_message(fake_context)
Пример #5
0
 def test_multiple_ranges(self):
   """Test multiple ranges."""
   ranges = [repr(e) for e in UpdaterConfig.instances_to_ranges([1, 2, 3, 5, 7, 8])]
   assert 3 == len(ranges), "Wrong number of ranges:%s" % len(ranges)
   assert repr(Range(first=1, last=3)) in ranges, "Missing range [1,3]"
   assert repr(Range(first=5, last=5)) in ranges, "Missing range [5,5]"
   assert repr(Range(first=7, last=8)) in ranges, "Missing range [7,8]"
Пример #6
0
 def test_pulse_interval_too_low(self):
   threshold = UpdaterConfig.MIN_PULSE_INTERVAL_SECONDS
   with raises(ValueError) as e:
     UpdaterConfig(UpdateConfig(batch_size=1,
                                watch_secs=1,
                                max_per_shard_failures=1,
                                max_total_failures=1,
                                pulse_interval_secs=threshold - 1))
   assert 'Pulse interval seconds must be at least %s seconds.' % threshold in e.value.message
Пример #7
0
    def test_to_thrift_update_settings_no_strategy_queue(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object that doesn't include an update strategy.

       The configuration in this test should be converted to a
       QueueJobUpdateStrategy.
    """

        config = UpdaterConfig(UpdateConfig())

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)
        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=None,
            queueStrategy=QueueJobUpdateStrategy(groupSize=1),
            varBatchStrategy=None)

        assert thrift_update_config == update_settings
Пример #8
0
  def test_to_thrift_update_settings_no_strategy_queue(self):

    """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object that doesn't include an update strategy.

       The configuration in this test should be converted to a
       QueueJobUpdateStrategy.
    """

    config = UpdaterConfig(UpdateConfig())

    thrift_update_config = config.to_thrift_update_settings()

    update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)
    update_settings.updateStrategy = JobUpdateStrategy(
        batchStrategy=None,
        queueStrategy=QueueJobUpdateStrategy(groupSize=1),
        varBatchStrategy=None)

    assert thrift_update_config == update_settings
Пример #9
0
    def test_to_thrift_update_settings_no_strategy_batch(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object that doesn't include an update strategy.

       The configuration in this test should be converted to a
       BatchJobUpdateStrategy.
    """

        config = UpdaterConfig(UpdateConfig(wait_for_batch_completion=True))

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)
        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=BatchJobUpdateStrategy(groupSize=1,
                                                 autopauseAfterBatch=False),
            queueStrategy=None,
            varBatchStrategy=None)
        update_settings.waitForBatchCompletion = True

        assert thrift_update_config == update_settings
Пример #10
0
    def test_to_thrift_update_settings_strategy(self):
        """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object.
    """

        config = UpdaterConfig(
            UpdateConfig(update_strategy=self.UPDATE_STRATEGIES(
                PystachioVariableBatchUpdateStrategy(
                    batch_sizes=[1, 2, 3, 4], autopause_after_batch=True))))

        thrift_update_config = config.to_thrift_update_settings()

        update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)

        update_settings.updateStrategy = JobUpdateStrategy(
            batchStrategy=None,
            queueStrategy=None,
            varBatchStrategy=VariableBatchJobUpdateStrategy(
                groupSizes=(1, 2, 3, 4), autopauseAfterBatch=True))

        assert thrift_update_config == update_settings
Пример #11
0
  def test_to_thrift_update_settings_strategy(self):

    """Test to_thrift produces an expected thrift update settings configuration
       from a Pystachio update object.
    """

    config = UpdaterConfig(
      UpdateConfig(
        update_strategy=self.UPDATE_STRATEGIES(
          PystachioVariableBatchUpdateStrategy(batch_sizes=[1, 2, 3, 4]))))

    thrift_update_config = config.to_thrift_update_settings()

    update_settings = copy.deepcopy(self.EXPECTED_JOB_UPDATE_SETTINGS)

    update_settings.updateStrategy = JobUpdateStrategy(
      batchStrategy=None,
      queueStrategy=None,
      varBatchStrategy=VariableBatchJobUpdateStrategy(groupSizes=(1, 2, 3, 4)))

    assert thrift_update_config == update_settings
Пример #12
0
    def test_batch_size_and_update_strategy(self):
        """Test setting a batch size along with an update strategy.
       This combination should result in a fast fail.
    """

        with raises(ValueError) as e:
            UpdaterConfig(
                UpdateConfig(batch_size=2,
                             update_strategy=self.UPDATE_STRATEGIES(
                                 PystachioBatchUpdateStrategy(batch_size=3))))

        assert ('Ambiguous update configuration. Cannot combine '
                'update strategy with batch size. Please set batch'
                'size inside of update strategy instead.' in e.value.message)
Пример #13
0
    def test_wait_for_batch_completion_and_update_strategy(self):
        """Test setting wait_for_batch_completion along with an update strategy.
       This combination should result in a fast fail.
    """

        with raises(ValueError) as e:
            UpdaterConfig(
                UpdateConfig(wait_for_batch_completion=True,
                             update_strategy=self.UPDATE_STRATEGIES(
                                 PystachioBatchUpdateStrategy(batch_size=3))))

        assert ('Ambiguous update configuration. Cannot combine '
                'wait_batch_completion with an '
                'explicit update strategy.' in e.value.message)
Пример #14
0
 def test_none_list(self):
     """Test None list produces None result."""
     assert UpdaterConfig.instances_to_ranges(
         None) is None, "Result must be None."
Пример #15
0
 def test_one_element(self):
     """Test one ID in the list."""
     ranges = [repr(e) for e in UpdaterConfig.instances_to_ranges([1])]
     assert 1 == len(ranges), "Wrong number of ranges:%s" % len(ranges)
     assert repr(Range(first=1, last=1)) in ranges, "Missing range [1,1]"
Пример #16
0
 def test_pulse_interval_secs(self):
     config = UpdaterConfig(1, 1, 1, 1, pulse_interval_secs=60)
     assert 60000 == config.to_thrift_update_settings().blockIfNoPulsesAfterMs
Пример #17
0
 def test_pulse_interval_unset(self):
     config = UpdaterConfig(1, 1, 1, 1)
     assert config.to_thrift_update_settings().blockIfNoPulsesAfterMs is None
Пример #18
0
 def test_empty_list(self):
     """Test empty list produces None result."""
     assert UpdaterConfig.instances_to_ranges(
         []) is None, "Result must be None."
Пример #19
0
 def test_one_element(self):
   """Test one ID in the list."""
   ranges = [repr(e) for e in UpdaterConfig.instances_to_ranges([1])]
   assert 1 == len(ranges), "Wrong number of ranges:%s" % len(ranges)
   assert repr(Range(first=1, last=1)) in ranges, "Missing range [1,1]"
 def test_pulse_interval_secs(self):
     config = UpdaterConfig(1, 1, 1, 1, 1, pulse_interval_secs=60)
     assert 60000 == config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs
 def test_pulse_interval_too_low(self):
     threshold = UpdaterConfig.MIN_PULSE_INTERVAL_SECONDS
     with raises(ValueError) as e:
         UpdaterConfig(1, 1, 1, 1, 1, pulse_interval_secs=threshold - 1)
     assert 'Pulse interval seconds must be at least %s seconds.' % threshold in e.value.message
 def test_pulse_interval_unset(self):
     config = UpdaterConfig(1, 1, 1, 1, 1)
     assert config.to_thrift_update_settings(
     ).blockIfNoPulsesAfterMs is None
Пример #23
0
 def test_none_list(self):
   """Test None list produces None result."""
   assert UpdaterConfig.instances_to_ranges(None) is None, "Result must be None."
Пример #24
0
 def test_empty_list(self):
   """Test empty list produces None result."""
   assert UpdaterConfig.instances_to_ranges([]) is None, "Result must be None."