コード例 #1
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)
コード例 #2
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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')
コード例 #3
0
    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')
コード例 #4
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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)
コード例 #5
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)
コード例 #6
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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)
コード例 #7
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)
コード例 #8
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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')
コード例 #9
0
    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)
コード例 #10
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')
コード例 #11
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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')
コード例 #12
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")
コード例 #13
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)
コード例 #14
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
コード例 #15
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')
コード例 #16
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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")
コード例 #17
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)
コード例 #18
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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)
コード例 #19
0
    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)
コード例 #20
0
ファイル: tests.py プロジェクト: openstack/trove-dashboard
    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'))