Пример #1
0
    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)

            self.mock_get.return_value = config_param_mgr

            self.mock_configuration_instances.side_effect = (
                self.exceptions.trove)

            details_url = self._get_url_with_arg(DETAIL_URL, config.id)
            url = details_url + '?tab=configuration_details__instance'

            res = self.client.get(url)
            self.assert_mock_multiple_calls_with_same_arguments(
                self.mock_get, 2, mock.call(test.IsHttpRequest(), config.id))
            self.mock_configuration_instances.assert_called_once_with(
                test.IsHttpRequest(), config.id)
            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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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')
Пример #5
0
    def test_index(self):
        clusters = common.Paginated(self.trove_clusters.list())
        self.mock_cluster_list.return_value = clusters
        self.mock_flavor_list.return_value = self.flavors.list()

        res = self.client.get(INDEX_URL)
        self.mock_cluster_list.assert_called_once_with(test.IsHttpRequest(),
                                                       marker=None)
        self.mock_flavor_list.assert_called_once_with(test.IsHttpRequest())
        self.assertTemplateUsed(res, 'project/database_clusters/index.html')
Пример #6
0
 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')
Пример #7
0
    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')
Пример #8
0
    def test_index_flavor_exception(self):
        clusters = common.Paginated(self.trove_clusters.list())
        self.mock_cluster_list.return_value = clusters
        self.mock_flavor_list.side_effect = self.exceptions.trove

        res = self.client.get(INDEX_URL)
        self.mock_cluster_list.assert_called_once_with(test.IsHttpRequest(),
                                                       marker=None)
        self.mock_flavor_list.assert_called_once_with(test.IsHttpRequest())
        self.assertTemplateUsed(res, 'project/database_clusters/index.html')
        self.assertMessageCount(res, error=1)
Пример #9
0
    def test_grow_cluster(self):
        cluster = self.trove_clusters.first()
        self.mock_cluster_get.return_value = cluster
        cluster_volume = 1
        flavor = self.flavors.first()
        cluster_flavor = flavor.id
        cluster_flavor_name = flavor.name
        instances = [
            cluster_manager.ClusterInstance("id1", "name1", cluster_flavor,
                                            cluster_flavor_name,
                                            cluster_volume, "master", None,
                                            None),
            cluster_manager.ClusterInstance("id2", "name2", cluster_flavor,
                                            cluster_flavor_name,
                                            cluster_volume, "slave", "master",
                                            None),
            cluster_manager.ClusterInstance("id3", None, cluster_flavor,
                                            cluster_flavor_name,
                                            cluster_volume, None, None, None),
        ]

        manager = cluster_manager.ClusterInstanceManager(cluster.id)
        manager.instances = instances
        self.mock_get.return_value = manager

        url = reverse('horizon:project:database_clusters:cluster_grow_details',
                      args=[cluster.id])
        res = self.client.get(url)
        self.assertTemplateUsed(
            res, 'project/database_clusters/cluster_grow_details.html')
        table = res.context_data["".join(
            [tables.ClusterGrowInstancesTable.Meta.name, '_table'])]
        self.assertEqual(len(cluster.instances), len(table.data))

        action = "".join([
            tables.ClusterGrowInstancesTable.Meta.name, '__',
            tables.ClusterGrowRemoveInstance.name, '__', 'id1'
        ])
        self.client.post(url, {'action': action})
        self.assertEqual(len(cluster.instances) - 1, len(table.data))

        action = "".join([
            tables.ClusterGrowInstancesTable.Meta.name, '__',
            tables.ClusterGrowAction.name, '__', cluster.id
        ])
        res = self.client.post(url, {'action': action})
        self.mock_cluster_get.assert_called_once_with(test.IsHttpRequest(),
                                                      cluster.id)
        self.assert_mock_multiple_calls_with_same_arguments(
            self.mock_get, 5, mock.call(cluster.id))
        self.mock_cluster_grow.assert_called_once_with(test.IsHttpRequest(),
                                                       cluster.id, instances)
        self.assertMessageCount(success=1)
        self.assertRedirectsNoFollow(res, INDEX_URL)
Пример #10
0
    def test_launch_backup_exception(self):
        self.mock_check.return_value = True
        self.mock_instance_list.side_effect = self.exceptions.trove
        self.mock_backup_list.return_value = self.database_backups.list()

        res = self.client.get(BACKUP_URL)
        self.mock_check.assert_called_once_with((), test.IsHttpRequest())
        self.mock_instance_list.assert_called_once_with(test.IsHttpRequest())
        self.mock_backup_list.assert_called_once_with(test.IsHttpRequest())
        self.assertMessageCount(res, error=1)
        self.assertTemplateUsed(res, 'project/database_backups/backup.html')
Пример #11
0
    def test_index_pagination(self):
        clusters = self.trove_clusters.list()
        last_record = clusters[1]
        clusters = common.Paginated(clusters, next_marker="foo")
        self.mock_cluster_list.return_value = clusters
        self.mock_flavor_list.return_value = self.flavors.list()

        res = self.client.get(INDEX_URL)
        self.mock_cluster_list.assert_called_once_with(test.IsHttpRequest(),
                                                       marker=None)
        self.mock_flavor_list.assert_called_once_with(test.IsHttpRequest())
        self.assertTemplateUsed(res, 'project/database_clusters/index.html')
        self.assertContains(res, 'marker=' + last_record.id)
Пример #12
0
    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)
Пример #13
0
    def test_create_simple_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))

        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''

        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_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.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)
Пример #14
0
    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)
Пример #15
0
    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))
Пример #16
0
    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)
Пример #17
0
    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')
Пример #18
0
    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)

        self.mock_get.return_value = config_param_mgr

        self.mock_configuration_update.return_value = None

        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)
Пример #19
0
 def test_index(self):
     self.mock_configuration_list.return_value = (
         self.database_configurations.list())
     res = self.client.get(INDEX_URL)
     self.mock_configuration_list.assert_called_once_with(
         test.IsHttpRequest())
     self.assertTemplateUsed(res,
                             'project/database_configurations/index.html')
Пример #20
0
    def test_add_parameter(self):
        config = self.database_configurations.first()
        self.mock_get_configuration.return_value = config

        self.mock_configuration_get.return_value = config
        ds = self._get_test_datastore('mysql')
        dsv = self._get_test_datastore_version(ds.id, '5.5')
        self.mock_configuration_parameters_list.return_value = (
            self.configuration_parameters.list())
        res = self.client.get(self._get_url_with_arg(ADD_URL, 'id'))
        self.mock_get_configuration.assert_called_once()
        self.mock_configuration_get.assert_called_once_with(
            test.IsHttpRequest())
        self.mock_configuration_parameters_list.assert_called_once_with(
            test.IsHttpRequest(), ds.name, dsv.name)
        self.assertTemplateUsed(
            res, 'project/database_configurations/add_parameter.html')
Пример #21
0
 def test_index_exception(self):
     self.mock_configuration_list.side_effect = self.exceptions.trove
     res = self.client.get(INDEX_URL)
     self.mock_configuration_list.assert_called_once_with(
         test.IsHttpRequest())
     self.assertTemplateUsed(res,
                             'project/database_configurations/index.html')
     self.assertEqual(res.status_code, 200)
     self.assertMessageCount(res, error=1)
Пример #22
0
    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
Пример #23
0
 def test_overview_tab_exception(self):
     config = self.database_configurations.first()
     self.mock_configuration_get.side_effect = self.exceptions.trove
     details_url = self._get_url_with_arg(DETAIL_URL, config.id)
     url = details_url + '?tab=configuration_details__overview'
     res = self.client.get(url)
     self.mock_configuration_get.assert_called_once_with(
         test.IsHttpRequest(), config.id)
     self.assertRedirectsNoFollow(res, INDEX_URL)
Пример #24
0
    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')
Пример #25
0
 def test_details_tab(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__details'
     res = self.client.get(url)
     self.mock_configuration_get.assert_called_once_with(
         test.IsHttpRequest(), config.id)
     self.assertTemplateUsed(
         res, 'project/database_configurations/details.html')
Пример #26
0
    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")
Пример #27
0
    def test_add_parameter_exception_on_parameters(self):
        try:
            config = self.database_configurations.first()
            self.mock_get_configuration.return_value = config

            self.mock_configuration_get.return_value = config

            ds = self._get_test_datastore('mysql')
            dsv = self._get_test_datastore_version(ds.id, '5.5')
            self.mock_configuration_parameters_list.side_effect = (
                self.exceptions.trove)
            toSuppress = ["trove_dashboard.content."
                          "database_configurations.forms", ]

            # Suppress expected log messages in the test output
            loggers = []
            for cls in toSuppress:
                logger = logging.getLogger(cls)
                loggers.append((logger, logger.getEffectiveLevel()))
                logger.setLevel(logging.CRITICAL)

            try:
                res = self.client.get(
                    self._get_url_with_arg(ADD_URL, config.id))
                self.mock_get_configuration.assert_called_once()
                self.mock_configuration_get.assert_called_once_with(
                    test.IsHttpRequest())
                self.mock_configuration_parameters_list. \
                    assert_called_once_with(
                        test.IsHttpRequest(),
                        ds.name,
                        dsv.name
                    )
                self.assertEqual(res.status_code, 302)

            finally:
                # Restore the previous log levels
                for (log, level) in loggers:
                    log.setLevel(level)
        finally:
            config_param_manager.delete(config.id)
Пример #28
0
    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)
Пример #29
0
    def test_add_new_parameter(self):
        config = self.database_configurations.first()

        try:
            self.mock_configuration_get.return_value = config

            ds = self._get_test_datastore('mysql')
            dsv = self._get_test_datastore_version(ds.id, '5.5')
            self.mock_configuration_parameters_list.return_value = (
                self.configuration_parameters.list())

            name = self.configuration_parameters.first().name
            value = 1
            config.values.update({name: value})

            self.mock_add_param.return_value = value

            post = {
                'method': 'AddParameterForm',
                'name': name,
                'value': value}

            res = self.client.post(self._get_url_with_arg(ADD_URL, config.id),
                                   post)

            self.assertEqual(2, self.mock_configuration_get.call_count)
            self.mock_configuration_parameters_list.assert_called_once_with(
                test.IsHttpRequest(),
                ds.name,
                dsv.name)
            self.mock_add_param.assert_called_once_with(name, value)
            self.mock_configuration_update.assert_called_once_with(
                test.IsHttpRequest(), config.id,
                jsonutils.dumps(config.values)
            )
            self.assertNoFormErrors(res)
            self.assertMessageCount(success=1)
        finally:
            config_param_manager.delete(config.id)
Пример #30
0
    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)