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) self.mock_get.return_value = config_param_mgr self.mock_configuration_parameters_list.return_value = ( self.configuration_parameters.list()) name = self.configuration_parameters.first().name value = "non-numeric" post = {'method': 'AddParameterForm', 'name': name, 'value': value} res = self.client.post(self._get_url_with_arg(ADD_URL, config.id), post) self.assert_mock_multiple_calls_with_same_arguments( self.mock_get, 2, mock.call(test.IsHttpRequest(), test.IsA(str))) self.assert_mock_multiple_calls_with_same_arguments( self.mock_configuration_parameters_list, 2, mock.call(test.IsHttpRequest(), test.IsA(str), test.IsA(str))) self.assertFormError(res, "form", 'value', ['Value must be a number.']) finally: config_param_manager.delete(config.id)
def test_detail_backup(self): self.mock_backup_get.return_value = self.database_backups.first() self.mock_instance_get.return_value = self.databases.first() res = self.client.get(DETAILS_URL) self.mock_backup_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.mock_instance_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.assertTemplateUsed(res, 'project/database_backups/details.html')
def test_log_tab(self): database = self.databases.first() database_id = database.id self.mock_instance_get.return_value = database self.mock_log_list.return_value = self.logs.list() self.mock_flavor_get.return_value = self.flavors.first() self.mock_root_show.return_value = self.database_user_roots.first() detail_url = reverse('horizon:project:databases:detail', args=[database_id]) url = detail_url + '?tab=instance_details__logs_tab' res = self.client.get(url) self.mock_instance_get.assert_called_once_with( test.IsHttpRequest(), test.IsA(six.text_type)) self.mock_log_list.assert_called_once_with( test.IsHttpRequest(), database_id) self.mock_flavor_get.assert_called_once_with( test.IsHttpRequest(), database.flavor["id"]) self.mock_root_show.assert_called_once_with( test.IsHttpRequest(), database.id) table_data = res.context['logs_table'].data self.assertItemsEqual(self.logs.list(), table_data) self.assertTemplateUsed( res, 'horizon/common/_detail_table.html')
def _test_create_test_configuration(self, config_description=u''): self.mock_datastore_list.return_value = self.datastores.list() self.mock_datastore_version_list.return_value = ( self.datastore_versions.list()) self.mock_configuration_create.return_value = ( self.database_configurations.first()) name = u'config1' values = "{}" ds = self._get_test_datastore('mysql') dsv = self._get_test_datastore_version(ds.id, '5.5') config_datastore = ds.name config_datastore_version = dsv.name post = { 'method': 'CreateConfigurationForm', 'name': name, 'description': config_description, 'datastore': (config_datastore + ',' + config_datastore_version)} res = self.client.post(CREATE_URL, post) self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.assert_mock_multiple_calls_with_same_arguments( self.mock_datastore_version_list, 4, mock.call(test.IsHttpRequest(), test.IsA(str))) self.mock_configuration_create.assert_called_once_with( test.IsHttpRequest(), name, values, description=config_description, datastore=config_datastore, datastore_version=config_datastore_version) self.assertNoFormErrors(res) self.assertMessageCount(success=1)
def test_create_test_configuration_exception(self): self.mock_datastore_list.return_value = self.datastores.list() self.mock_datastore_version_list.return_value = ( self.datastore_versions.list()) self.mock_configuration_create.side_effect = self.exceptions.trove name = u'config1' values = "{}" config_description = u'description of config1' ds = self._get_test_datastore('mysql') dsv = self._get_test_datastore_version(ds.id, '5.5') config_datastore = ds.name config_datastore_version = dsv.name post = { 'method': 'CreateConfigurationForm', 'name': name, 'description': config_description, 'datastore': config_datastore + ',' + config_datastore_version } res = self.client.post(CREATE_URL, post) self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.assert_mock_multiple_calls_with_same_arguments( self.mock_datastore_version_list, 4, mock.call(test.IsHttpRequest(), test.IsA(str))) self.mock_configuration_create.assert_called_once_with( test.IsHttpRequest(), name, values, description=config_description, datastore=config_datastore, datastore_version=config_datastore_version) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_detail_backup_notfound(self): self.mock_backup_get.side_effect = self.exceptions.trove res = self.client.get(DETAILS_URL) self.mock_backup_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_view_log(self): CONSOLE_OUTPUT = 'superspecialuniquetext' self.mock_log_tail.return_value = lambda: [CONSOLE_OUTPUT] url = reverse('horizon:project:databases:logs:log_contents', args=('id', 'guest.log')) res = self.client.get(url) self.mock_Connection.assert_called_once_with( None, mock.ANY, None, preauthtoken=mock.ANY, preauthurl=mock.ANY, cacert=None, insecure=False, auth_version="2.0") self.mock_log_tail.assert_called_once_with( test.IsHttpRequest(), test.IsA(six.string_types), 'guest.log', False, LINES, self.mock_Connection()) self.assertNoMessages() self.assertIsInstance(res, http.HttpResponse) self.assertContains(res, CONSOLE_OUTPUT)
def test_detail_backup_incr(self): incr_backup = self.database_backups.list()[2] parent_backup = self.database_backups.list()[1] self.mock_backup_get.side_effect = [incr_backup, parent_backup] self.mock_instance_get.return_value = self.databases.list()[1] url = reverse('horizon:project:database_backups:detail', args=[incr_backup.id]) res = self.client.get(url) self.assertEqual([ mock.call(test.IsHttpRequest(), test.IsA(str)), mock.call(test.IsHttpRequest(), incr_backup.parent_id) ], self.mock_backup_get.call_args_list) self.mock_instance_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.assertTemplateUsed(res, 'project/database_backups/details.html')
def test_create_simple_cluster_neutron(self): self.mock_is_service_enabled.return_value = True self.mock_network_list_for_tenant.return_value = self.networks.list() self.mock_datastore_flavors.return_value = self.flavors.list() filtered_datastores = self._get_filtered_datastores('mongodb') self.mock_datastore_list.return_value = filtered_datastores self.mock_datastore_version_list.return_value = ( self._get_filtered_datastore_versions(filtered_datastores)) self.mock_cluster_create.return_value = self.trove_clusters.first() cluster_name = u'MyCluster' cluster_volume = 1 cluster_flavor = u'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' cluster_instances = 3 cluster_datastore = u'mongodb' cluster_datastore_version = u'2.6' cluster_network = u'82288d84-e0a5-42ac-95be-e6af08727e42' field_name = self._build_flavor_widget_name(cluster_datastore, cluster_datastore_version) post = { 'name': cluster_name, 'volume': cluster_volume, 'num_instances': cluster_instances, 'num_shards': 1, 'datastore': field_name, field_name: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'network': cluster_network, } res = self.client.post(LAUNCH_URL, post) self.mock_is_service_enabled.assert_called_once_with( test.IsHttpRequest(), 'network') self.mock_network_list_for_tenant.assert_called_once_with( test.IsHttpRequest(), '1') self.mock_datastore_flavors.assert_called_once_with( test.IsHttpRequest(), 'mongodb', '2.6') self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.mock_datastore_version_list.assert_called_once_with( test.IsHttpRequest(), test.IsA(str)) self.mock_cluster_create.assert_called_once_with( test.IsHttpRequest(), cluster_name, cluster_volume, cluster_flavor, cluster_instances, datastore=cluster_datastore, datastore_version=cluster_datastore_version, nics=cluster_network, root_password=None, locality=None) self.assertNoFormErrors(res) self.assertMessageCount(success=1)
def test_create_configuration(self): self.mock_datastore_list.return_value = self.datastores.list() self.mock_datastore_version_list.return_value = ( self.datastore_versions.list()) res = self.client.get(CREATE_URL) self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.assert_mock_multiple_calls_with_same_arguments( self.mock_datastore_version_list, 4, mock.call(test.IsHttpRequest(), test.IsA(str))) self.assertTemplateUsed(res, 'project/database_configurations/create.html')
def test_index(self): self.mock_backup_list.return_value = self.database_backups.list() self.mock_instance_get.return_value = self.databases.first() res = self.client.get(INDEX_URL) self.mock_backup_list.assert_called_once_with(test.IsHttpRequest()) self.assert_mock_multiple_calls_with_same_arguments( self.mock_instance_get, 3, mock.call(test.IsHttpRequest(), test.IsA(str))) self.assertTemplateUsed(res, 'project/database_backups/index.html')
def test_details_without_locality(self): cluster = self.trove_clusters.list()[1] self.mock_cluster_get.return_value = cluster self.mock_instance_get.return_value = self.databases.first() self.mock_flavor_get.return_value = self.flavors.first() details_url = reverse('horizon:project:database_clusters:detail', args=[cluster.id]) res = self.client.get(details_url) self.assert_mock_multiple_calls_with_same_arguments( self.mock_cluster_get, 2, mock.call(test.IsHttpRequest(), cluster.id)) self.assert_mock_multiple_calls_with_same_arguments( self.mock_instance_get, 3, mock.call(test.IsHttpRequest(), test.IsA(str))) self.assert_mock_multiple_calls_with_same_arguments( self.mock_flavor_get, 4, mock.call(test.IsHttpRequest(), test.IsA(str))) self.assertTemplateUsed(res, 'horizon/common/_detail.html') self.assertNotContains(res, "Locality")
def test_create_simple_cluster_exception(self): self.mock_network_list_for_tenant.return_value = self.networks.list() self.mock_datastore_flavors.return_value = self.flavors.list() filtered_datastores = self._get_filtered_datastores('mongodb') self.mock_datastore_list.return_value = filtered_datastores self.mock_datastore_version_list.return_value = ( self._get_filtered_datastore_versions(filtered_datastores)) self.mock_cluster_create.side_effect = self.exceptions.trove cluster_name = u'MyCluster' cluster_volume = 1 cluster_flavor = u'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' cluster_instances = 3 cluster_datastore = u'mongodb' cluster_datastore_version = u'2.6' cluster_network = u'' field_name = self._build_flavor_widget_name(cluster_datastore, cluster_datastore_version) post = { 'name': cluster_name, 'volume': cluster_volume, 'num_instances': cluster_instances, 'num_shards': 1, 'datastore': field_name, field_name: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', } res = self.client.post(LAUNCH_URL, post) self.mock_network_list_for_tenant.assert_called_once_with( test.IsHttpRequest(), '1') self.mock_datastore_flavors.assert_called_once_with( test.IsHttpRequest(), 'mongodb', '2.6') self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.mock_datastore_version_list.assert_called_once_with( test.IsHttpRequest(), test.IsA(str)) self.mock_cluster_create.assert_called_once_with( test.IsHttpRequest(), cluster_name, cluster_volume, cluster_flavor, cluster_instances, datastore=cluster_datastore, datastore_version=cluster_datastore_version, nics=cluster_network, root_password=None, locality=None) self.assertRedirectsNoFollow(res, INDEX_URL) self.assertMessageCount(error=1)
def launch_cluster_fields_setup(self, datastore, datastore_version): self.mock_is_service_enabled.return_value = False self.mock_datastore_flavors.return_value = self.flavors.list() filtered_datastores = self._get_filtered_datastores(datastore) self.mock_datastore_list.return_value = filtered_datastores self.mock_datastore_version_list.return_value = ( self._get_filtered_datastore_versions(filtered_datastores)) res = self.client.get(LAUNCH_URL) self.mock_is_service_enabled.assert_called_once_with( test.IsHttpRequest(), 'network') self.mock_datastore_flavors.assert_called_once_with( test.IsHttpRequest(), datastore, datastore_version) self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.mock_datastore_version_list.assert_called_once_with( test.IsHttpRequest(), test.IsA(str)) return res.context_data['form'].fields
def test_launch_cluster(self): self.mock_is_service_enabled.return_value = False self.mock_datastore_flavors.return_value = self.flavors.list() filtered_datastores = self._get_filtered_datastores('mongodb') self.mock_datastore_list.return_value = filtered_datastores self.mock_datastore_version_list.return_value = ( self._get_filtered_datastore_versions(filtered_datastores)) res = self.client.get(LAUNCH_URL) self.mock_is_service_enabled.assert_called_once_with( test.IsHttpRequest(), 'network') self.mock_datastore_flavors.assert_called_once_with( test.IsHttpRequest(), 'mongodb', '2.6') self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.mock_datastore_version_list.assert_called_once_with( test.IsHttpRequest(), test.IsA(str)) self.assertTemplateUsed(res, 'project/database_clusters/launch.html')
def test_view_log_exception(self): self.mock_log_tail.side_effect = self.exceptions.trove url = reverse('horizon:project:databases:logs:log_contents', args=('id', 'guest.log')) res = self.client.get(url) self.mock_Connection.assert_called_once_with(None, mock.ANY, None, preauthtoken=mock.ANY, preauthurl=mock.ANY, cacert=None, insecure=False, auth_version="3") self.mock_log_tail.assert_called_once_with(test.IsHttpRequest(), test.IsA(str), 'guest.log', False, LINES, self.mock_Connection()) self.assertContains(res, "Unable to load")
def test_log_tab_exception(self): database = self.databases.first() database_id = database.id self.mock_instance_get.return_value = database self.mock_log_list.side_effect = self.exceptions.trove self.mock_flavor_get.return_value = self.flavors.first() self.mock_root_show.return_value = self.database_user_roots.first() detail_url = reverse('horizon:project:databases:detail', args=[database_id]) url = detail_url + '?tab=instance_details__logs_tab' toSuppress = ["trove_dashboard.content.databases.tabs"] loggers = [] for cls in toSuppress: logger = logging.getLogger(cls) loggers.append((logger, logger.getEffectiveLevel())) logger.setLevel(logging.CRITICAL) try: res = self.client.get(url) self.mock_instance_get.assert_called_once_with( test.IsHttpRequest(), test.IsA(six.text_type)) self.mock_log_list.assert_called_once_with( test.IsHttpRequest(), database_id) self.mock_flavor_get.assert_called_once_with( test.IsHttpRequest(), database.flavor["id"]) self.mock_root_show.assert_called_once_with( test.IsHttpRequest(), database.id) table_data = res.context['logs_table'].data self.assertNotEqual(len(self.logs.list()), len(table_data)) self.assertTemplateUsed( res, 'horizon/common/_detail_table.html') finally: # Restore the previous log levels for (log, level) in loggers: log.setLevel(level)
def test_log_publish(self): database = self.databases.first() database_id = database.id log = self.logs.first() self.mock_instance_get.return_value = database self.mock_log_list.return_value = self.logs.list() self.mock_flavor_get.return_value = self.flavors.first() self.mock_log_publish.return_value = None detail_url = reverse('horizon:project:databases:detail', args=[database_id]) url = detail_url + '?tab=instance_details__logs_tab' action_string = u"logs__%s_log__%s" % ('publish', log.name) form_data = {'action': action_string} res = self.client.post(url, form_data) self.mock_instance_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.mock_log_list.assert_called_once_with(test.IsHttpRequest(), database_id) self.mock_flavor_get.assert_called_once_with(test.IsHttpRequest(), database.flavor["id"]) self.mock_log_publish.assert_called_once_with(test.IsHttpRequest(), database_id, log.name) self.assertRedirectsNoFollow(res, url)
def test_log_disable_exception(self): database = self.databases.first() database_id = database.id log = self.logs.list()[3] self.mock_instance_get.return_value = database self.mock_log_list.return_value = self.logs.list() self.mock_flavor_get.return_value = self.flavors.first() self.mock_log_disable.side_effect = self.exceptions.trove detail_url = reverse('horizon:project:databases:detail', args=[database_id]) url = detail_url + '?tab=instance_details__logs_tab' action_string = u"logs__%s_log__%s" % ('disable', log.name) form_data = {'action': action_string} res = self.client.post(url, form_data) self.mock_instance_get.assert_called_once_with( test.IsHttpRequest(), test.IsA(six.text_type)) self.mock_log_list.assert_called_once_with( test.IsHttpRequest(), database_id) self.mock_flavor_get.assert_called_once_with( test.IsHttpRequest(), database.flavor["id"]) self.mock_log_disable.assert_called_once_with( test.IsHttpRequest(), database_id, log.name) self.assertRedirectsNoFollow(res, url)
def test_restore_backup(self): backup = self.database_backups.first() self.mock_check.return_value = True self.mock_backup_get.return_value = self.database_backups.first() self.mock_backup_list.return_value = self.database_backups.list() self.mock_configuration_list.return_value = ( self.database_configurations.list()) self.mock_datastore_flavors.return_value = self.flavors.list() self.mock_datastore_list.return_value = self.datastores.list() self.mock_datastore_version_list.return_value = ( self.datastore_versions.list()) self.mock_instance_list.return_value = (common.Paginated( self.databases.list())) self.mock_volume_type_list.return_vlue = [] self.mock_network_list_for_tenant.return_value = ( self.networks.list()[:1]) self.mock_availability_zone_list.return_value = ( self.availability_zones.list()) url = RESTORE_URL + '?backup=%s' % self.database_backups.first().id res = self.client.get(url) self.assert_mock_multiple_calls_with_same_arguments( self.mock_check, 5, mock.call((), test.IsHttpRequest())) self.mock_backup_get.assert_called_once_with(test.IsHttpRequest(), test.IsA(str)) self.mock_backup_list.assert_called_once_with(test.IsHttpRequest()) self.mock_configuration_list.assert_called_once_with( test.IsHttpRequest()) self.mock_datastore_flavors.assert_called_once_with( test.IsHttpRequest(), test.IsA(str), test.IsA(str)) self.mock_datastore_list.assert_called_once_with(test.IsHttpRequest()) self.mock_datastore_version_list.assert_called_once_with( test.IsHttpRequest(), backup.datastore['type']) self.mock_instance_list.assert_called_once_with(test.IsHttpRequest()) self.mock_volume_type_list.assert_called_once_with( test.IsHttpRequest()) self.mock_network_list_for_tenant.assert_called_once_with( test.IsHttpRequest(), self.tenant.id, include_pre_auto_allocate=True) self.mock_availability_zone_list.assert_called_once_with( test.IsHttpRequest()) self.assertTemplateUsed(res, 'project/databases/launch.html') set_instance_detail_step = \ [step for step in res.context_data['workflow'].steps if isinstance(step, create_instance.SetInstanceDetails)][0] fields = set_instance_detail_step.action.fields self.assertTrue(len(fields['datastore'].choices), 1) text = 'mysql - 5.6' choice = fields['datastore'].choices[0] self.assertTrue(choice[0], common_utils.hexlify(text)) self.assertTrue(choice[1], text) advanced_step = [ step for step in res.context_data['workflow'].steps if isinstance(step, create_instance.Advanced) ][0] fields = advanced_step.action.fields self.assertTrue(len(fields['initial_state'].choices), 1) choice = fields['initial_state'].choices[0] self.assertTrue(choice[0], 'backup') self.assertTrue(choice[1], _('Restore from Backup'))