def test_values_tab_discard_action(self): config = self.database_configurations.first() api.trove.configuration_get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # get the state of the configuration before discard action changed_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) res = self.client.post(url, {'action': u"values__discard_changes"}) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url) # get the state of the configuration after discard action restored_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) self.assertTrue( config_param_manager.dict_has_changes( changed_configuration_values, restored_configuration_values))
def test_instances_tab_exception(self): try: config = self.database_configurations.first() # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager( config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) api.trove.configuration_instances(IsA(http.HttpRequest), config.id) \ .AndRaise(self.exceptions.trove) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__instance' res = self.client.get(url) table_data = res.context['instances_table'].data self.assertNotEqual(len(self.configuration_instances.list()), len(table_data)) self.assertTemplateUsed( res, 'project/database_configurations/details.html') finally: config_param_manager.delete(config.id)
def test_values_tab_apply_action_exception(self): config = copy.deepcopy(self.database_configurations.first()) # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager( config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) api.trove.configuration_update( IsA(http.HttpRequest), config.id, config_param_mgr.to_json())\ .AndRaise(self.exceptions.trove) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # apply changes res = self.client.post(url, {'action': u"values__apply_changes"}) self.assertRedirectsNoFollow(res, url) self.assertEqual(res.status_code, 302)
def update_cell(self, request, datum, name, cell_name, new_cell_value): config_param = datum config = config_param_manager.get(request, config_param.configuration_id) validation_param = config_param_manager.find_parameter( name, self.parameters(request, config.configuration.datastore_name, config.configuration.datastore_version_name)) if validation_param: error_msg = config_param_manager.validate_config_param_value( validation_param, new_cell_value) if error_msg: raise core_exceptions.ValidationError(error_msg) if isinstance(config_param.value, types.IntType): value = int(new_cell_value) elif isinstance(config_param.value, types.LongType): value = long(new_cell_value) else: value = new_cell_value setattr(datum, cell_name, value) (config_param_manager.get(request, config_param.configuration_id).update_param( name, value)) return True
def test_values_tab_discard_action(self): config = self.database_configurations.first() api.trove.configuration_get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # get the state of the configuration before discard action changed_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) res = self.client.post(url, {'action': u"values__discard_changes"}) self.assertRedirectsNoFollow(res, url) # get the state of the configuration after discard action restored_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) self.assertTrue(config_param_manager.dict_has_changes( changed_configuration_values, restored_configuration_values))
def test_values_tab_apply_action_exception(self): config = copy.deepcopy(self.database_configurations.first()) # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager(config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) api.trove.configuration_update( IsA(http.HttpRequest), config.id, config_param_mgr.to_json())\ .AndRaise(self.exceptions.trove) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # apply changes res = self.client.post(url, {'action': u"values__apply_changes"}) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url) self.assertEqual(res.status_code, 302)
def test_values_tab_discard_action(self): config = self.database_configurations.first() self.mock_configuration_get.return_value = config details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # get the state of the configuration before discard action changed_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) res = self.client.post(url, {'action': u"values__discard_changes"}) self.mock_configuration_get.assert_called_once_with( test.IsHttpRequest(), config.id) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url) # get the state of the configuration after discard action restored_configuration_values = \ dict.copy(config_param_manager.get(self.request, config.id) .get_configuration().values) self.assertTrue( config_param_manager.dict_has_changes( changed_configuration_values, restored_configuration_values))
def handle(self, table, request, obj_ids): configuration_id = table.kwargs['configuration_id'] if config_param_manager.get(request, configuration_id).has_changes(): try: api.trove.configuration_update( request, configuration_id, config_param_manager.get(request, configuration_id).to_json()) messages.success(request, _('Applied changes to server')) except Exception: messages.error(request, _('Error applying changes')) finally: config_param_manager.delete(configuration_id) return shortcuts.redirect(request.build_absolute_uri())
def handle(self, table, request, obj_ids): configuration_id = table.kwargs['configuration_id'] if config_param_manager.get(request, configuration_id).has_changes(): try: api.trove.configuration_update( request, configuration_id, config_param_manager.get( request, configuration_id).to_json()) messages.success(request, _('Applied changes to server')) except Exception: messages.error(request, _('Error applying changes')) finally: config_param_manager.delete(configuration_id) return shortcuts.redirect(request.build_absolute_uri())
def test_values_tab_apply_action(self): # NOTE(zhaochao): we cannot use copy.deepcopy() under Python 3, # because of the lazy-loading feature of the troveclient Resource # objects. copy.deepcopy will use hasattr to search for the # '__setstate__' attribute of the resource object. As the resource # object is lazy loading, searching attributes relys on the 'is_load' # property, unfortunately this property is also not loaded at the # moment, then we're getting in an infinite loop there. Python will # raise RuntimeError saying "maximum recursion depth exceeded", this is # ignored under Python 2.x, but reraised under Python 3 by hasattr(). # # Temporarily importing troveclient and reconstructing a configuration # object from the original config object's dict info will make this # case (and the next) working under Python 3. original_config = self.database_configurations.first() from troveclient.v1 import configurations config = configurations.Configuration( configurations.Configurations(None), original_config.to_dict()) # Making sure the newly constructed config object is the same as # the original one. self.assertEqual(config, original_config) # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager(config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) api.trove.configuration_update( IsA(http.HttpRequest), config.id, config_param_mgr.to_json()) \ .AndReturn(None) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # apply changes res = self.client.post(url, {'action': u"values__apply_changes"}) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url)
def test_add_parameter_invalid_value(self): try: config = self.database_configurations.first() # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager( config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) (config_param_manager.get( IsA(http.HttpRequest), IsA(six.string_types)).MultipleTimes().AndReturn( config_param_mgr)) (api.trove.configuration_parameters_list( IsA(http.HttpRequest), IsA(six.string_types), IsA(six.string_types)).MultipleTimes().AndReturn( self.configuration_parameters.list())) name = self.configuration_parameters.first().name value = "non-numeric" self.mox.ReplayAll() post = {'method': 'AddParameterForm', 'name': name, 'value': value} res = self.client.post(self._get_url_with_arg(ADD_URL, config.id), post) self.assertFormError(res, "form", 'value', ['Value must be a number.']) finally: config_param_manager.delete(config.id)
def update_cell(self, request, datum, name, cell_name, new_cell_value): config_param = datum config = config_param_manager.get(request, config_param.configuration_id) validation_param = config_param_manager.find_parameter( name, self.parameters(request, config.configuration.datastore_name, config.configuration.datastore_version_name)) if validation_param: error_msg = config_param_manager.validate_config_param_value( validation_param, new_cell_value) if error_msg: raise core_exceptions.ValidationError(error_msg) if isinstance(config_param.value, types.IntType): value = int(new_cell_value) elif isinstance(config_param.value, types.LongType): value = long(new_cell_value) else: value = new_cell_value setattr(datum, cell_name, value) (config_param_manager .get(request, config_param.configuration_id) .update_param(name, value)) return True
def get_values_data(self): values_data = [] manager = config_param_manager.get( self.request, self.tab_group.kwargs['configuration_id']) for k, v in manager.get_configuration().values.items(): manager.add_param(k, v) values_data.append(manager.create_config_value(k, v)) return values_data
def get_data(self): try: configuration_id = self.kwargs['configuration_id'] return (config_param_manager.get( self.request, configuration_id).configuration_get(self.request)) except Exception: redirect = reverse('horizon:project:database_configurations:index') msg = _('Unable to retrieve details for configuration ' 'group: %s') % configuration_id exceptions.handle(self.request, msg, redirect=redirect)
def handle(self, table, request, obj_ids): configuration_id = table.kwargs['configuration_id'] if config_param_manager.get(request, configuration_id).has_changes(): try: config_param_manager.delete(configuration_id) messages.success(request, _('Reset Parameters')) except Exception as ex: messages.error(request, _('Error resetting parameters: %s') % ex) return shortcuts.redirect(request.build_absolute_uri())
def handle(self, table, request, obj_ids): configuration_id = table.kwargs['configuration_id'] if config_param_manager.get(request, configuration_id).has_changes(): try: config_param_manager.delete(configuration_id) messages.success(request, _('Reset Parameters')) except Exception as ex: messages.error( request, _('Error resetting parameters: %s') % ex.message) return shortcuts.redirect(request.build_absolute_uri())
def __init__(self, request, *args, **kwargs): super(AddParameterForm, self).__init__(request, *args, **kwargs) configuration = (config_param_manager.get( request, kwargs["initial"]["configuration_id"]).get_configuration()) self.fields['name'].choices = self.get_parameters( request, configuration.datastore_name, configuration.datastore_version_name) self.fields['value'].parameters = self.parameters
def test_values_tab_apply_action_exception(self): # NOTE(zhaochao) Please refer to the comment at the beginning of the # 'test_values_tab_apply_action' about not using copy.deepcopy() for # details. original_config = self.database_configurations.first() from troveclient.v1 import configurations config = configurations.Configuration( configurations.Configurations(None), original_config.to_dict()) # Making sure the newly constructed config object is the same as # the original one. self.assertEqual(config, original_config) # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager(config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) api.trove.configuration_update( IsA(http.HttpRequest), config.id, config_param_mgr.to_json())\ .AndRaise(self.exceptions.trove) self.mox.ReplayAll() details_url = self._get_url_with_arg(DETAIL_URL, config.id) url = details_url + '?tab=configuration_details__value' self._test_create_altered_config_params(config, url) # apply changes res = self.client.post(url, {'action': u"values__apply_changes"}) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url) self.assertEqual(res.status_code, 302)
def test_add_parameter_invalid_value(self): try: config = self.database_configurations.first() # setup the configuration parameter manager config_param_mgr = config_param_manager.ConfigParamManager( config.id) config_param_mgr.configuration = config config_param_mgr.original_configuration_values = \ dict.copy(config.values) config_param_manager.get(IsA(http.HttpRequest), config.id) \ .MultipleTimes().AndReturn(config_param_mgr) ds = self._get_test_datastore('mysql') dsv = self._get_test_datastore_version(ds.id, '5.5') api.trove.configuration_parameters_list( IsA(http.HttpRequest), ds.name, dsv.name) \ .AndReturn(self.configuration_parameters.list()) name = self.configuration_parameters.first().name value = "non-numeric" self.mox.ReplayAll() post = { 'method': 'AddParameterForm', 'name': name, 'value': value} res = self.client.post(self._get_url_with_arg(ADD_URL, config.id), post) self.assertFormError(res, "form", 'value', ['Value must be a number.']) finally: config_param_manager.delete(config.id)
def handle(self, request, data): try: (config_param_manager.get( request, self.initial["configuration_id"]).add_param( data["name"], config_param_manager.adjust_type( config_param_manager.find_parameter( data["name"], self.parameters).type, data["value"]))) new_values = config_param_manager.get( request, self.initial["configuration_id"], use_cache=True).to_json() api.trove.configuration_update(request, self.initial["configuration_id"], new_values) messages.success(request, _('Successfully added parameter')) except Exception: redirect = reverse("horizon:project:database_configurations:index") exceptions.handle(request, _('Unable to add new parameter.'), redirect=redirect) return True
def handle(self, request, data): try: (config_param_manager.get( request, self.initial["configuration_id"]).add_param( data["name"], config_param_manager.adjust_type( config_param_manager.find_parameter( data["name"], self.parameters).type, data["value"]))) messages.success(request, _('Successfully added parameter')) except Exception as e: redirect = reverse("horizon:project:database_configurations:index") exceptions.handle(request, _('Unable to add new parameter: %s') % e.message, redirect=redirect) return True
def get_data(self, request, name): return config_param_manager.get( request, self.table.kwargs["configuration_id"]).get_param(name)
def delete(self, request, obj_ids): configuration_id = self.table.kwargs['configuration_id'] (config_param_manager.get(request, configuration_id).delete_param(obj_ids))