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