Beispiel #1
0
class TestGenericController(unittest.TestCase):
    def setUp(self):
        self.app_id_0 = "app-00"
        self.scaling_parameters = {}
        self.parameters = {}

        self.instance_1 = "instance-1"
        self.instance_2 = "instance-2"
        self.instances = [self.instance_1, self.instance_2]

        self.bigsea_username = "******"
        self.bigsea_password = "******"

        self.check_interval = 2
        self.trigger_down = 10
        self.trigger_up = 100
        self.min_cap = 10
        self.max_cap = 100
        self.actuation_size = 20
        self.metric_rounding = 2
        self.actuator = "nop"
        self.metric_source = "nop"

        self.scaling_parameters["instances"] = self.instances
        self.scaling_parameters["check_interval"] = self.check_interval
        self.scaling_parameters["trigger_down"] = self.trigger_down
        self.scaling_parameters["trigger_up"] = self.trigger_up
        self.scaling_parameters["min_cap"] = self.min_cap
        self.scaling_parameters["max_cap"] = self.max_cap
        self.scaling_parameters["actuation_size"] = self.actuation_size
        self.scaling_parameters["metric_rounding"] = self.metric_rounding
        self.scaling_parameters["actuator"] = self.actuator
        self.scaling_parameters["metric_source"] = self.metric_source

        self.parameters = {
            "scaling_parameters": self.scaling_parameters,
            "bigsea_username": self.bigsea_username,
            "bigsea_password": self.bigsea_password
        }

        self.controller = GenericController(self.app_id_0,
                                            self.scaling_parameters)

    def test_start_and_stop_scaling(self):
        self.controller.alarm.check_application_state = MagicMock(
            return_value=None)

        controller_thread = threading.Thread(
            target=self.controller.start_application_scaling)
        controller_thread.start()

        time.sleep(float(2 * self.check_interval))

        self.controller.alarm.check_application_state.assert_any_call()

        self.controller.stop_application_scaling()
Beispiel #2
0
    def get_controller(self, name, app_id, plugin_info):
        if name == "basic":
            metric_source_type = plugin_info["policy"]["metric_source"]
            actuator_type = plugin_info["policy"]["actuator"]

            metric_source = MetricSourceBuilder().get_metric_source(
                metric_source_type)

            actuator = ActuatorBuilder().get_actuator(actuator_type)

            return BasicController(metric_source, actuator, plugin_info)

        elif name == "single":
            return SingleApplicationController(app_id, plugin_info)

        elif name == "progress_error":
            return GenericController(app_id, plugin_info)

        elif name == "proportional":
            return ProportionalController(app_id, plugin_info)

        elif name == "proportional_derivative":
            return ProportionalDerivativeController(app_id, plugin_info)

        elif name == "pid":
            return PIDController(app_id, plugin_info)

        elif name == "progress_tendency":
            return TendencyAwareProportionalController(app_id, plugin_info)

        else:
            # FIXME: exception type
            raise Exception("Unknown controller type")
Beispiel #3
0
    def setUp(self):
        self.app_id_0 = "app-00"
        self.scaling_parameters = {}
        self.parameters = {}

        self.instance_1 = "instance-1"
        self.instance_2 = "instance-2"
        self.instances = [self.instance_1, self.instance_2]

        self.bigsea_username = "******"
        self.bigsea_password = "******"

        self.check_interval = 2
        self.trigger_down = 10
        self.trigger_up = 100
        self.min_cap = 10
        self.max_cap = 100
        self.actuation_size = 20
        self.metric_rounding = 2
        self.actuator = "nop"
        self.metric_source = "nop"

        self.scaling_parameters["instances"] = self.instances
        self.scaling_parameters["check_interval"] = self.check_interval
        self.scaling_parameters["trigger_down"] = self.trigger_down
        self.scaling_parameters["trigger_up"] = self.trigger_up
        self.scaling_parameters["min_cap"] = self.min_cap
        self.scaling_parameters["max_cap"] = self.max_cap
        self.scaling_parameters["actuation_size"] = self.actuation_size
        self.scaling_parameters["metric_rounding"] = self.metric_rounding
        self.scaling_parameters["actuator"] = self.actuator
        self.scaling_parameters["metric_source"] = self.metric_source

        self.parameters = {
            "scaling_parameters": self.scaling_parameters,
            "bigsea_username": self.bigsea_username,
            "bigsea_password": self.bigsea_password
        }

        self.controller = GenericController(self.app_id_0,
                                            self.scaling_parameters)