def test_update_values_negative(self, mock1, mock2): blue_angel_offers = cloudomate_controller.options( self.providers["blueangelhost"]) self.qtable.self_state = VPSState("blueangelhost", blue_angel_offers[0].name) self.qtable.init_qtable_and_environment(self.providers) self.qtable.init_alpha_and_beta() qtable_copy = copy.deepcopy(self.qtable.qtable) vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[1] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() provider_offer_ID_other = str( self.providers.keys()[0]).lower() + "_" + str( vps_options_list[1].name).lower() self.qtable.update_qtable([], provider_offer_ID_other, False) assert (qtable_copy != self.qtable.qtable) assert (qtable_copy[provider_offer_ID_other][provider_offer_ID_other] > self.qtable.qtable[provider_offer_ID_other] [provider_offer_ID_other]) assert (round( self.qtable.qtable[provider_offer_ID_other][provider_offer_ID], 2) == -0.32)
def test_update_environment_negative(self, mock1, mock2): blue_angel_offers = cloudomate_controller.options( self.providers["blueangelhost"]) self.qtable.self_state = VPSState("blueangelhost", blue_angel_offers[0].name) self.qtable.init_qtable_and_environment(self.providers) environment_copy = copy.deepcopy(self.qtable.environment) vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() provider_offer_ID_other = str( self.providers.keys()[0]).lower() + "_" + str( vps_options_list[1].name).lower() self.qtable.update_environment(provider_offer_ID, False, 0) assert (environment_copy != self.qtable.environment) assert (environment_copy[provider_offer_ID][provider_offer_ID] > self.qtable.environment[provider_offer_ID][provider_offer_ID]) assert (environment_copy[provider_offer_ID][provider_offer_ID_other] == self.qtable.environment[provider_offer_ID] [provider_offer_ID_other]) assert (self.qtable.environment[provider_offer_ID][provider_offer_ID] == -0.4)
def test_options(self): self.provider = blueAngel.BlueAngelHost.get_options blueAngel.BlueAngelHost.get_options = MagicMock() cloudomate.options(blueAngel.BlueAngelHost) blueAngel.BlueAngelHost.get_options.assert_called_once() blueAngel.BlueAngelHost.get_options = self.provider
def test_options(self): self.provider = linevast.LineVast.get_options linevast.LineVast.get_options = MagicMock() cloudomate.options(linevast.LineVast) linevast.LineVast.get_options.assert_called_once() linevast.LineVast.get_options = self.provider
def choose_k_option(self, providers, num): candidate = { "option": {}, "option_name": "", "provider_name": "", "score": -self.INFINITY, "price": self.INFINITY, "currency": "USD" } score = self.get_kth_score(providers, num) for i, offer_name in enumerate(self.qtable): if self.qtable[self.get_ID_from_state( )][offer_name] == score and self.find_provider( offer_name) in providers: candidate["score"] = self.qtable[ self.get_ID_from_state()][offer_name] provider = self.find_provider(offer_name) candidate["provider_name"] = provider candidate["option_name"] = self.find_offer( offer_name, provider) # TODO: Handle an edge case when cloudomate fails and options returns an empty array options = cloudomate_controller.options( providers[candidate["provider_name"]]) for i, option in enumerate(options): if option.name == candidate["option_name"]: candidate["option"] = option candidate["price"] = option.price return candidate
def init_providers_offers(self, providers): for i, id in enumerate(providers): options = cloudomate_controller.options(providers[id]) for i, option in enumerate(options): element = ProviderOffer( provider_name=providers[id].get_metadata()[0], name=str(option.name), bandwidth=option.bandwidth, price=option.price, memory=option.memory) self.providers_offers.append(element)
def test_kth_score(self, mock1, mock2): self.qtable.init_qtable_and_environment(self.providers) self.qtable.set_self_state(VPSState("blueangelhost", "Advanced")) self.qtable.init_alpha_and_beta() vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() self.qtable.update_qtable([], provider_offer_ID, True, 0) assert (self.qtable.get_kth_score(self.providers, 1) == 0)
def test_init_alphatable(self, mock1, mock2): blue_angel_offers = cloudomate_controller.options( self.providers["blueangelhost"]) self.qtable.self_state = VPSState("blueangelhost", blue_angel_offers[0].name) self.qtable.init_qtable_and_environment(self.providers) self.qtable.init_alpha_and_beta() vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() provider_offer_ID_other = str( self.providers.keys()[0]).lower() + "_" + str( vps_options_list[1].name).lower() assert (self.qtable.alphatable[provider_offer_ID_other] [provider_offer_ID] == 0.8) assert (self.qtable.betatable[provider_offer_ID_other] [provider_offer_ID] == 0.2) assert (self.qtable.number_of_updates[provider_offer_ID_other] [provider_offer_ID] == 0)
def test_update_values_positive(self, mock1, mock2): blue_angel_offers = cloudomate_controller.options( self.providers["blueangelhost"]) self.qtable.self_state = VPSState("blueangelhost", blue_angel_offers[0].name) self.qtable.init_qtable_and_environment(self.providers) qtable_copy = copy.deepcopy(self.qtable.qtable) vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() provider_offer_ID_other = str( self.providers.keys()[0]).lower() + "_" + str( vps_options_list[1].name).lower() self.qtable.update_values(provider_offer_ID, True) assert (qtable_copy != self.qtable.qtable) assert (qtable_copy[provider_offer_ID_other][provider_offer_ID] < self.qtable.qtable[provider_offer_ID_other][provider_offer_ID]) assert (round( self.qtable.qtable[provider_offer_ID_other][provider_offer_ID], 7) == 0.0020125)
def test_choose_k_option(self, mock1, mock2): self.qtable.init_qtable_and_environment(self.providers) self.qtable.set_self_state(VPSState("blueangelhost", "Advanced")) self.qtable.init_alpha_and_beta() vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() self.qtable.update_qtable([], provider_offer_ID, True, 0) option = self.qtable.choose_k_option(self.providers, 0) assert (option["option_name"] == "Advanced") assert (option["price"] == 100.0)
def test_update_qtable_from_remote_qtable(self, mock1, mock2): blue_angel_offers = cloudomate_controller.options( self.providers["blueangelhost"]) self.qtable.self_state = VPSState("blueangelhost", blue_angel_offers[0].name) self.qtable.init_qtable_and_environment(self.providers) self.qtable.init_alpha_and_beta() qtable2 = QTable() qtable2.self_state = VPSState("blueangelhost", blue_angel_offers[1].name) qtable2.init_qtable_and_environment(self.providers) qtable2.init_alpha_and_beta() vps_options_list = cloudomate_controller.options(self.providers) vps_option = vps_options_list[0] provider_offer_ID = str(self.providers.keys()[0]).lower() + "_" + str( vps_option.name).lower() provider_offer_ID_other = str( self.providers.keys()[0]).lower() + "_" + str( vps_options_list[1].name).lower() self.qtable.update_qtable([], provider_offer_ID_other, True, 0.5) self.qtable.set_self_state( VPSState("blueangelhost", blue_angel_offers[1].name)) qtable2.update_qtable([], provider_offer_ID_other, True, 0.6) qtable2.set_self_state( VPSState("blueangelhost", blue_angel_offers[1].name)) self.qtable.update_qtable([qtable2.qtable], provider_offer_ID, True, 0.3) assert (qtable2.qtable != self.qtable.qtable) assert (qtable2.qtable[provider_offer_ID_other][provider_offer_ID] < self.qtable.qtable[provider_offer_ID_other][provider_offer_ID])