Beispiel #1
0
    def __init__(self, request, *args, **kwargs):
        super(EditTypeAccessForm, self).__init__(request, *args, **kwargs)
        err_msg = _('Unable to retrieve volume type access list.')

        self.fields["member"] = forms.MultipleChoiceField(
            required=False, widget=forms.ThemableCheckboxSelectMultiple())
        # Get list of available projects.
        try:
            all_projects, has_more = keystone.tenant_list(request)
        except Exception:
            exceptions.handle(request, err_msg)
        projects_list = [(project.id, project.name)
                         for project in all_projects]

        self.fields["member"].choices = projects_list

        volume_type_id = self.initial.get('volume_type_id')
        volume_type_access = []
        try:
            if volume_type_id:
                volume_type = cinder.volume_type_get(request, volume_type_id)
                if not volume_type.is_public:
                    volume_type_access = [
                        project.project_id
                        for project in cinder.volume_type_access_list(
                            request, volume_type_id)
                    ]
        except Exception:
            exceptions.handle(request, err_msg)

        self.fields["member"].initial = volume_type_access
Beispiel #2
0
    def _test_edit_volume_type_access(self, exception=False):
        volume_type = self.cinder_volume_types.list()[2]
        volume_type.id = u'1'
        keystone.tenant_list(IsA(http.HttpRequest)).AndReturn(
            [self.tenants.list(), False])
        type_access = self.cinder_type_access.list()
        formData = {'member': [u'3'], 'volume_type_id': volume_type.id}
        volume_type = cinder.volume_type_get(IsA(
            http.HttpRequest), volume_type.id).AndReturn(volume_type)
        cinder.volume_type_access_list(IsA(http.HttpRequest),
                                       volume_type.id).AndReturn(type_access)
        cinder.volume_type_add_project_access(IsA(http.HttpRequest),
                                              volume_type.id, u'3')
        if exception:
            cinder.volume_type_remove_project_access(
                IsA(http.HttpRequest), volume_type.id, u'1')\
                .AndRaise(exceptions.BadRequest())
        else:
            cinder.volume_type_remove_project_access(IsA(http.HttpRequest),
                                                     volume_type.id, u'1')
        self.mox.ReplayAll()

        url = reverse('horizon:admin:volume_types:edit_access',
                      args=[volume_type.id])
        res = self.client.post(url, formData)
        self.assertNoFormErrors(res)
        self.assertRedirectsNoFollow(res, INDEX_URL)
Beispiel #3
0
    def test_detail_view(self):
        cg_snapshot = self.cinder_cg_snapshots.first()
        cgroup = self.cinder_consistencygroups.first()
        volume_type = self.cinder_volume_types.first()
        volumes = self.cinder_volumes.list()

        cinder.volume_cg_snapshot_get(IsA(http.HttpRequest), cg_snapshot.id).\
            AndReturn(cg_snapshot)
        cinder.volume_cgroup_get(IsA(http.HttpRequest), cgroup.id).\
            AndReturn(cgroup)
        cinder.volume_type_get(IsA(http.HttpRequest), volume_type.id).\
            MultipleTimes().AndReturn(volume_type)
        search_opts = {'consistencygroup_id': cgroup.id}
        cinder.volume_list(IsA(http.HttpRequest), search_opts=search_opts).\
            AndReturn(volumes)

        self.mox.ReplayAll()

        url = reverse(
            'horizon:project:cg_snapshots:cg_snapshot_detail',
            args=[cg_snapshot.id])
        res = self.client.get(url)
        self.assertNoFormErrors(res)
        self.assertEqual(res.status_code, 200)
Beispiel #4
0
    def test_update_volume_type(self):
        volume_type = self.cinder_volume_types.first()
        formData = {
            'name': volume_type.name,
            'description': 'test desc updated'
        }
        volume_type = cinder.volume_type_get(IsA(
            http.HttpRequest), volume_type.id).AndReturn(volume_type)
        cinder.volume_type_update(
            IsA(http.HttpRequest), volume_type.id, formData['name'],
            formData['description']).AndReturn(volume_type)
        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:volume_types:update_type',
                      args=[volume_type.id])
        res = self.client.post(url, formData)
        self.assertNoFormErrors(res)
        redirect = reverse('horizon:admin:volumes:volume_types_tab')
        self.assertRedirectsNoFollow(res, redirect)