コード例 #1
0
ファイル: test_sensor.py プロジェクト: lelou6666/epu
    def test_basic(self):
        control = MockControl()
        state = control.get_state()

        minimum_n = 1
        maximum_n = 3
        metric = 'fake'
        sample_function = Statistics.AVERAGE
        scale_up_threshold = 2.0
        scale_down_threshold = 0.5
        scale_up_n_vms = 1
        scale_down_n_vms = 1
        config = self._get_config(minimum_n, maximum_n, metric, sample_function,
                scale_up_threshold, scale_up_n_vms, scale_down_threshold,
                scale_down_n_vms, "dt1")

        sensor_series_up = [1, 3, 5]
        sensor_average_up = sum(sensor_series_up) / len(sensor_series_up)
        sensor_data_up = {metric: {Statistics.SERIES: sensor_series_up, Statistics.AVERAGE: sensor_average_up}}

        sensor_series_down = [0, 1, 0]
        sensor_average_down = float(sum(sensor_series_down)) / len(sensor_series_down)
        sensor_data_down = {metric: {Statistics.SERIES: sensor_series_down, Statistics.AVERAGE: sensor_average_down}}

        de = SensorEngine()
        de.initialize(control, state, config)

        de.decide(control, state)
        self.assertEqual(control._launch_calls, 1)
        state = control.get_state()

        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, 2)

        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, 3)

        # We should see this stay at 3, since we hit max_instances
        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, 3)

        # Now, change the sensor data to scale us down
        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, 3)
        self.assertEqual(control._destroy_calls, 1)

        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._destroy_calls, 2)

        # We are now at min, so we shouldn't see any more scaling
        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._destroy_calls, 2)
コード例 #2
0
ファイル: test_multi_site.py プロジェクト: oldpatricka/epu
    def test_basic_sensor(self):
        control = MockControl()
        state = MockState()

        minimum_vms = 4
        maximum_vms = 6
        metric = "something"
        sample_function = "Average"
        scale_up_threshold = 2
        scale_down_threshold = 0.5
        scale_up_n_vms = 1
        scale_down_n_vms = 1
        cooldown_period = 0
        cloud = make_cloud_conf('hotel', maximum_vms, 1)
        conf = make_sensor_conf([cloud, ], minimum_vms, maximum_vms, metric,
                sample_function, scale_up_threshold, scale_up_n_vms,
                scale_down_threshold, scale_down_n_vms, 'testdt', 'm1.small',
                cooldown_period)

        sensor_series_up = [1, 3, 5]
        sensor_average_up = sum(sensor_series_up) / len(sensor_series_up)
        sensor_data_up = {metric: {Statistics.SERIES: sensor_series_up, Statistics.AVERAGE: sensor_average_up}}

        sensor_series_down = [0, 1, 0]
        sensor_average_down = float(sum(sensor_series_down)) / len(sensor_series_down)
        sensor_data_down = {metric: {Statistics.SERIES: sensor_series_down, Statistics.AVERAGE: sensor_average_down}}

        de = PhantomMultiSiteOverflowEngine()
        de.initialize(control, state, conf)

        # after a start, we should see the DE start the minimum number of VMs
        state = control.get_state()
        de.decide(control, state)

        self.assertEqual(control._launch_calls, minimum_vms)
        previous_launch_calls = control._launch_calls

        # Now we add some sensor data, and we should see a scale up until we get to max VMs (n=5)
        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, previous_launch_calls + scale_up_n_vms)
        previous_launch_calls = control._launch_calls

        # We should see one more (n=6)
        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, previous_launch_calls + scale_up_n_vms)

        # Now we should be at max vms, and see no more starts
        control.set_instance_sensor_data(sensor_data_up)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, maximum_vms)

        # Now we scale down with some vms die
        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, maximum_vms)
        self.assertEqual(control._destroy_calls, 1)

        # and another one
        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls, maximum_vms)
        self.assertEqual(control._destroy_calls, 2)

        # and we should now be at minimum vms
        control.set_instance_sensor_data(sensor_data_down)
        state = control.get_state()

        de.decide(control, state)
        self.assertEqual(control._launch_calls - control._destroy_calls, minimum_vms)