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_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_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) self.mock_get.return_value = config_param_mgr self.mock_configuration_update.side_effect = self.exceptions.trove 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.assert_mock_multiple_calls_with_same_arguments( self.mock_get, 11, mock.call(test.IsHttpRequest(), config.id)) self.mock_configuration_update.assert_called_once_with( test.IsHttpRequest(), config.id, config_param_mgr.to_json()) if django.VERSION >= (1, 9): url = settings.TESTSERVER + url self.assertRedirectsNoFollow(res, url) self.assertEqual(res.status_code, 302)
def setUp(self): super(ConfigurationTest, self).setUp() self.orig__init = configurations.Configuration.__init__ configurations.Configuration.__init__ = mock.Mock(return_value=None) self.configuration = configurations.Configuration()
def get_configurations_c_123(self): return configurations.Configuration(None, self.fake_config[0])
def data(TEST): cluster1 = clusters.Cluster(clusters.Clusters(None), CLUSTER_DATA_ONE) cluster2 = clusters.Cluster(clusters.Clusters(None), CLUSTER_DATA_TWO) database1 = instances.Instance(instances.Instances(None), DATABASE_DATA_ONE) database2 = instances.Instance(instances.Instances(None), DATABASE_DATA_TWO) database3 = instances.Instance(instances.Instances(None), DATABASE_DATA_THREE) bkup1 = backups.Backup(backups.Backups(None), BACKUP_ONE) bkup2 = backups.Backup(backups.Backups(None), BACKUP_TWO) bkup3 = backups.Backup(backups.Backups(None), BACKUP_TWO_INC) cfg1 = configurations.Configuration(configurations.Configurations(None), CONFIG_ONE) cfg2 = configurations.Configuration(configurations.Configurations(None), CONFIG_TWO) user1 = users.User(users.Users(None), USER_ONE) user_db1 = databases.Database(databases.Databases(None), USER_DB_ONE) user_root1 = databases.Database(databases.Databases(None), USER_ROOT_ONE) datastore1 = datastores.Datastore(datastores.Datastores(None), DATASTORE_ONE) version1 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_ONE) version2 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_TWO) flavor1 = flavors.Flavor(flavors.Flavors(None), FLAVOR_ONE) flavor2 = flavors.Flavor(flavors.Flavors(None), FLAVOR_TWO) flavor3 = flavors.Flavor(flavors.Flavors(None), FLAVOR_THREE) datastore_mongodb = datastores.Datastore(datastores.Datastores(None), DATASTORE_MONGODB) version_mongodb_2_6 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_MONGODB_2_6) datastore_redis = datastores.Datastore(datastores.Datastores(None), DATASTORE_REDIS) version_redis_3_0 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_REDIS_3_0) datastore_vertica = datastores.Datastore(datastores.Datastores(None), DATASTORE_VERTICA) version_vertica_7_1 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_VERTICA_7_1) log1 = instances.DatastoreLog(instances.Instances(None), LOG_1) log2 = instances.DatastoreLog(instances.Instances(None), LOG_2) log3 = instances.DatastoreLog(instances.Instances(None), LOG_3) log4 = instances.DatastoreLog(instances.Instances(None), LOG_4) TEST.trove_clusters = utils.TestDataContainer() TEST.trove_clusters.add(cluster1) TEST.trove_clusters.add(cluster2) TEST.databases = utils.TestDataContainer() TEST.database_backups = utils.TestDataContainer() TEST.database_configurations = utils.TestDataContainer() TEST.database_users = utils.TestDataContainer() TEST.database_user_dbs = utils.TestDataContainer() TEST.database_user_roots = utils.TestDataContainer() TEST.database_flavors = utils.TestDataContainer() TEST.databases.add(database1) TEST.databases.add(database2) TEST.databases.add(database3) TEST.database_backups.add(bkup1) TEST.database_backups.add(bkup2) TEST.database_backups.add(bkup3) TEST.database_configurations.add(cfg1) TEST.database_configurations.add(cfg2) TEST.configuration_parameters = utils.TestDataContainer() for parameter in CONFIG_PARAMS_ONE: TEST.configuration_parameters.add( configurations.ConfigurationParameter( configurations.ConfigurationParameters(None), parameter)) TEST.configuration_instances = utils.TestDataContainer() TEST.configuration_instances.add( configurations.Configuration(configurations.Configurations(None), CONFIG_INSTANCE_ONE)) TEST.database_users.add(user1) TEST.database_user_dbs.add(user_db1) TEST.database_user_roots.add(user_root1) TEST.datastores = utils.TestDataContainer() TEST.datastores.add(datastore_mongodb) TEST.datastores.add(datastore_redis) TEST.datastores.add(datastore_vertica) TEST.datastores.add(datastore1) TEST.database_flavors.add(flavor1, flavor2, flavor3) TEST.datastore_versions = utils.TestDataContainer() TEST.datastore_versions.add(version_vertica_7_1) TEST.datastore_versions.add(version_redis_3_0) TEST.datastore_versions.add(version_mongodb_2_6) TEST.datastore_versions.add(version1) TEST.datastore_versions.add(version2) TEST.logs = utils.TestDataContainer() TEST.logs.add(log1, log2, log3, log4)