Ensure to use api.<category>.<method>
In the current code both api.<method> and api.<category>.<method> are used. Using api.<method> directly makes it difficult to identify which module defined a method and forces developers to use unique method names among projects. This commit removes api.<method> style method calls. Change-Id: Iaefa1061f99b7865e02541df87c112a6b2868ec0
This commit is contained in:
parent
b8071bcce7
commit
12faaa5c30
@ -32,9 +32,10 @@ In other words, Horizon developers not working on openstack_dashboard.api
|
|||||||
shouldn't need to understand the finer details of APIs for
|
shouldn't need to understand the finer details of APIs for
|
||||||
Keystone/Nova/Glance/Swift et. al.
|
Keystone/Nova/Glance/Swift et. al.
|
||||||
"""
|
"""
|
||||||
from openstack_dashboard.api.glance import *
|
from openstack_dashboard.api import base
|
||||||
from openstack_dashboard.api.keystone import *
|
from openstack_dashboard.api import cinder
|
||||||
from openstack_dashboard.api.nova import *
|
from openstack_dashboard.api import glance
|
||||||
from openstack_dashboard.api.swift import *
|
from openstack_dashboard.api import keystone
|
||||||
from openstack_dashboard.api.quantum import *
|
from openstack_dashboard.api import nova
|
||||||
from openstack_dashboard.api.cinder import *
|
from openstack_dashboard.api import quantum
|
||||||
|
from openstack_dashboard.api import swift
|
||||||
|
@ -30,7 +30,8 @@ from django.utils.translation import ugettext as _
|
|||||||
from cinderclient.v1 import client as cinder_client
|
from cinderclient.v1 import client as cinder_client
|
||||||
|
|
||||||
from openstack_dashboard.api.base import url_for
|
from openstack_dashboard.api.base import url_for
|
||||||
from openstack_dashboard.api import nova, QuotaSet
|
from openstack_dashboard.api import nova
|
||||||
|
from openstack_dashboard.api.base import QuotaSet
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
@ -13,7 +13,7 @@ class FlavorExtrasTests(test.BaseAdminViewTests):
|
|||||||
'flavor_get'), })
|
'flavor_get'), })
|
||||||
def test_list_extras_when_none_exists(self):
|
def test_list_extras_when_none_exists(self):
|
||||||
flavor = self.flavors.first()
|
flavor = self.flavors.first()
|
||||||
extras = [api.FlavorExtraSpec(flavor.id, 'k1', 'v1')]
|
extras = [api.nova.FlavorExtraSpec(flavor.id, 'k1', 'v1')]
|
||||||
|
|
||||||
# GET -- to determine correctness of output
|
# GET -- to determine correctness of output
|
||||||
api.nova.flavor_get(IsA(http.HttpRequest), flavor.id).AndReturn(flavor)
|
api.nova.flavor_get(IsA(http.HttpRequest), flavor.id).AndReturn(flavor)
|
||||||
|
@ -15,7 +15,7 @@ class DeleteFlavor(tables.DeleteAction):
|
|||||||
data_type_plural = _("Flavors")
|
data_type_plural = _("Flavors")
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.flavor_delete(request, obj_id)
|
api.nova.flavor_delete(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class CreateFlavor(tables.LinkAction):
|
class CreateFlavor(tables.LinkAction):
|
||||||
|
@ -43,7 +43,7 @@ class IndexView(tables.DataTableView):
|
|||||||
request = self.request
|
request = self.request
|
||||||
flavors = []
|
flavors = []
|
||||||
try:
|
try:
|
||||||
flavors = api.flavor_list(request)
|
flavors = api.nova.flavor_list(request)
|
||||||
except:
|
except:
|
||||||
exceptions.handle(request,
|
exceptions.handle(request,
|
||||||
_('Unable to retrieve flavor list.'))
|
_('Unable to retrieve flavor list.'))
|
||||||
|
@ -25,12 +25,12 @@ from .tables import AdminImagesTable
|
|||||||
|
|
||||||
|
|
||||||
class ImagesViewTest(test.BaseAdminViewTests):
|
class ImagesViewTest(test.BaseAdminViewTests):
|
||||||
@test.create_stubs({api: ('image_list_detailed',)})
|
@test.create_stubs({api.glance: ('image_list_detailed',)})
|
||||||
def test_images_list(self):
|
def test_images_list(self):
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None) \
|
marker=None) \
|
||||||
.AndReturn([self.images.list(),
|
.AndReturn([self.images.list(),
|
||||||
False])
|
False])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(
|
res = self.client.get(
|
||||||
@ -39,24 +39,24 @@ class ImagesViewTest(test.BaseAdminViewTests):
|
|||||||
self.assertEqual(len(res.context['images_table'].data),
|
self.assertEqual(len(res.context['images_table'].data),
|
||||||
len(self.images.list()))
|
len(self.images.list()))
|
||||||
|
|
||||||
@test.create_stubs({api: ('image_list_detailed',)})
|
@test.create_stubs({api.glance: ('image_list_detailed',)})
|
||||||
def test_images_list_get_pagination(self):
|
def test_images_list_get_pagination(self):
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None) \
|
marker=None) \
|
||||||
.AndReturn([self.images.list(),
|
.AndReturn([self.images.list(),
|
||||||
True])
|
True])
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None) \
|
marker=None) \
|
||||||
.AndReturn([self.images.list()[:2],
|
.AndReturn([self.images.list()[:2],
|
||||||
True])
|
True])
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=self.images.list()[2].id) \
|
marker=self.images.list()[2].id) \
|
||||||
.AndReturn([self.images.list()[2:4],
|
.AndReturn([self.images.list()[2:4],
|
||||||
True])
|
True])
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=self.images.list()[4].id) \
|
marker=self.images.list()[4].id) \
|
||||||
.AndReturn([self.images.list()[4:],
|
.AndReturn([self.images.list()[4:],
|
||||||
True])
|
True])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
url = reverse('horizon:admin:images:index')
|
url = reverse('horizon:admin:images:index')
|
||||||
|
@ -48,8 +48,8 @@ class IndexView(tables.DataTableView):
|
|||||||
marker = self.request.GET.get(AdminImagesTable._meta.pagination_param,
|
marker = self.request.GET.get(AdminImagesTable._meta.pagination_param,
|
||||||
None)
|
None)
|
||||||
try:
|
try:
|
||||||
images, self._more = api.image_list_detailed(self.request,
|
images, self._more = api.glance.image_list_detailed(self.request,
|
||||||
marker=marker)
|
marker=marker)
|
||||||
except:
|
except:
|
||||||
self._more = False
|
self._more = False
|
||||||
msg = _('Unable to retrieve image list.')
|
msg = _('Unable to retrieve image list.')
|
||||||
|
@ -48,7 +48,7 @@ class MigrateInstance(tables.BatchAction):
|
|||||||
and not is_deleting(instance))
|
and not is_deleting(instance))
|
||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
api.server_migrate(request, obj_id)
|
api.nova.server_migrate(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class AdminUpdateRow(UpdateRow):
|
class AdminUpdateRow(UpdateRow):
|
||||||
|
@ -111,16 +111,16 @@ class InstanceViewTest(test.BaseAdminViewTests):
|
|||||||
self.assertTemplateUsed(res, 'admin/instances/index.html')
|
self.assertTemplateUsed(res, 'admin/instances/index.html')
|
||||||
self.assertEqual(len(res.context['instances_table'].data), 0)
|
self.assertEqual(len(res.context['instances_table'].data), 0)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get', 'flavor_get',),
|
@test.create_stubs({api.nova: ('server_get', 'flavor_get',),
|
||||||
api.keystone: ('tenant_get',)})
|
api.keystone: ('tenant_get',)})
|
||||||
def test_ajax_loading_instances(self):
|
def test_ajax_loading_instances(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
flavor = self.flavors.list()[0]
|
flavor = self.flavors.list()[0]
|
||||||
tenant = self.tenants.list()[0]
|
tenant = self.tenants.list()[0]
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.flavor_get(IsA(http.HttpRequest),
|
api.nova.flavor_get(IsA(http.HttpRequest),
|
||||||
server.flavor['id']).AndReturn(flavor)
|
server.flavor['id']).AndReturn(flavor)
|
||||||
api.keystone.tenant_get(IsA(http.HttpRequest),
|
api.keystone.tenant_get(IsA(http.HttpRequest),
|
||||||
server.tenant_id,
|
server.tenant_id,
|
||||||
admin=True).AndReturn(tenant)
|
admin=True).AndReturn(tenant)
|
||||||
|
@ -38,7 +38,7 @@ INDEX_URL = reverse('horizon:project:overview:index')
|
|||||||
|
|
||||||
|
|
||||||
class UsageViewTests(test.BaseAdminViewTests):
|
class UsageViewTests(test.BaseAdminViewTests):
|
||||||
@test.create_stubs({api: ('usage_list',),
|
@test.create_stubs({api.nova: ('usage_list',),
|
||||||
quotas: ('tenant_quota_usages',),
|
quotas: ('tenant_quota_usages',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
def test_usage(self):
|
def test_usage(self):
|
||||||
@ -47,10 +47,10 @@ class UsageViewTests(test.BaseAdminViewTests):
|
|||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
.AndReturn(self.tenants.list())
|
.AndReturn(self.tenants.list())
|
||||||
api.usage_list(IsA(http.HttpRequest),
|
api.nova.usage_list(IsA(http.HttpRequest),
|
||||||
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn([usage_obj])
|
.AndReturn([usage_obj])
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
res = self.client.get(reverse('horizon:admin:overview:index'))
|
res = self.client.get(reverse('horizon:admin:overview:index'))
|
||||||
@ -70,7 +70,7 @@ class UsageViewTests(test.BaseAdminViewTests):
|
|||||||
usage_obj.vcpu_hours,
|
usage_obj.vcpu_hours,
|
||||||
usage_obj.total_local_gb_usage))
|
usage_obj.total_local_gb_usage))
|
||||||
|
|
||||||
@test.create_stubs({api: ('usage_list',),
|
@test.create_stubs({api.nova: ('usage_list',),
|
||||||
quotas: ('tenant_quota_usages',),
|
quotas: ('tenant_quota_usages',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
def test_usage_csv(self):
|
def test_usage_csv(self):
|
||||||
@ -79,10 +79,10 @@ class UsageViewTests(test.BaseAdminViewTests):
|
|||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
.AndReturn(self.tenants.list())
|
.AndReturn(self.tenants.list())
|
||||||
api.usage_list(IsA(http.HttpRequest),
|
api.nova.usage_list(IsA(http.HttpRequest),
|
||||||
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn([usage_obj, usage_obj])
|
.AndReturn([usage_obj, usage_obj])
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
csv_url = reverse('horizon:admin:overview:index') + "?format=csv"
|
csv_url = reverse('horizon:admin:overview:index') + "?format=csv"
|
||||||
|
@ -65,10 +65,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
project_info.update(quota_data)
|
project_info.update(quota_data)
|
||||||
return project_info
|
return project_info
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',),
|
@test.create_stubs({api.keystone: ('get_default_role',
|
||||||
quotas: ('get_default_quota_data',),
|
'user_list',
|
||||||
api.keystone: ('user_list',
|
'role_list'),
|
||||||
'role_list',)})
|
quotas: ('get_default_quota_data',)})
|
||||||
def test_add_project_get(self):
|
def test_add_project_get(self):
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
default_role = self.roles.first()
|
default_role = self.roles.first()
|
||||||
@ -78,7 +78,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
# init
|
# init
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -101,9 +102,9 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
'<UpdateProjectMembers: update_members>',
|
'<UpdateProjectMembers: update_members>',
|
||||||
'<UpdateProjectQuota: update_quotas>'])
|
'<UpdateProjectQuota: update_quotas>'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',
|
@test.create_stubs({api.keystone: ('get_default_role',
|
||||||
'add_tenant_user_role',),
|
'add_tenant_user_role',
|
||||||
api.keystone: ('tenant_create',
|
'tenant_create',
|
||||||
'user_list',
|
'user_list',
|
||||||
'role_list'),
|
'role_list'),
|
||||||
quotas: ('get_default_quota_data',),
|
quotas: ('get_default_quota_data',),
|
||||||
@ -119,7 +120,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -140,10 +142,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
if "role_" + role.id in workflow_data:
|
if "role_" + role.id in workflow_data:
|
||||||
ulist = workflow_data["role_" + role.id]
|
ulist = workflow_data["role_" + role.id]
|
||||||
for user_id in ulist:
|
for user_id in ulist:
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
role_id=role.id)
|
role_id=role.id)
|
||||||
|
|
||||||
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
||||||
project.id,
|
project.id,
|
||||||
@ -159,10 +161,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',),
|
@test.create_stubs({api.keystone: ('user_list',
|
||||||
quotas: ('get_default_quota_data',),
|
'role_list',
|
||||||
api.keystone: ('user_list',
|
'get_default_role'),
|
||||||
'role_list',)})
|
quotas: ('get_default_quota_data',)})
|
||||||
def test_add_project_quota_defaults_error(self):
|
def test_add_project_quota_defaults_error(self):
|
||||||
default_role = self.roles.first()
|
default_role = self.roles.first()
|
||||||
users = self.users.list()
|
users = self.users.list()
|
||||||
@ -170,9 +172,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)) \
|
quotas.get_default_quota_data(IsA(http.HttpRequest)) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -184,11 +187,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertTemplateUsed(res, 'admin/projects/create.html')
|
self.assertTemplateUsed(res, 'admin/projects/create.html')
|
||||||
self.assertContains(res, "Unable to retrieve default quota values")
|
self.assertContains(res, "Unable to retrieve default quota values")
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',),
|
@test.create_stubs({api.keystone: ('tenant_create',
|
||||||
quotas: ('get_default_quota_data',),
|
|
||||||
api.keystone: ('tenant_create',
|
|
||||||
'user_list',
|
'user_list',
|
||||||
'role_list',)})
|
'role_list',
|
||||||
|
'get_default_role'),
|
||||||
|
quotas: ('get_default_quota_data',)})
|
||||||
def test_add_project_tenant_create_error(self):
|
def test_add_project_tenant_create_error(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -199,7 +202,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -222,11 +226,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',
|
@test.create_stubs({api.keystone: ('tenant_create',
|
||||||
'add_tenant_user_role',),
|
|
||||||
api.keystone: ('tenant_create',
|
|
||||||
'user_list',
|
'user_list',
|
||||||
'role_list'),
|
'role_list',
|
||||||
|
'get_default_role',
|
||||||
|
'add_tenant_user_role'),
|
||||||
quotas: ('get_default_quota_data',),
|
quotas: ('get_default_quota_data',),
|
||||||
api.nova: ('tenant_quota_update',)})
|
api.nova: ('tenant_quota_update',)})
|
||||||
def test_add_project_quota_update_error(self):
|
def test_add_project_quota_update_error(self):
|
||||||
@ -239,7 +243,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -251,7 +256,7 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
quota_data = self._get_quota_info(quota)
|
quota_data = self._get_quota_info(quota)
|
||||||
|
|
||||||
api.keystone.tenant_create(IsA(http.HttpRequest), **project_details) \
|
api.keystone.tenant_create(IsA(http.HttpRequest), **project_details) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
|
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -260,10 +265,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
if "role_" + role.id in workflow_data:
|
if "role_" + role.id in workflow_data:
|
||||||
ulist = workflow_data["role_" + role.id]
|
ulist = workflow_data["role_" + role.id]
|
||||||
for user_id in ulist:
|
for user_id in ulist:
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
role_id=role.id)
|
role_id=role.id)
|
||||||
|
|
||||||
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
||||||
project.id,
|
project.id,
|
||||||
@ -280,11 +285,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',
|
@test.create_stubs({api.keystone: ('tenant_create',
|
||||||
'add_tenant_user_role',),
|
|
||||||
api.keystone: ('tenant_create',
|
|
||||||
'user_list',
|
'user_list',
|
||||||
'role_list',),
|
'role_list',
|
||||||
|
'get_default_role',
|
||||||
|
'add_tenant_user_role'),
|
||||||
quotas: ('get_default_quota_data',),
|
quotas: ('get_default_quota_data',),
|
||||||
api.nova: ('tenant_quota_update',)})
|
api.nova: ('tenant_quota_update',)})
|
||||||
def test_add_project_user_update_error(self):
|
def test_add_project_user_update_error(self):
|
||||||
@ -297,7 +302,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -318,10 +324,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
if "role_" + role.id in workflow_data:
|
if "role_" + role.id in workflow_data:
|
||||||
ulist = workflow_data["role_" + role.id]
|
ulist = workflow_data["role_" + role.id]
|
||||||
for user_id in ulist:
|
for user_id in ulist:
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
role_id=role.id) \
|
role_id=role.id) \
|
||||||
.AndRaise(self.exceptions.keystone)
|
.AndRaise(self.exceptions.keystone)
|
||||||
break
|
break
|
||||||
break
|
break
|
||||||
@ -340,10 +346,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',),
|
@test.create_stubs({api.keystone: ('user_list',
|
||||||
quotas: ('get_default_quota_data',),
|
'role_list',
|
||||||
api.keystone: ('user_list',
|
'get_default_role'),
|
||||||
'role_list',)})
|
quotas: ('get_default_quota_data',)})
|
||||||
def test_add_project_missing_field_error(self):
|
def test_add_project_missing_field_error(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -354,7 +360,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
# init
|
# init
|
||||||
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
@ -379,12 +386,12 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
quota_data[field] = int(quota.get(field).limit)
|
quota_data[field] = int(quota.get(field).limit)
|
||||||
return quota_data
|
return quota_data
|
||||||
|
|
||||||
@test.create_stubs({api: ('get_default_role',
|
@test.create_stubs({api.keystone: ('get_default_role',
|
||||||
'roles_for_user',
|
'roles_for_user',
|
||||||
'tenant_get',),
|
'tenant_get',
|
||||||
quotas: ('get_tenant_quota_data',),
|
'user_list',
|
||||||
api.keystone: ('user_list',
|
'role_list'),
|
||||||
'role_list',)})
|
quotas: ('get_tenant_quota_data',)})
|
||||||
def test_update_project_get(self):
|
def test_update_project_get(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -392,18 +399,20 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
users = self.users.list()
|
users = self.users.list()
|
||||||
roles = self.roles.list()
|
roles = self.roles.list()
|
||||||
|
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest),
|
||||||
|
self.tenant.id, admin=True) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
for user in users:
|
for user in users:
|
||||||
api.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(roles)
|
self.tenant.id).AndReturn(roles)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -428,17 +437,17 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
'<UpdateProjectMembers: update_members>',
|
'<UpdateProjectMembers: update_members>',
|
||||||
'<UpdateProjectQuota: update_quotas>'])
|
'<UpdateProjectQuota: update_quotas>'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_get',
|
@test.create_stubs({api.keystone: ('tenant_get',
|
||||||
'tenant_update',
|
'tenant_update',
|
||||||
'get_default_role',
|
'get_default_role',
|
||||||
'roles_for_user',
|
'roles_for_user',
|
||||||
'remove_tenant_user_role',
|
'remove_tenant_user_role',
|
||||||
'add_tenant_user_role'),
|
'add_tenant_user_role',
|
||||||
|
'user_list',
|
||||||
|
'role_list'),
|
||||||
api.nova: ('tenant_quota_update',),
|
api.nova: ('tenant_quota_update',),
|
||||||
api.cinder: ('tenant_quota_update',),
|
api.cinder: ('tenant_quota_update',),
|
||||||
quotas: ('get_tenant_quota_data',),
|
quotas: ('get_tenant_quota_data',)})
|
||||||
api.keystone: ('user_list',
|
|
||||||
'role_list',)})
|
|
||||||
def test_update_project_save(self):
|
def test_update_project_save(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -447,19 +456,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
roles = self.roles.list()
|
roles = self.roles.list()
|
||||||
|
|
||||||
# get/init
|
# get/init
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest),
|
||||||
|
self.tenant.id, admin=True) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data = {}
|
workflow_data = {}
|
||||||
for user in users:
|
for user in users:
|
||||||
api.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(roles)
|
self.tenant.id).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data["role_1"] = ['3'] # admin role
|
workflow_data["role_1"] = ['3'] # admin role
|
||||||
workflow_data["role_2"] = ['2'] # member role
|
workflow_data["role_2"] = ['2'] # member role
|
||||||
@ -480,7 +491,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
# handle
|
# handle
|
||||||
api.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
|
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
@ -488,40 +499,43 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
tenant_id=self.tenant.id).AndReturn(users)
|
tenant_id=self.tenant.id).AndReturn(users)
|
||||||
|
|
||||||
# admin user - try to remove all roles on current project, warning
|
# admin user - try to remove all roles on current project, warning
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '1',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn(roles)
|
.AndReturn(roles)
|
||||||
|
|
||||||
# member user 1 - has role 1, will remove it
|
# member user 1 - has role 1, will remove it
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '2',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[0],))
|
.AndReturn((roles[0],))
|
||||||
# remove role 1
|
# remove role 1
|
||||||
api.remove_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.remove_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='2',
|
user_id='2',
|
||||||
role_id='1')
|
role_id='1')
|
||||||
# add role 2
|
# add role 2
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='2',
|
user_id='2',
|
||||||
role_id='2')
|
role_id='2')
|
||||||
|
|
||||||
# member user 3 - has role 2
|
# member user 3 - has role 2
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '3',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[1],))
|
.AndReturn((roles[1],))
|
||||||
# remove role 2
|
# remove role 2
|
||||||
api.remove_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.remove_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='3',
|
user_id='3',
|
||||||
role_id='2')
|
role_id='2')
|
||||||
# add role 1
|
# add role 1
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='3',
|
user_id='3',
|
||||||
role_id='1')
|
role_id='1')
|
||||||
|
|
||||||
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
||||||
project.id,
|
project.id,
|
||||||
**updated_quota)
|
**updated_quota)
|
||||||
api.cinder.tenant_quota_update(IsA(http.HttpRequest),
|
api.cinder.tenant_quota_update(IsA(http.HttpRequest),
|
||||||
project.id,
|
project.id,
|
||||||
volumes=updated_quota['volumes'],
|
volumes=updated_quota['volumes'],
|
||||||
@ -543,10 +557,11 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertMessageCount(error=0, warning=1)
|
self.assertMessageCount(error=0, warning=1)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_get',)})
|
@test.create_stubs({api.keystone: ('tenant_get',)})
|
||||||
def test_update_project_get_error(self):
|
def test_update_project_get_error(self):
|
||||||
|
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
|
admin=True) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -557,16 +572,16 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_get',
|
@test.create_stubs({api.keystone: ('tenant_get',
|
||||||
'tenant_update',
|
'tenant_update',
|
||||||
'get_default_role',
|
'get_default_role',
|
||||||
'roles_for_user',
|
'roles_for_user',
|
||||||
'remove_tenant_user',
|
'remove_tenant_user',
|
||||||
'add_tenant_user_role'),
|
'add_tenant_user_role',
|
||||||
|
'user_list',
|
||||||
|
'role_list'),
|
||||||
quotas: ('get_tenant_quota_data',),
|
quotas: ('get_tenant_quota_data',),
|
||||||
api.nova: ('tenant_quota_update',),
|
api.nova: ('tenant_quota_update',)})
|
||||||
api.keystone: ('user_list',
|
|
||||||
'role_list',)})
|
|
||||||
def test_update_project_tenant_update_error(self):
|
def test_update_project_tenant_update_error(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -575,19 +590,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
roles = self.roles.list()
|
roles = self.roles.list()
|
||||||
|
|
||||||
# get/init
|
# get/init
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
|
admin=True) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data = {}
|
workflow_data = {}
|
||||||
for user in users:
|
for user in users:
|
||||||
api.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(roles)
|
self.tenant.id).AndReturn(roles)
|
||||||
role_ids = [role.id for role in roles]
|
role_ids = [role.id for role in roles]
|
||||||
if role_ids:
|
if role_ids:
|
||||||
workflow_data.setdefault("role_" + role_ids[0], []) \
|
workflow_data.setdefault("role_" + role_ids[0], []) \
|
||||||
@ -609,7 +626,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
# handle
|
# handle
|
||||||
api.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
||||||
.AndRaise(self.exceptions.keystone)
|
.AndRaise(self.exceptions.keystone)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -628,16 +645,16 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_get',
|
@test.create_stubs({api.keystone: ('tenant_get',
|
||||||
'tenant_update',
|
'tenant_update',
|
||||||
'get_default_role',
|
'get_default_role',
|
||||||
'roles_for_user',
|
'roles_for_user',
|
||||||
'remove_tenant_user_role',
|
'remove_tenant_user_role',
|
||||||
'add_tenant_user_role'),
|
'add_tenant_user_role',
|
||||||
|
'user_list',
|
||||||
|
'role_list'),
|
||||||
quotas: ('get_tenant_quota_data',),
|
quotas: ('get_tenant_quota_data',),
|
||||||
api.nova: ('tenant_quota_update',),
|
api.nova: ('tenant_quota_update',)})
|
||||||
api.keystone: ('user_list',
|
|
||||||
'role_list',)})
|
|
||||||
def test_update_project_quota_update_error(self):
|
def test_update_project_quota_update_error(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -646,20 +663,22 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
roles = self.roles.list()
|
roles = self.roles.list()
|
||||||
|
|
||||||
# get/init
|
# get/init
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
|
admin=True) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data = {}
|
workflow_data = {}
|
||||||
|
|
||||||
for user in users:
|
for user in users:
|
||||||
api.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(roles)
|
self.tenant.id).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data["role_1"] = ['1', '3'] # admin role
|
workflow_data["role_1"] = ['1', '3'] # admin role
|
||||||
workflow_data["role_2"] = ['1', '2', '3'] # member role
|
workflow_data["role_2"] = ['1', '2', '3'] # member role
|
||||||
@ -681,7 +700,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
# handle
|
# handle
|
||||||
# handle
|
# handle
|
||||||
api.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
|
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
@ -689,25 +708,29 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
tenant_id=self.tenant.id).AndReturn(users)
|
tenant_id=self.tenant.id).AndReturn(users)
|
||||||
|
|
||||||
# admin user - try to remove all roles on current project, warning
|
# admin user - try to remove all roles on current project, warning
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '1',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn(roles)
|
.AndReturn(roles)
|
||||||
|
|
||||||
# member user 1 - has role 1, will remove it
|
# member user 1 - has role 1, will remove it
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '2',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[1],))
|
.AndReturn((roles[1],))
|
||||||
|
|
||||||
# member user 3 - has role 2
|
# member user 3 - has role 2
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '3',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[0],))
|
.AndReturn((roles[0],))
|
||||||
# add role 2
|
# add role 2
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='3',
|
user_id='3',
|
||||||
role_id='2')
|
role_id='2')
|
||||||
|
|
||||||
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
api.nova.tenant_quota_update(IsA(http.HttpRequest),
|
||||||
project.id,
|
project.id,
|
||||||
**updated_quota).AndRaise(self.exceptions.nova)
|
**updated_quota) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -726,15 +749,15 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
self.assertMessageCount(error=1, warning=0)
|
self.assertMessageCount(error=1, warning=0)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_get',
|
@test.create_stubs({api.keystone: ('tenant_get',
|
||||||
'tenant_update',
|
'tenant_update',
|
||||||
'get_default_role',
|
'get_default_role',
|
||||||
'roles_for_user',
|
'roles_for_user',
|
||||||
'remove_tenant_user_role',
|
'remove_tenant_user_role',
|
||||||
'add_tenant_user_role'),
|
'add_tenant_user_role',
|
||||||
quotas: ('get_tenant_quota_data',),
|
'user_list',
|
||||||
api.keystone: ('user_list',
|
'role_list'),
|
||||||
'role_list',)})
|
quotas: ('get_tenant_quota_data',)})
|
||||||
def test_update_project_member_update_error(self):
|
def test_update_project_member_update_error(self):
|
||||||
project = self.tenants.first()
|
project = self.tenants.first()
|
||||||
quota = self.quotas.first()
|
quota = self.quotas.first()
|
||||||
@ -743,19 +766,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
roles = self.roles.list()
|
roles = self.roles.list()
|
||||||
|
|
||||||
# get/init
|
# get/init
|
||||||
api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \
|
api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
|
admin=True) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota)
|
||||||
|
|
||||||
api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role)
|
api.keystone.get_default_role(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(default_role)
|
||||||
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users)
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
workflow_data = {}
|
workflow_data = {}
|
||||||
for user in users:
|
for user in users:
|
||||||
api.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(roles)
|
self.tenant.id).AndReturn(roles)
|
||||||
workflow_data["role_1"] = ['1', '3'] # admin role
|
workflow_data["role_1"] = ['1', '3'] # admin role
|
||||||
workflow_data["role_2"] = ['1', '2', '3'] # member role
|
workflow_data["role_2"] = ['1', '2', '3'] # member role
|
||||||
|
|
||||||
@ -775,7 +800,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
|
|
||||||
# handle
|
# handle
|
||||||
api.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \
|
||||||
.AndReturn(project)
|
.AndReturn(project)
|
||||||
|
|
||||||
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles)
|
||||||
@ -783,21 +808,24 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests):
|
|||||||
tenant_id=self.tenant.id).AndReturn(users)
|
tenant_id=self.tenant.id).AndReturn(users)
|
||||||
|
|
||||||
# admin user - try to remove all roles on current project, warning
|
# admin user - try to remove all roles on current project, warning
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '1',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn(roles)
|
.AndReturn(roles)
|
||||||
|
|
||||||
# member user 1 - has role 1, will remove it
|
# member user 1 - has role 1, will remove it
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '2',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[1],))
|
.AndReturn((roles[1],))
|
||||||
|
|
||||||
# member user 3 - has role 2
|
# member user 3 - has role 2
|
||||||
api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \
|
api.keystone.roles_for_user(IsA(http.HttpRequest), '3',
|
||||||
|
self.tenant.id) \
|
||||||
.AndReturn((roles[0],))
|
.AndReturn((roles[0],))
|
||||||
# add role 2
|
# add role 2
|
||||||
api.add_tenant_user_role(IsA(http.HttpRequest),
|
api.keystone.add_tenant_user_role(IsA(http.HttpRequest),
|
||||||
tenant_id=self.tenant.id,
|
tenant_id=self.tenant.id,
|
||||||
user_id='3',
|
user_id='3',
|
||||||
role_id='2')\
|
role_id='2')\
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
@ -169,7 +169,8 @@ class UpdateProjectView(workflows.WorkflowView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# get initial project info
|
# get initial project info
|
||||||
project_info = api.tenant_get(self.request, project_id, admin=True)
|
project_info = api.keystone.tenant_get(self.request, project_id,
|
||||||
|
admin=True)
|
||||||
for field in PROJECT_INFO_FIELDS:
|
for field in PROJECT_INFO_FIELDS:
|
||||||
initial[field] = getattr(project_info, field, None)
|
initial[field] = getattr(project_info, field, None)
|
||||||
|
|
||||||
@ -197,7 +198,8 @@ class CreateUserView(CreateView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(CreateUserView, self).get_context_data(**kwargs)
|
context = super(CreateUserView, self).get_context_data(**kwargs)
|
||||||
context['tenant_id'] = self.kwargs['tenant_id']
|
context['tenant_id'] = self.kwargs['tenant_id']
|
||||||
context['tenant_name'] = api.tenant_get(self.request,
|
context['tenant_name'] = api.keystone.tenant_get(
|
||||||
self.kwargs['tenant_id'],
|
self.request,
|
||||||
admin=True).name
|
self.kwargs['tenant_id'],
|
||||||
|
admin=True).name
|
||||||
return context
|
return context
|
||||||
|
@ -110,7 +110,7 @@ class UpdateProjectMembersAction(workflows.Action):
|
|||||||
|
|
||||||
# Get the default role
|
# Get the default role
|
||||||
try:
|
try:
|
||||||
default_role = api.get_default_role(self.request).id
|
default_role = api.keystone.get_default_role(self.request).id
|
||||||
except:
|
except:
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
err_msg,
|
err_msg,
|
||||||
@ -145,9 +145,9 @@ class UpdateProjectMembersAction(workflows.Action):
|
|||||||
if project_id:
|
if project_id:
|
||||||
for user in all_users:
|
for user in all_users:
|
||||||
try:
|
try:
|
||||||
roles = api.roles_for_user(self.request,
|
roles = api.keystone.roles_for_user(self.request,
|
||||||
user.id,
|
user.id,
|
||||||
project_id)
|
project_id)
|
||||||
except:
|
except:
|
||||||
exceptions.handle(request,
|
exceptions.handle(request,
|
||||||
err_msg,
|
err_msg,
|
||||||
@ -222,10 +222,10 @@ class CreateProject(workflows.Workflow):
|
|||||||
role_list = data["role_" + role.id]
|
role_list = data["role_" + role.id]
|
||||||
users_added = 0
|
users_added = 0
|
||||||
for user in role_list:
|
for user in role_list:
|
||||||
api.add_tenant_user_role(request,
|
api.keystone.add_tenant_user_role(request,
|
||||||
tenant_id=project_id,
|
tenant_id=project_id,
|
||||||
user_id=user,
|
user_id=user,
|
||||||
role_id=role.id)
|
role_id=role.id)
|
||||||
users_added += 1
|
users_added += 1
|
||||||
users_to_add -= users_added
|
users_to_add -= users_added
|
||||||
except:
|
except:
|
||||||
@ -287,11 +287,11 @@ class UpdateProject(workflows.Workflow):
|
|||||||
project_id = data['project_id']
|
project_id = data['project_id']
|
||||||
# update project info
|
# update project info
|
||||||
try:
|
try:
|
||||||
api.tenant_update(request,
|
api.keystone.tenant_update(request,
|
||||||
tenant_id=project_id,
|
tenant_id=project_id,
|
||||||
tenant_name=data['name'],
|
tenant_name=data['name'],
|
||||||
description=data['description'],
|
description=data['description'],
|
||||||
enabled=data['enabled'])
|
enabled=data['enabled'])
|
||||||
except:
|
except:
|
||||||
exceptions.handle(request, ignore=True)
|
exceptions.handle(request, ignore=True)
|
||||||
return False
|
return False
|
||||||
@ -305,9 +305,9 @@ class UpdateProject(workflows.Workflow):
|
|||||||
users_to_modify = len(project_members)
|
users_to_modify = len(project_members)
|
||||||
for user in project_members:
|
for user in project_members:
|
||||||
current_roles = [role for role in
|
current_roles = [role for role in
|
||||||
api.roles_for_user(self.request,
|
api.keystone.roles_for_user(self.request,
|
||||||
user.id,
|
user.id,
|
||||||
project_id)]
|
project_id)]
|
||||||
effective_roles = []
|
effective_roles = []
|
||||||
for role in available_roles:
|
for role in available_roles:
|
||||||
role_list = data["role_" + role.id]
|
role_list = data["role_" + role.id]
|
||||||
@ -315,10 +315,11 @@ class UpdateProject(workflows.Workflow):
|
|||||||
effective_roles.append(role)
|
effective_roles.append(role)
|
||||||
if role not in current_roles:
|
if role not in current_roles:
|
||||||
# user role has changed
|
# user role has changed
|
||||||
api.add_tenant_user_role(request,
|
api.keystone.add_tenant_user_role(
|
||||||
tenant_id=project_id,
|
request,
|
||||||
user_id=user.id,
|
tenant_id=project_id,
|
||||||
role_id=role.id)
|
user_id=user.id,
|
||||||
|
role_id=role.id)
|
||||||
else:
|
else:
|
||||||
# user role is unchanged
|
# user role is unchanged
|
||||||
current_roles.pop(current_roles.index(role))
|
current_roles.pop(current_roles.index(role))
|
||||||
@ -334,10 +335,11 @@ class UpdateProject(workflows.Workflow):
|
|||||||
else:
|
else:
|
||||||
# delete user's removed roles
|
# delete user's removed roles
|
||||||
for to_delete in current_roles:
|
for to_delete in current_roles:
|
||||||
api.remove_tenant_user_role(request,
|
api.keystone.remove_tenant_user_role(
|
||||||
tenant_id=project_id,
|
request,
|
||||||
user_id=user.id,
|
tenant_id=project_id,
|
||||||
role_id=to_delete.id)
|
user_id=user.id,
|
||||||
|
role_id=to_delete.id)
|
||||||
users_to_modify -= 1
|
users_to_modify -= 1
|
||||||
|
|
||||||
# add new roles to project
|
# add new roles to project
|
||||||
@ -350,10 +352,10 @@ class UpdateProject(workflows.Workflow):
|
|||||||
users_added = 0
|
users_added = 0
|
||||||
for user_id in role_list:
|
for user_id in role_list:
|
||||||
if not filter(lambda x: user_id == x.id, project_members):
|
if not filter(lambda x: user_id == x.id, project_members):
|
||||||
api.add_tenant_user_role(request,
|
api.keystone.add_tenant_user_role(request,
|
||||||
tenant_id=project_id,
|
tenant_id=project_id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
role_id=role.id)
|
role_id=role.id)
|
||||||
users_added += 1
|
users_added += 1
|
||||||
users_to_modify -= users_added
|
users_to_modify -= users_added
|
||||||
except:
|
except:
|
||||||
|
@ -45,7 +45,7 @@ class UpdateRow(tables.Row):
|
|||||||
ajax = True
|
ajax = True
|
||||||
|
|
||||||
def get_data(self, request, router_id):
|
def get_data(self, request, router_id):
|
||||||
router = api.router_get(request, router_id)
|
router = api.quantum.router_get(request, router_id)
|
||||||
return router
|
return router
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ class BaseUserForm(forms.SelfHandlingForm):
|
|||||||
# Populate tenant choices
|
# Populate tenant choices
|
||||||
tenant_choices = [('', _("Select a project"))]
|
tenant_choices = [('', _("Select a project"))]
|
||||||
|
|
||||||
for tenant in api.tenant_list(request, admin=True):
|
for tenant in api.keystone.tenant_list(request, admin=True):
|
||||||
if tenant.enabled:
|
if tenant.enabled:
|
||||||
tenant_choices.append((tenant.id, tenant.name))
|
tenant_choices.append((tenant.id, tenant.name))
|
||||||
self.fields['tenant_id'].choices = tenant_choices
|
self.fields['tenant_id'].choices = tenant_choices
|
||||||
@ -86,18 +86,18 @@ class CreateUserForm(BaseUserForm):
|
|||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
LOG.info('Creating user with name "%s"' % data['name'])
|
LOG.info('Creating user with name "%s"' % data['name'])
|
||||||
new_user = api.user_create(request,
|
new_user = api.keystone.user_create(request,
|
||||||
data['name'],
|
data['name'],
|
||||||
data['email'],
|
data['email'],
|
||||||
data['password'],
|
data['password'],
|
||||||
data['tenant_id'],
|
data['tenant_id'],
|
||||||
True)
|
True)
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('User "%s" was successfully created.')
|
_('User "%s" was successfully created.')
|
||||||
% data['name'])
|
% data['name'])
|
||||||
if data['role_id']:
|
if data['role_id']:
|
||||||
try:
|
try:
|
||||||
api.add_tenant_user_role(request,
|
api.keystone.add_tenant_user_role(request,
|
||||||
data['tenant_id'],
|
data['tenant_id'],
|
||||||
new_user.id,
|
new_user.id,
|
||||||
data['role_id'])
|
data['role_id'])
|
||||||
@ -129,7 +129,7 @@ class UpdateUserForm(BaseUserForm):
|
|||||||
def __init__(self, request, *args, **kwargs):
|
def __init__(self, request, *args, **kwargs):
|
||||||
super(UpdateUserForm, self).__init__(request, *args, **kwargs)
|
super(UpdateUserForm, self).__init__(request, *args, **kwargs)
|
||||||
|
|
||||||
if api.keystone_can_edit_user() is False:
|
if api.keystone.keystone_can_edit_user() is False:
|
||||||
for field in ('name', 'email', 'password', 'confirm_password'):
|
for field in ('name', 'email', 'password', 'confirm_password'):
|
||||||
self.fields.pop(field)
|
self.fields.pop(field)
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ class UpdateUserForm(BaseUserForm):
|
|||||||
@sensitive_variables('data', 'password')
|
@sensitive_variables('data', 'password')
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
failed, succeeded = [], []
|
failed, succeeded = [], []
|
||||||
user_is_editable = api.keystone_can_edit_user()
|
user_is_editable = api.keystone.keystone_can_edit_user()
|
||||||
user = data.pop('id')
|
user = data.pop('id')
|
||||||
tenant = data.pop('tenant_id')
|
tenant = data.pop('tenant_id')
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ class UpdateUserForm(BaseUserForm):
|
|||||||
# Update default tenant
|
# Update default tenant
|
||||||
msg_bits = (_('primary project'),)
|
msg_bits = (_('primary project'),)
|
||||||
try:
|
try:
|
||||||
api.user_update_tenant(request, user, tenant)
|
api.keystone.user_update_tenant(request, user, tenant)
|
||||||
succeeded.extend(msg_bits)
|
succeeded.extend(msg_bits)
|
||||||
except:
|
except:
|
||||||
failed.append(msg_bits)
|
failed.append(msg_bits)
|
||||||
@ -180,7 +180,7 @@ class UpdateUserForm(BaseUserForm):
|
|||||||
if password:
|
if password:
|
||||||
msg_bits = (_('password'),)
|
msg_bits = (_('password'),)
|
||||||
try:
|
try:
|
||||||
api.user_update_password(request, user, password)
|
api.keystone.user_update_password(request, user, password)
|
||||||
succeeded.extend(msg_bits)
|
succeeded.extend(msg_bits)
|
||||||
except:
|
except:
|
||||||
failed.extend(msg_bits)
|
failed.extend(msg_bits)
|
||||||
|
@ -22,7 +22,7 @@ class CreateUserLink(tables.LinkAction):
|
|||||||
classes = ("ajax-modal", "btn-create")
|
classes = ("ajax-modal", "btn-create")
|
||||||
|
|
||||||
def allowed(self, request, user):
|
def allowed(self, request, user):
|
||||||
if api.keystone_can_edit_user():
|
if api.keystone.keystone_can_edit_user():
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ class DeleteUsersAction(tables.DeleteAction):
|
|||||||
data_type_plural = _("Users")
|
data_type_plural = _("Users")
|
||||||
|
|
||||||
def allowed(self, request, datum):
|
def allowed(self, request, datum):
|
||||||
if not api.keystone_can_edit_user() or \
|
if not api.keystone.keystone_can_edit_user() or \
|
||||||
(datum and datum.id == request.user.id):
|
(datum and datum.id == request.user.id):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
@ -46,25 +46,27 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
self.assertTemplateUsed(res, 'admin/users/index.html')
|
self.assertTemplateUsed(res, 'admin/users/index.html')
|
||||||
self.assertItemsEqual(res.context['table'].data, self.users.list())
|
self.assertItemsEqual(res.context['table'].data, self.users.list())
|
||||||
|
|
||||||
@test.create_stubs({api: ('user_create',
|
@test.create_stubs({api.keystone: ('user_create',
|
||||||
'tenant_list',
|
'tenant_list',
|
||||||
'add_tenant_user_role'),
|
'add_tenant_user_role',
|
||||||
api.keystone: ('get_default_role',
|
'get_default_role',
|
||||||
'role_list')})
|
'role_list')})
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
role = self.roles.first()
|
role = self.roles.first()
|
||||||
|
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
api.user_create(IgnoreArg(),
|
.AndReturn(self.tenants.list())
|
||||||
user.name,
|
api.keystone.user_create(IgnoreArg(),
|
||||||
user.email,
|
user.name,
|
||||||
user.password,
|
user.email,
|
||||||
self.tenant.id,
|
user.password,
|
||||||
True).AndReturn(user)
|
self.tenant.id,
|
||||||
|
True).AndReturn(user)
|
||||||
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
||||||
api.keystone.get_default_role(IgnoreArg()).AndReturn(role)
|
api.keystone.get_default_role(IgnoreArg()).AndReturn(role)
|
||||||
api.add_tenant_user_role(IgnoreArg(), self.tenant.id, user.id, role.id)
|
api.keystone.add_tenant_user_role(IgnoreArg(), self.tenant.id,
|
||||||
|
user.id, role.id)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -80,12 +82,14 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertMessageCount(success=1)
|
self.assertMessageCount(success=1)
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_list',),
|
@test.create_stubs({api.keystone: ('tenant_list',
|
||||||
api.keystone: ('role_list', 'get_default_role')})
|
'role_list',
|
||||||
|
'get_default_role')})
|
||||||
def test_create_with_password_mismatch(self):
|
def test_create_with_password_mismatch(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
||||||
api.keystone.get_default_role(IgnoreArg()) \
|
api.keystone.get_default_role(IgnoreArg()) \
|
||||||
.AndReturn(self.roles.first())
|
.AndReturn(self.roles.first())
|
||||||
@ -104,12 +108,14 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
self.assertFormError(res, "form", None, ['Passwords do not match.'])
|
self.assertFormError(res, "form", None, ['Passwords do not match.'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_list',),
|
@test.create_stubs({api.keystone: ('tenant_list',
|
||||||
api.keystone: ('role_list', 'get_default_role')})
|
'role_list',
|
||||||
|
'get_default_role')})
|
||||||
def test_create_validation_for_password_too_short(self):
|
def test_create_validation_for_password_too_short(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
||||||
api.keystone.get_default_role(IgnoreArg()) \
|
api.keystone.get_default_role(IgnoreArg()) \
|
||||||
.AndReturn(self.roles.first())
|
.AndReturn(self.roles.first())
|
||||||
@ -131,12 +137,14 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
res, "form", 'password',
|
res, "form", 'password',
|
||||||
['Password must be between 8 and 18 characters.'])
|
['Password must be between 8 and 18 characters.'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_list',),
|
@test.create_stubs({api.keystone: ('tenant_list',
|
||||||
api.keystone: ('role_list', 'get_default_role')})
|
'role_list',
|
||||||
|
'get_default_role')})
|
||||||
def test_create_validation_for_password_too_long(self):
|
def test_create_validation_for_password_too_long(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
||||||
api.keystone.get_default_role(IgnoreArg()) \
|
api.keystone.get_default_role(IgnoreArg()) \
|
||||||
.AndReturn(self.roles.first())
|
.AndReturn(self.roles.first())
|
||||||
@ -158,32 +166,32 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
res, "form", 'password',
|
res, "form", 'password',
|
||||||
['Password must be between 8 and 18 characters.'])
|
['Password must be between 8 and 18 characters.'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('user_get',
|
@test.create_stubs({api.keystone: ('user_get',
|
||||||
'tenant_list',
|
'tenant_list',
|
||||||
'user_update_tenant',
|
'user_update_tenant',
|
||||||
'user_update_password'),
|
'user_update_password',
|
||||||
api.keystone: ('user_update',
|
'user_update',
|
||||||
'roles_for_user', )})
|
'roles_for_user', )})
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.user_get(IsA(http.HttpRequest), '1',
|
api.keystone.user_get(IsA(http.HttpRequest), '1',
|
||||||
admin=True).AndReturn(user)
|
admin=True).AndReturn(user)
|
||||||
api.tenant_list(IgnoreArg(),
|
api.keystone.tenant_list(IgnoreArg(),
|
||||||
admin=True).AndReturn(self.tenants.list())
|
admin=True).AndReturn(self.tenants.list())
|
||||||
api.keystone.user_update(IsA(http.HttpRequest),
|
api.keystone.user_update(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
email=u'test@example.com',
|
email=u'test@example.com',
|
||||||
name=u'test_user').AndReturn(None)
|
name=u'test_user').AndReturn(None)
|
||||||
api.user_update_tenant(IsA(http.HttpRequest),
|
api.keystone.user_update_tenant(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(None)
|
self.tenant.id).AndReturn(None)
|
||||||
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(None)
|
self.tenant.id).AndReturn(None)
|
||||||
api.user_update_password(IsA(http.HttpRequest),
|
api.keystone.user_update_password(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
IgnoreArg()).AndReturn(None)
|
IgnoreArg()).AndReturn(None)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -200,23 +208,24 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertMessageCount(warning=1)
|
self.assertMessageCount(warning=1)
|
||||||
|
|
||||||
@test.create_stubs({api: ('user_get',
|
@test.create_stubs({api.keystone: ('user_get',
|
||||||
'tenant_list',
|
'tenant_list',
|
||||||
'user_update_tenant',
|
'user_update_tenant',
|
||||||
'keystone_can_edit_user'),
|
'keystone_can_edit_user',
|
||||||
api.keystone: ('roles_for_user', )})
|
'roles_for_user', )})
|
||||||
def test_update_with_keystone_can_edit_user_false(self):
|
def test_update_with_keystone_can_edit_user_false(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.user_get(IsA(http.HttpRequest),
|
api.keystone.user_get(IsA(http.HttpRequest),
|
||||||
'1',
|
'1',
|
||||||
admin=True).AndReturn(user)
|
admin=True).AndReturn(user)
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
api.keystone_can_edit_user().AndReturn(False)
|
.AndReturn(self.tenants.list())
|
||||||
api.keystone_can_edit_user().AndReturn(False)
|
api.keystone.keystone_can_edit_user().AndReturn(False)
|
||||||
api.user_update_tenant(IsA(http.HttpRequest),
|
api.keystone.keystone_can_edit_user().AndReturn(False)
|
||||||
user.id,
|
api.keystone.user_update_tenant(IsA(http.HttpRequest),
|
||||||
self.tenant.id).AndReturn(None)
|
user.id,
|
||||||
|
self.tenant.id).AndReturn(None)
|
||||||
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
api.keystone.roles_for_user(IsA(http.HttpRequest),
|
||||||
user.id,
|
user.id,
|
||||||
self.tenant.id).AndReturn(None)
|
self.tenant.id).AndReturn(None)
|
||||||
@ -233,14 +242,14 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
self.assertNoFormErrors(res)
|
self.assertNoFormErrors(res)
|
||||||
self.assertMessageCount(warning=1)
|
self.assertMessageCount(warning=1)
|
||||||
|
|
||||||
@test.create_stubs({api: ('user_get', 'tenant_list')})
|
@test.create_stubs({api.keystone: ('user_get', 'tenant_list')})
|
||||||
def test_update_validation_for_password_too_short(self):
|
def test_update_validation_for_password_too_short(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.user_get(IsA(http.HttpRequest), '1',
|
api.keystone.user_get(IsA(http.HttpRequest), '1',
|
||||||
admin=True).AndReturn(user)
|
admin=True).AndReturn(user)
|
||||||
api.tenant_list(IgnoreArg(),
|
api.keystone.tenant_list(IgnoreArg(),
|
||||||
admin=True).AndReturn(self.tenants.list())
|
admin=True).AndReturn(self.tenants.list())
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -258,14 +267,14 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
res, "form", 'password',
|
res, "form", 'password',
|
||||||
['Password must be between 8 and 18 characters.'])
|
['Password must be between 8 and 18 characters.'])
|
||||||
|
|
||||||
@test.create_stubs({api: ('user_get', 'tenant_list')})
|
@test.create_stubs({api.keystone: ('user_get', 'tenant_list')})
|
||||||
def test_update_validation_for_password_too_long(self):
|
def test_update_validation_for_password_too_long(self):
|
||||||
user = self.users.get(id="1")
|
user = self.users.get(id="1")
|
||||||
|
|
||||||
api.user_get(IsA(http.HttpRequest), '1',
|
api.keystone.user_get(IsA(http.HttpRequest), '1',
|
||||||
admin=True).AndReturn(user)
|
admin=True).AndReturn(user)
|
||||||
api.tenant_list(IgnoreArg(),
|
api.keystone.tenant_list(IgnoreArg(),
|
||||||
admin=True).AndReturn(self.tenants.list())
|
admin=True).AndReturn(self.tenants.list())
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -360,11 +369,13 @@ class UsersViewTests(test.BaseAdminViewTests):
|
|||||||
|
|
||||||
|
|
||||||
class SeleniumTests(test.SeleniumAdminTestCase):
|
class SeleniumTests(test.SeleniumAdminTestCase):
|
||||||
@test.create_stubs({api: ('tenant_list',),
|
@test.create_stubs({api.keystone: ('tenant_list',
|
||||||
api.keystone: ('get_default_role', 'role_list',
|
'get_default_role',
|
||||||
|
'role_list',
|
||||||
'user_list')})
|
'user_list')})
|
||||||
def test_modal_create_user_with_passwords_not_matching(self):
|
def test_modal_create_user_with_passwords_not_matching(self):
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list())
|
||||||
api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list())
|
api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list())
|
||||||
api.keystone.get_default_role(IgnoreArg()) \
|
api.keystone.get_default_role(IgnoreArg()) \
|
||||||
@ -391,11 +402,12 @@ class SeleniumTests(test.SeleniumAdminTestCase):
|
|||||||
self.assertTrue("Passwords do not match" in body.text,
|
self.assertTrue("Passwords do not match" in body.text,
|
||||||
"Error message not found in body")
|
"Error message not found in body")
|
||||||
|
|
||||||
@test.create_stubs({api: ('tenant_list', 'user_get')})
|
@test.create_stubs({api.keystone: ('tenant_list', 'user_get')})
|
||||||
def test_update_user_with_passwords_not_matching(self):
|
def test_update_user_with_passwords_not_matching(self):
|
||||||
api.user_get(IsA(http.HttpRequest), '1',
|
api.keystone.user_get(IsA(http.HttpRequest), '1',
|
||||||
admin=True).AndReturn(self.user)
|
admin=True).AndReturn(self.user)
|
||||||
api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list())
|
api.keystone.tenant_list(IgnoreArg(), admin=True) \
|
||||||
|
.AndReturn(self.tenants.list())
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
self.selenium.get("%s%s" % (self.live_server_url, USER_UPDATE_URL))
|
self.selenium.get("%s%s" % (self.live_server_url, USER_UPDATE_URL))
|
||||||
|
@ -61,9 +61,9 @@ class UpdateView(forms.ModalFormView):
|
|||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
if not hasattr(self, "_object"):
|
||||||
try:
|
try:
|
||||||
self._object = api.user_get(self.request,
|
self._object = api.keystone.user_get(self.request,
|
||||||
self.kwargs['user_id'],
|
self.kwargs['user_id'],
|
||||||
admin=True)
|
admin=True)
|
||||||
except:
|
except:
|
||||||
redirect = reverse("horizon:admin:users:index")
|
redirect = reverse("horizon:admin:users:index")
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -38,7 +38,8 @@ class FloatingIpAllocate(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
fip = api.tenant_floating_ip_allocate(request, pool=data['pool'])
|
fip = api.nova.tenant_floating_ip_allocate(request,
|
||||||
|
pool=data['pool'])
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Allocated Floating IP %(ip)s.')
|
_('Allocated Floating IP %(ip)s.')
|
||||||
% {"ip": fip.ip})
|
% {"ip": fip.ip})
|
||||||
|
@ -53,7 +53,7 @@ class ReleaseIPs(tables.BatchAction):
|
|||||||
classes = ('btn-danger', 'btn-release')
|
classes = ('btn-danger', 'btn-release')
|
||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
api.tenant_floating_ip_release(request, obj_id)
|
api.nova.tenant_floating_ip_release(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class AssociateIP(tables.LinkAction):
|
class AssociateIP(tables.LinkAction):
|
||||||
@ -86,7 +86,8 @@ class DisassociateIP(tables.Action):
|
|||||||
def single(self, table, request, obj_id):
|
def single(self, table, request, obj_id):
|
||||||
try:
|
try:
|
||||||
fip = table.get_object_by_id(get_int_or_uuid(obj_id))
|
fip = table.get_object_by_id(get_int_or_uuid(obj_id))
|
||||||
api.server_remove_floating_ip(request, fip.instance_id, fip.id)
|
api.nova.server_remove_floating_ip(request, fip.instance_id,
|
||||||
|
fip.id)
|
||||||
LOG.info('Disassociating Floating IP "%s".' % obj_id)
|
LOG.info('Disassociating Floating IP "%s".' % obj_id)
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Successfully disassociated Floating IP: %s')
|
_('Successfully disassociated Floating IP: %s')
|
||||||
|
@ -127,23 +127,23 @@ class FloatingIpViewTests(test.TestCase):
|
|||||||
floating_ip = self.floating_ips.first()
|
floating_ip = self.floating_ips.first()
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_list')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_get')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_get')
|
||||||
self.mox.StubOutWithMock(api, 'server_remove_floating_ip')
|
self.mox.StubOutWithMock(api.nova, 'server_remove_floating_ip')
|
||||||
self.mox.StubOutWithMock(api.nova, 'server_list')
|
self.mox.StubOutWithMock(api.nova, 'server_list')
|
||||||
|
|
||||||
api.nova.server_list(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest),
|
||||||
all_tenants=True).AndReturn(self.servers.list())
|
all_tenants=True).AndReturn(self.servers.list())
|
||||||
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.keypairs.list())
|
.AndReturn(self.keypairs.list())
|
||||||
api.security_group_list(IsA(http.HttpRequest)) \
|
api.nova.security_group_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.security_groups.list())
|
.AndReturn(self.security_groups.list())
|
||||||
api.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.floating_ips.list())
|
.AndReturn(self.floating_ips.list())
|
||||||
api.server_remove_floating_ip(IsA(http.HttpRequest),
|
api.nova.server_remove_floating_ip(IsA(http.HttpRequest),
|
||||||
server.id,
|
server.id,
|
||||||
floating_ip.id)
|
floating_ip.id)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
action = "floating_ips__disassociate__%s" % floating_ip.id
|
action = "floating_ips__disassociate__%s" % floating_ip.id
|
||||||
@ -155,25 +155,25 @@ class FloatingIpViewTests(test.TestCase):
|
|||||||
floating_ip = self.floating_ips.first()
|
floating_ip = self.floating_ips.first()
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_list')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_get')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_get')
|
||||||
self.mox.StubOutWithMock(api, 'server_remove_floating_ip')
|
self.mox.StubOutWithMock(api.nova, 'server_remove_floating_ip')
|
||||||
self.mox.StubOutWithMock(api.nova, 'server_list')
|
self.mox.StubOutWithMock(api.nova, 'server_list')
|
||||||
|
|
||||||
api.nova.server_list(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest),
|
||||||
all_tenants=True).AndReturn(self.servers.list())
|
all_tenants=True).AndReturn(self.servers.list())
|
||||||
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.keypairs.list())
|
.AndReturn(self.keypairs.list())
|
||||||
api.security_group_list(IsA(http.HttpRequest)) \
|
api.nova.security_group_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.security_groups.list())
|
.AndReturn(self.security_groups.list())
|
||||||
api.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.floating_ips.list())
|
.AndReturn(self.floating_ips.list())
|
||||||
|
|
||||||
api.server_remove_floating_ip(IsA(http.HttpRequest),
|
api.nova.server_remove_floating_ip(IsA(http.HttpRequest),
|
||||||
server.id,
|
server.id,
|
||||||
floating_ip.id) \
|
floating_ip.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
action = "floating_ips__disassociate__%s" % floating_ip.id
|
action = "floating_ips__disassociate__%s" % floating_ip.id
|
||||||
|
@ -59,7 +59,7 @@ class AllocateView(forms.ModalFormView):
|
|||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
try:
|
try:
|
||||||
pools = api.floating_ip_pools_list(self.request)
|
pools = api.nova.floating_ip_pools_list(self.request)
|
||||||
except:
|
except:
|
||||||
pools = []
|
pools = []
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -54,9 +54,9 @@ class ImportKeypair(forms.SelfHandlingForm):
|
|||||||
try:
|
try:
|
||||||
# Remove any new lines in the public key
|
# Remove any new lines in the public key
|
||||||
data['public_key'] = NEW_LINES.sub("", data['public_key'])
|
data['public_key'] = NEW_LINES.sub("", data['public_key'])
|
||||||
keypair = api.keypair_import(request,
|
keypair = api.nova.keypair_import(request,
|
||||||
data['name'],
|
data['name'],
|
||||||
data['public_key'])
|
data['public_key'])
|
||||||
messages.success(request, _('Successfully imported public key: %s')
|
messages.success(request, _('Successfully imported public key: %s')
|
||||||
% data['name'])
|
% data['name'])
|
||||||
return keypair
|
return keypair
|
||||||
|
@ -36,15 +36,15 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
|
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_delete')
|
self.mox.StubOutWithMock(api.nova, 'keypair_delete')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_list')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'server_list')
|
self.mox.StubOutWithMock(api.nova, 'server_list')
|
||||||
|
|
||||||
api.nova.server_list(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest),
|
||||||
all_tenants=True).AndReturn(self.servers.list())
|
all_tenants=True).AndReturn(self.servers.list())
|
||||||
api.security_group_list(IsA(http.HttpRequest)) \
|
api.nova.security_group_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.security_groups.list())
|
.AndReturn(self.security_groups.list())
|
||||||
api.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.floating_ips.list())
|
.AndReturn(self.floating_ips.list())
|
||||||
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.keypairs.list())
|
.AndReturn(self.keypairs.list())
|
||||||
@ -59,15 +59,15 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
keypair = self.keypairs.first()
|
keypair = self.keypairs.first()
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_delete')
|
self.mox.StubOutWithMock(api.nova, 'keypair_delete')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_list')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'server_list')
|
self.mox.StubOutWithMock(api.nova, 'server_list')
|
||||||
|
|
||||||
api.nova.server_list(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest),
|
||||||
all_tenants=True).AndReturn(self.servers.list())
|
all_tenants=True).AndReturn(self.servers.list())
|
||||||
api.security_group_list(IsA(http.HttpRequest)) \
|
api.nova.security_group_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.security_groups.list())
|
.AndReturn(self.security_groups.list())
|
||||||
api.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.floating_ips.list())
|
.AndReturn(self.floating_ips.list())
|
||||||
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
api.nova.keypair_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(self.keypairs.list())
|
.AndReturn(self.keypairs.list())
|
||||||
@ -98,9 +98,9 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
keypair = self.keypairs.first()
|
keypair = self.keypairs.first()
|
||||||
keypair.private_key = "secret"
|
keypair.private_key = "secret"
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'keypair_create')
|
self.mox.StubOutWithMock(api.nova, 'keypair_create')
|
||||||
api.keypair_create(IsA(http.HttpRequest),
|
api.nova.keypair_create(IsA(http.HttpRequest),
|
||||||
keypair.name).AndReturn(keypair)
|
keypair.name).AndReturn(keypair)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
context = {'keypair_name': keypair.name}
|
context = {'keypair_name': keypair.name}
|
||||||
@ -110,15 +110,14 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertTrue(res.has_header('content-disposition'))
|
self.assertTrue(res.has_header('content-disposition'))
|
||||||
|
|
||||||
@test.create_stubs({api: ("keypair_import",)})
|
@test.create_stubs({api.nova: ("keypair_import",)})
|
||||||
def test_import_keypair(self):
|
def test_import_keypair(self):
|
||||||
key1_name = "new key pair"
|
key1_name = "new key pair"
|
||||||
public_key = "ssh-rsa ABCDEFGHIJKLMNOPQR\r\n" \
|
public_key = "ssh-rsa ABCDEFGHIJKLMNOPQR\r\n" \
|
||||||
"STUVWXYZ1234567890\r" \
|
"STUVWXYZ1234567890\r" \
|
||||||
"XXYYZZ user@computer\n\n"
|
"XXYYZZ user@computer\n\n"
|
||||||
api.keypair_import(IsA(http.HttpRequest), key1_name,
|
api.nova.keypair_import(IsA(http.HttpRequest), key1_name,
|
||||||
public_key.replace("\r", "")
|
public_key.replace("\r", "").replace("\n", ""))
|
||||||
.replace("\n", ""))
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'ImportKeypair',
|
formData = {'method': 'ImportKeypair',
|
||||||
@ -132,8 +131,8 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
key_name = "new key pair"
|
key_name = "new key pair"
|
||||||
public_key = "ABCDEF"
|
public_key = "ABCDEF"
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'keypair_import')
|
self.mox.StubOutWithMock(api.nova, 'keypair_import')
|
||||||
api.keypair_import(IsA(http.HttpRequest), key_name, public_key) \
|
api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -149,8 +148,8 @@ class KeyPairViewTests(test.TestCase):
|
|||||||
def test_generate_keypair_exception(self):
|
def test_generate_keypair_exception(self):
|
||||||
keypair = self.keypairs.first()
|
keypair = self.keypairs.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'keypair_create')
|
self.mox.StubOutWithMock(api.nova, 'keypair_create')
|
||||||
api.keypair_create(IsA(http.HttpRequest), keypair.name) \
|
api.nova.keypair_create(IsA(http.HttpRequest), keypair.name) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ class DownloadView(TemplateView):
|
|||||||
class GenerateView(View):
|
class GenerateView(View):
|
||||||
def get(self, request, keypair_name=None):
|
def get(self, request, keypair_name=None):
|
||||||
try:
|
try:
|
||||||
keypair = api.keypair_create(request, keypair_name)
|
keypair = api.nova.keypair_create(request, keypair_name)
|
||||||
except:
|
except:
|
||||||
redirect = reverse('horizon:project:access_and_security:index')
|
redirect = reverse('horizon:project:access_and_security:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -43,9 +43,9 @@ class CreateGroup(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
sg = api.security_group_create(request,
|
sg = api.nova.security_group_create(request,
|
||||||
data['name'],
|
data['name'],
|
||||||
data['description'])
|
data['description'])
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Successfully created security group: %s')
|
_('Successfully created security group: %s')
|
||||||
% data['name'])
|
% data['name'])
|
||||||
@ -161,13 +161,14 @@ class AddRule(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
rule = api.security_group_rule_create(request,
|
rule = api.nova.security_group_rule_create(
|
||||||
data['security_group_id'],
|
request,
|
||||||
data['ip_protocol'],
|
data['security_group_id'],
|
||||||
data['from_port'],
|
data['ip_protocol'],
|
||||||
data['to_port'],
|
data['from_port'],
|
||||||
data['cidr'],
|
data['to_port'],
|
||||||
data['source_group'])
|
data['cidr'],
|
||||||
|
data['source_group'])
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Successfully added rule: %s') % unicode(rule))
|
_('Successfully added rule: %s') % unicode(rule))
|
||||||
return rule
|
return rule
|
||||||
|
@ -37,7 +37,7 @@ class DeleteGroup(tables.DeleteAction):
|
|||||||
return security_group.name != 'default'
|
return security_group.name != 'default'
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.security_group_delete(request, obj_id)
|
api.nova.security_group_delete(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class CreateGroup(tables.LinkAction):
|
class CreateGroup(tables.LinkAction):
|
||||||
@ -73,7 +73,7 @@ class DeleteRule(tables.DeleteAction):
|
|||||||
data_type_plural = _("Rules")
|
data_type_plural = _("Rules")
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.security_group_rule_delete(request, obj_id)
|
api.nova.security_group_rule_delete(request, obj_id)
|
||||||
|
|
||||||
def get_success_url(self, request):
|
def get_success_url(self, request):
|
||||||
return reverse("horizon:project:access_and_security:index")
|
return reverse("horizon:project:access_and_security:index")
|
||||||
|
@ -53,10 +53,11 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_security_groups_post(self):
|
def test_create_security_groups_post(self):
|
||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
self.mox.StubOutWithMock(api, 'security_group_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_create')
|
||||||
api.security_group_create(IsA(http.HttpRequest),
|
api.nova.security_group_create(IsA(http.HttpRequest),
|
||||||
sec_group.name,
|
sec_group.name,
|
||||||
sec_group.description).AndReturn(sec_group)
|
sec_group.description) \
|
||||||
|
.AndReturn(sec_group)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'CreateGroup',
|
formData = {'method': 'CreateGroup',
|
||||||
@ -67,11 +68,11 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_security_groups_post_exception(self):
|
def test_create_security_groups_post_exception(self):
|
||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
self.mox.StubOutWithMock(api, 'security_group_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_create')
|
||||||
api.security_group_create(IsA(http.HttpRequest),
|
api.nova.security_group_create(IsA(http.HttpRequest),
|
||||||
sec_group.name,
|
sec_group.name,
|
||||||
sec_group.description) \
|
sec_group.description) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'CreateGroup',
|
formData = {'method': 'CreateGroup',
|
||||||
@ -83,7 +84,7 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_security_groups_post_wrong_name(self):
|
def test_create_security_groups_post_wrong_name(self):
|
||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
self.mox.StubOutWithMock(api, 'security_group_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_create')
|
||||||
fail_name = sec_group.name + ' invalid'
|
fail_name = sec_group.name + ' invalid'
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -99,12 +100,12 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_get')
|
self.mox.StubOutWithMock(api.nova, 'security_group_get')
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(self.edit_url)
|
res = self.client.get(self.edit_url)
|
||||||
@ -116,11 +117,12 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
def test_edit_rules_get_exception(self):
|
def test_edit_rules_get_exception(self):
|
||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_get')
|
self.mox.StubOutWithMock(api.nova, 'security_group_get')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
|
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndRaise(self.exceptions.nova)
|
sec_group.id) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(self.edit_url)
|
res = self.client.get(self.edit_url)
|
||||||
@ -131,16 +133,16 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_rule_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_rule_create')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_rule_create(IsA(http.HttpRequest),
|
api.nova.security_group_rule_create(IsA(http.HttpRequest),
|
||||||
sec_group.id,
|
sec_group.id,
|
||||||
rule.ip_protocol,
|
rule.ip_protocol,
|
||||||
int(rule.from_port),
|
int(rule.from_port),
|
||||||
int(rule.to_port),
|
int(rule.to_port),
|
||||||
rule.ip_range['cidr'],
|
rule.ip_range['cidr'],
|
||||||
None).AndReturn(rule)
|
None).AndReturn(rule)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -160,11 +162,11 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_get')
|
self.mox.StubOutWithMock(api.nova, 'security_group_get')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -185,17 +187,18 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
rule = self.security_group_rules.get(id=3)
|
rule = self.security_group_rules.get(id=3)
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_rule_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_rule_create')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_rule_create(IsA(http.HttpRequest),
|
api.nova.security_group_rule_create(
|
||||||
sec_group.id,
|
IsA(http.HttpRequest),
|
||||||
rule.ip_protocol,
|
sec_group.id,
|
||||||
int(rule.from_port),
|
rule.ip_protocol,
|
||||||
int(rule.to_port),
|
int(rule.from_port),
|
||||||
None,
|
int(rule.to_port),
|
||||||
u'%s' % sec_group.id).AndReturn(rule)
|
None,
|
||||||
api.security_group_list(
|
u'%s' % sec_group.id).AndReturn(rule)
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
api.nova.security_group_list(
|
||||||
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'AddRule',
|
formData = {'method': 'AddRule',
|
||||||
@ -213,12 +216,12 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_get')
|
self.mox.StubOutWithMock(api.nova, 'security_group_get')
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'AddRule',
|
formData = {'method': 'AddRule',
|
||||||
@ -232,28 +235,29 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
self.assertNoMessages()
|
self.assertNoMessages()
|
||||||
self.assertContains(res, "greater than or equal to")
|
self.assertContains(res, "greater than or equal to")
|
||||||
|
|
||||||
@test.create_stubs({api: ('security_group_get', 'security_group_list')})
|
@test.create_stubs({api.nova: ('security_group_get',
|
||||||
|
'security_group_list')})
|
||||||
def test_edit_rules_invalid_icmp_rule(self):
|
def test_edit_rules_invalid_icmp_rule(self):
|
||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
icmp_rule = self.security_group_rules.list()[1]
|
icmp_rule = self.security_group_rules.list()[1]
|
||||||
|
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
api.security_group_get(IsA(http.HttpRequest),
|
api.nova.security_group_get(IsA(http.HttpRequest),
|
||||||
sec_group.id).AndReturn(sec_group)
|
sec_group.id).AndReturn(sec_group)
|
||||||
api.security_group_list(
|
api.nova.security_group_list(
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'AddRule',
|
formData = {'method': 'AddRule',
|
||||||
@ -305,17 +309,18 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group_list = self.security_groups.list()
|
sec_group_list = self.security_groups.list()
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_rule_create')
|
self.mox.StubOutWithMock(api.nova, 'security_group_rule_create')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
api.security_group_rule_create(IsA(http.HttpRequest),
|
api.nova.security_group_rule_create(
|
||||||
sec_group.id,
|
IsA(http.HttpRequest),
|
||||||
rule.ip_protocol,
|
sec_group.id,
|
||||||
int(rule.from_port),
|
rule.ip_protocol,
|
||||||
int(rule.to_port),
|
int(rule.from_port),
|
||||||
rule.ip_range['cidr'],
|
int(rule.to_port),
|
||||||
None).AndRaise(self.exceptions.nova)
|
rule.ip_range['cidr'],
|
||||||
api.security_group_list(
|
None).AndRaise(self.exceptions.nova)
|
||||||
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
api.nova.security_group_list(
|
||||||
|
IsA(http.HttpRequest)).AndReturn(sec_group_list)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'AddRule',
|
formData = {'method': 'AddRule',
|
||||||
@ -332,8 +337,8 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
sec_group = self.security_groups.first()
|
sec_group = self.security_groups.first()
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_rule_delete')
|
self.mox.StubOutWithMock(api.nova, 'security_group_rule_delete')
|
||||||
api.security_group_rule_delete(IsA(http.HttpRequest), rule.id)
|
api.nova.security_group_rule_delete(IsA(http.HttpRequest), rule.id)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
form_data = {"action": "rules__delete__%s" % rule.id}
|
form_data = {"action": "rules__delete__%s" % rule.id}
|
||||||
@ -345,9 +350,10 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
def test_edit_rules_delete_rule_exception(self):
|
def test_edit_rules_delete_rule_exception(self):
|
||||||
rule = self.security_group_rules.first()
|
rule = self.security_group_rules.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_rule_delete')
|
self.mox.StubOutWithMock(api.nova, 'security_group_rule_delete')
|
||||||
api.security_group_rule_delete(IsA(http.HttpRequest),
|
api.nova.security_group_rule_delete(
|
||||||
rule.id).AndRaise(self.exceptions.nova)
|
IsA(http.HttpRequest),
|
||||||
|
rule.id).AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
form_data = {"action": "rules__delete__%s" % rule.id}
|
form_data = {"action": "rules__delete__%s" % rule.id}
|
||||||
@ -360,8 +366,8 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
def test_delete_group(self):
|
def test_delete_group(self):
|
||||||
sec_group = self.security_groups.get(name="other_group")
|
sec_group = self.security_groups.get(name="other_group")
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_delete')
|
self.mox.StubOutWithMock(api.nova, 'security_group_delete')
|
||||||
api.security_group_delete(IsA(http.HttpRequest), sec_group.id)
|
api.nova.security_group_delete(IsA(http.HttpRequest), sec_group.id)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
form_data = {"action": "security_groups__delete__%s" % sec_group.id}
|
form_data = {"action": "security_groups__delete__%s" % sec_group.id}
|
||||||
@ -374,9 +380,10 @@ class SecurityGroupsViewTests(test.TestCase):
|
|||||||
def test_delete_group_exception(self):
|
def test_delete_group_exception(self):
|
||||||
sec_group = self.security_groups.get(name="other_group")
|
sec_group = self.security_groups.get(name="other_group")
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'security_group_delete')
|
self.mox.StubOutWithMock(api.nova, 'security_group_delete')
|
||||||
api.security_group_delete(IsA(http.HttpRequest),
|
api.nova.security_group_delete(
|
||||||
sec_group.id).AndRaise(self.exceptions.nova)
|
IsA(http.HttpRequest),
|
||||||
|
sec_group.id).AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -49,8 +49,8 @@ class EditRulesView(tables.DataTableView, forms.ModalFormView):
|
|||||||
def get_data(self):
|
def get_data(self):
|
||||||
security_group_id = int(self.kwargs['security_group_id'])
|
security_group_id = int(self.kwargs['security_group_id'])
|
||||||
try:
|
try:
|
||||||
self.object = api.security_group_get(self.request,
|
self.object = api.nova.security_group_get(self.request,
|
||||||
security_group_id)
|
security_group_id)
|
||||||
rules = [api.nova.SecurityGroupRule(rule) for
|
rules = [api.nova.SecurityGroupRule(rule) for
|
||||||
rule in self.object.rules]
|
rule in self.object.rules]
|
||||||
except:
|
except:
|
||||||
@ -67,7 +67,7 @@ class EditRulesView(tables.DataTableView, forms.ModalFormView):
|
|||||||
kwargs = super(EditRulesView, self).get_form_kwargs()
|
kwargs = super(EditRulesView, self).get_form_kwargs()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
groups = api.security_group_list(self.request)
|
groups = api.nova.security_group_list(self.request)
|
||||||
except:
|
except:
|
||||||
groups = []
|
groups = []
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -34,17 +34,18 @@ class AccessAndSecurityTests(test.TestCase):
|
|||||||
keypairs = self.keypairs.list()
|
keypairs = self.keypairs.list()
|
||||||
sec_groups = self.security_groups.list()
|
sec_groups = self.security_groups.list()
|
||||||
floating_ips = self.floating_ips.list()
|
floating_ips = self.floating_ips.list()
|
||||||
self.mox.StubOutWithMock(api, 'tenant_floating_ip_list')
|
self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list')
|
||||||
self.mox.StubOutWithMock(api, 'security_group_list')
|
self.mox.StubOutWithMock(api.nova, 'security_group_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
self.mox.StubOutWithMock(api.nova, 'keypair_list')
|
||||||
self.mox.StubOutWithMock(api.nova, 'server_list')
|
self.mox.StubOutWithMock(api.nova, 'server_list')
|
||||||
|
|
||||||
api.nova.server_list(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest),
|
||||||
all_tenants=True).AndReturn(self.servers.list())
|
all_tenants=True).AndReturn(self.servers.list())
|
||||||
api.nova.keypair_list(IsA(http.HttpRequest)).AndReturn(keypairs)
|
api.nova.keypair_list(IsA(http.HttpRequest)).AndReturn(keypairs)
|
||||||
api.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(floating_ips)
|
.AndReturn(floating_ips)
|
||||||
api.security_group_list(IsA(http.HttpRequest)).AndReturn(sec_groups)
|
api.nova.security_group_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(sec_groups)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ class IndexView(tables.MultiTableView):
|
|||||||
|
|
||||||
def get_security_groups_data(self):
|
def get_security_groups_data(self):
|
||||||
try:
|
try:
|
||||||
security_groups = api.security_group_list(self.request)
|
security_groups = api.nova.security_group_list(self.request)
|
||||||
except:
|
except:
|
||||||
security_groups = []
|
security_groups = []
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
@ -62,7 +62,7 @@ class IndexView(tables.MultiTableView):
|
|||||||
|
|
||||||
def get_floating_ips_data(self):
|
def get_floating_ips_data(self):
|
||||||
try:
|
try:
|
||||||
floating_ips = api.tenant_floating_ip_list(self.request)
|
floating_ips = api.nova.tenant_floating_ip_list(self.request)
|
||||||
except:
|
except:
|
||||||
floating_ips = []
|
floating_ips = []
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -53,7 +53,7 @@ class CreateContainer(forms.SelfHandlingForm):
|
|||||||
try:
|
try:
|
||||||
if not data['parent']:
|
if not data['parent']:
|
||||||
# Create a container
|
# Create a container
|
||||||
api.swift_create_container(request, data["name"])
|
api.swift.swift_create_container(request, data["name"])
|
||||||
messages.success(request, _("Container created successfully."))
|
messages.success(request, _("Container created successfully."))
|
||||||
else:
|
else:
|
||||||
# Create a pseudo-folder
|
# Create a pseudo-folder
|
||||||
@ -62,9 +62,9 @@ class CreateContainer(forms.SelfHandlingForm):
|
|||||||
subfolder_name = "/".join([bit for bit
|
subfolder_name = "/".join([bit for bit
|
||||||
in (remainder, data['name'])
|
in (remainder, data['name'])
|
||||||
if bit])
|
if bit])
|
||||||
api.swift_create_subfolder(request,
|
api.swift.swift_create_subfolder(request,
|
||||||
container,
|
container,
|
||||||
subfolder_name)
|
subfolder_name)
|
||||||
messages.success(request, _("Folder created successfully."))
|
messages.success(request, _("Folder created successfully."))
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
@ -88,10 +88,10 @@ class UploadObject(forms.SelfHandlingForm):
|
|||||||
else:
|
else:
|
||||||
object_path = data['name']
|
object_path = data['name']
|
||||||
try:
|
try:
|
||||||
obj = api.swift_upload_object(request,
|
obj = api.swift.swift_upload_object(request,
|
||||||
data['container_name'],
|
data['container_name'],
|
||||||
object_path,
|
object_path,
|
||||||
object_file)
|
object_file)
|
||||||
messages.success(request, _("Object was successfully uploaded."))
|
messages.success(request, _("Object was successfully uploaded."))
|
||||||
return obj
|
return obj
|
||||||
except:
|
except:
|
||||||
@ -143,11 +143,11 @@ class CopyObject(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
# Now copy the object itself.
|
# Now copy the object itself.
|
||||||
try:
|
try:
|
||||||
api.swift_copy_object(request,
|
api.swift.swift_copy_object(request,
|
||||||
orig_container,
|
orig_container,
|
||||||
orig_object,
|
orig_object,
|
||||||
new_container,
|
new_container,
|
||||||
new_path)
|
new_path)
|
||||||
dest = "%s/%s" % (new_container, path)
|
dest = "%s/%s" % (new_container, path)
|
||||||
vals = {"dest": dest.rstrip("/"),
|
vals = {"dest": dest.rstrip("/"),
|
||||||
"orig": orig_object.split("/")[-1],
|
"orig": orig_object.split("/")[-1],
|
||||||
|
@ -24,7 +24,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from horizon import tables
|
from horizon import tables
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import FOLDER_DELIMITER
|
from openstack_dashboard.api.swift import FOLDER_DELIMITER
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -42,7 +42,7 @@ class DeleteContainer(tables.DeleteAction):
|
|||||||
success_url = "horizon:project:containers:index"
|
success_url = "horizon:project:containers:index"
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.swift_delete_container(request, obj_id)
|
api.swift.swift_delete_container(request, obj_id)
|
||||||
|
|
||||||
def get_success_url(self, request=None):
|
def get_success_url(self, request=None):
|
||||||
"""
|
"""
|
||||||
@ -141,7 +141,7 @@ class DeleteObject(tables.DeleteAction):
|
|||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
obj = self.table.get_object_by_id(obj_id)
|
obj = self.table.get_object_by_id(obj_id)
|
||||||
container_name = obj.container_name
|
container_name = obj.container_name
|
||||||
api.swift_delete_object(request, container_name, obj_id)
|
api.swift.swift_delete_object(request, container_name, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class DeleteSubfolder(DeleteObject):
|
class DeleteSubfolder(DeleteObject):
|
||||||
@ -190,10 +190,10 @@ class ObjectFilterAction(tables.FilterAction):
|
|||||||
container = self.table.kwargs['container_name']
|
container = self.table.kwargs['container_name']
|
||||||
subfolder = self.table.kwargs['subfolder_path']
|
subfolder = self.table.kwargs['subfolder_path']
|
||||||
prefix = wrap_delimiter(subfolder) if subfolder else ''
|
prefix = wrap_delimiter(subfolder) if subfolder else ''
|
||||||
self.filtered_data = api.swift_filter_objects(request,
|
self.filtered_data = api.swift.swift_filter_objects(request,
|
||||||
filter_string,
|
filter_string,
|
||||||
container,
|
container,
|
||||||
prefix=prefix)
|
prefix=prefix)
|
||||||
return self.filtered_data
|
return self.filtered_data
|
||||||
|
|
||||||
def filter_subfolders_data(self, table, objects, filter_string):
|
def filter_subfolders_data(self, table, objects, filter_string):
|
||||||
|
@ -36,11 +36,11 @@ CONTAINER_INDEX_URL = reverse('horizon:project:containers:index')
|
|||||||
|
|
||||||
|
|
||||||
class SwiftTests(test.TestCase):
|
class SwiftTests(test.TestCase):
|
||||||
@test.create_stubs({api: ('swift_get_containers',)})
|
@test.create_stubs({api.swift: ('swift_get_containers',)})
|
||||||
def test_index_no_container_selected(self):
|
def test_index_no_container_selected(self):
|
||||||
containers = self.containers.list()
|
containers = self.containers.list()
|
||||||
api.swift_get_containers(IsA(http.HttpRequest), marker=None) \
|
api.swift.swift_get_containers(IsA(http.HttpRequest), marker=None) \
|
||||||
.AndReturn((containers, False))
|
.AndReturn((containers, False))
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(CONTAINER_INDEX_URL)
|
res = self.client.get(CONTAINER_INDEX_URL)
|
||||||
@ -50,10 +50,10 @@ class SwiftTests(test.TestCase):
|
|||||||
resp_containers = res.context['table'].data
|
resp_containers = res.context['table'].data
|
||||||
self.assertEqual(len(resp_containers), len(containers))
|
self.assertEqual(len(resp_containers), len(containers))
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_delete_container',)})
|
@test.create_stubs({api.swift: ('swift_delete_container',)})
|
||||||
def test_delete_container(self):
|
def test_delete_container(self):
|
||||||
container = self.containers.get(name=u"container_two\u6346")
|
container = self.containers.get(name=u"container_two\u6346")
|
||||||
api.swift_delete_container(IsA(http.HttpRequest), container.name)
|
api.swift.swift_delete_container(IsA(http.HttpRequest), container.name)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
action_string = u"containers__delete__%s" % container.name
|
action_string = u"containers__delete__%s" % container.name
|
||||||
@ -63,13 +63,13 @@ class SwiftTests(test.TestCase):
|
|||||||
handled = table.maybe_handle()
|
handled = table.maybe_handle()
|
||||||
self.assertEqual(handled['location'], CONTAINER_INDEX_URL)
|
self.assertEqual(handled['location'], CONTAINER_INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_delete_container',)})
|
@test.create_stubs({api.swift: ('swift_delete_container',)})
|
||||||
def test_delete_container_nonempty(self):
|
def test_delete_container_nonempty(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
exc = self.exceptions.swift
|
exc = self.exceptions.swift
|
||||||
exc.silence_logging = True
|
exc.silence_logging = True
|
||||||
api.swift_delete_container(IsA(http.HttpRequest),
|
api.swift.swift_delete_container(IsA(http.HttpRequest),
|
||||||
container.name).AndRaise(exc)
|
container.name).AndRaise(exc)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
action_string = u"containers__delete__%s" % container.name
|
action_string = u"containers__delete__%s" % container.name
|
||||||
@ -83,10 +83,10 @@ class SwiftTests(test.TestCase):
|
|||||||
res = self.client.get(reverse('horizon:project:containers:create'))
|
res = self.client.get(reverse('horizon:project:containers:create'))
|
||||||
self.assertTemplateUsed(res, 'project/containers/create.html')
|
self.assertTemplateUsed(res, 'project/containers/create.html')
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_create_container',)})
|
@test.create_stubs({api.swift: ('swift_create_container',)})
|
||||||
def test_create_container_post(self):
|
def test_create_container_post(self):
|
||||||
api.swift_create_container(IsA(http.HttpRequest),
|
api.swift.swift_create_container(IsA(http.HttpRequest),
|
||||||
self.containers.first().name)
|
self.containers.first().name)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'name': self.containers.first().name,
|
formData = {'name': self.containers.first().name,
|
||||||
@ -97,16 +97,17 @@ class SwiftTests(test.TestCase):
|
|||||||
args=[wrap_delimiter(self.containers.first().name)])
|
args=[wrap_delimiter(self.containers.first().name)])
|
||||||
self.assertRedirectsNoFollow(res, url)
|
self.assertRedirectsNoFollow(res, url)
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_get_containers', 'swift_get_objects')})
|
@test.create_stubs({api.swift: ('swift_get_containers',
|
||||||
|
'swift_get_objects')})
|
||||||
def test_index_container_selected(self):
|
def test_index_container_selected(self):
|
||||||
containers = (self.containers.list(), False)
|
containers = (self.containers.list(), False)
|
||||||
ret = (self.objects.list(), False)
|
ret = (self.objects.list(), False)
|
||||||
api.swift_get_containers(IsA(http.HttpRequest),
|
api.swift.swift_get_containers(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn(containers)
|
marker=None).AndReturn(containers)
|
||||||
api.swift_get_objects(IsA(http.HttpRequest),
|
api.swift.swift_get_objects(IsA(http.HttpRequest),
|
||||||
self.containers.first().name,
|
self.containers.first().name,
|
||||||
marker=None,
|
marker=None,
|
||||||
prefix=None).AndReturn(ret)
|
prefix=None).AndReturn(ret)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(reverse('horizon:project:containers:index',
|
res = self.client.get(reverse('horizon:project:containers:index',
|
||||||
@ -120,7 +121,7 @@ class SwiftTests(test.TestCase):
|
|||||||
expected,
|
expected,
|
||||||
lambda obj: obj.name.encode('utf8'))
|
lambda obj: obj.name.encode('utf8'))
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_upload_object',)})
|
@test.create_stubs({api.swift: ('swift_upload_object',)})
|
||||||
def test_upload(self):
|
def test_upload(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
obj = self.objects.first()
|
obj = self.objects.first()
|
||||||
@ -131,10 +132,10 @@ class SwiftTests(test.TestCase):
|
|||||||
temp_file.flush()
|
temp_file.flush()
|
||||||
temp_file.seek(0)
|
temp_file.seek(0)
|
||||||
|
|
||||||
api.swift_upload_object(IsA(http.HttpRequest),
|
api.swift.swift_upload_object(IsA(http.HttpRequest),
|
||||||
container.name,
|
container.name,
|
||||||
obj.name,
|
obj.name,
|
||||||
IsA(InMemoryUploadedFile)).AndReturn(obj)
|
IsA(InMemoryUploadedFile)).AndReturn(obj)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
upload_url = reverse('horizon:project:containers:object_upload',
|
upload_url = reverse('horizon:project:containers:object_upload',
|
||||||
@ -162,15 +163,15 @@ class SwiftTests(test.TestCase):
|
|||||||
self.assertNoMessages()
|
self.assertNoMessages()
|
||||||
self.assertContains(res, "Slash is not an allowed character.")
|
self.assertContains(res, "Slash is not an allowed character.")
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_delete_object',)})
|
@test.create_stubs({api.swift: ('swift_delete_object',)})
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
obj = self.objects.first()
|
obj = self.objects.first()
|
||||||
index_url = reverse('horizon:project:containers:index',
|
index_url = reverse('horizon:project:containers:index',
|
||||||
args=[wrap_delimiter(container.name)])
|
args=[wrap_delimiter(container.name)])
|
||||||
api.swift_delete_object(IsA(http.HttpRequest),
|
api.swift.swift_delete_object(IsA(http.HttpRequest),
|
||||||
container.name,
|
container.name,
|
||||||
obj.name)
|
obj.name)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
action_string = "objects__delete_object__%s" % obj.name
|
action_string = "objects__delete_object__%s" % obj.name
|
||||||
@ -197,10 +198,10 @@ class SwiftTests(test.TestCase):
|
|||||||
self.assertEqual(res.content, obj.data)
|
self.assertEqual(res.content, obj.data)
|
||||||
self.assertTrue(res.has_header('Content-Disposition'))
|
self.assertTrue(res.has_header('Content-Disposition'))
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_get_containers',)})
|
@test.create_stubs({api.swift: ('swift_get_containers',)})
|
||||||
def test_copy_index(self):
|
def test_copy_index(self):
|
||||||
ret = (self.containers.list(), False)
|
ret = (self.containers.list(), False)
|
||||||
api.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
|
api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(reverse('horizon:project:containers:object_copy',
|
res = self.client.get(reverse('horizon:project:containers:object_copy',
|
||||||
@ -208,19 +209,20 @@ class SwiftTests(test.TestCase):
|
|||||||
self.objects.first().name]))
|
self.objects.first().name]))
|
||||||
self.assertTemplateUsed(res, 'project/containers/copy.html')
|
self.assertTemplateUsed(res, 'project/containers/copy.html')
|
||||||
|
|
||||||
@test.create_stubs({api: ('swift_get_containers', 'swift_copy_object')})
|
@test.create_stubs({api.swift: ('swift_get_containers',
|
||||||
|
'swift_copy_object')})
|
||||||
def test_copy(self):
|
def test_copy(self):
|
||||||
container_1 = self.containers.get(name=u"container_one\u6346")
|
container_1 = self.containers.get(name=u"container_one\u6346")
|
||||||
container_2 = self.containers.get(name=u"container_two\u6346")
|
container_2 = self.containers.get(name=u"container_two\u6346")
|
||||||
obj = self.objects.first()
|
obj = self.objects.first()
|
||||||
|
|
||||||
ret = (self.containers.list(), False)
|
ret = (self.containers.list(), False)
|
||||||
api.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
|
api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret)
|
||||||
api.swift_copy_object(IsA(http.HttpRequest),
|
api.swift.swift_copy_object(IsA(http.HttpRequest),
|
||||||
container_1.name,
|
container_1.name,
|
||||||
obj.name,
|
obj.name,
|
||||||
container_2.name,
|
container_2.name,
|
||||||
obj.name)
|
obj.name)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': forms.CopyObject.__name__,
|
formData = {'method': forms.CopyObject.__name__,
|
||||||
|
@ -32,7 +32,7 @@ from horizon import exceptions
|
|||||||
from horizon import forms
|
from horizon import forms
|
||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import FOLDER_DELIMITER
|
from openstack_dashboard.api.swift import FOLDER_DELIMITER
|
||||||
from .browsers import ContainerBrowser
|
from .browsers import ContainerBrowser
|
||||||
from .forms import CreateContainer, UploadObject, CopyObject
|
from .forms import CreateContainer, UploadObject, CopyObject
|
||||||
from .tables import wrap_delimiter
|
from .tables import wrap_delimiter
|
||||||
@ -47,8 +47,8 @@ class ContainerView(browsers.ResourceBrowserView):
|
|||||||
self._more = None
|
self._more = None
|
||||||
marker = self.request.GET.get('marker', None)
|
marker = self.request.GET.get('marker', None)
|
||||||
try:
|
try:
|
||||||
containers, self._more = api.swift_get_containers(self.request,
|
containers, self._more = api.swift.swift_get_containers(
|
||||||
marker=marker)
|
self.request, marker=marker)
|
||||||
except:
|
except:
|
||||||
msg = _('Unable to retrieve container list.')
|
msg = _('Unable to retrieve container list.')
|
||||||
exceptions.handle(self.request, msg)
|
exceptions.handle(self.request, msg)
|
||||||
@ -72,10 +72,11 @@ class ContainerView(browsers.ResourceBrowserView):
|
|||||||
if subfolder:
|
if subfolder:
|
||||||
prefix = subfolder
|
prefix = subfolder
|
||||||
try:
|
try:
|
||||||
objects, self._more = api.swift_get_objects(self.request,
|
objects, self._more = api.swift.swift_get_objects(
|
||||||
container_name,
|
self.request,
|
||||||
marker=marker,
|
container_name,
|
||||||
prefix=prefix)
|
marker=marker,
|
||||||
|
prefix=prefix)
|
||||||
except:
|
except:
|
||||||
self._more = None
|
self._more = None
|
||||||
objects = []
|
objects = []
|
||||||
@ -194,7 +195,7 @@ class CopyView(forms.ModalFormView):
|
|||||||
def get_form_kwargs(self):
|
def get_form_kwargs(self):
|
||||||
kwargs = super(CopyView, self).get_form_kwargs()
|
kwargs = super(CopyView, self).get_form_kwargs()
|
||||||
try:
|
try:
|
||||||
containers = api.swift_get_containers(self.request)
|
containers = api.swift.swift_get_containers(self.request)
|
||||||
except:
|
except:
|
||||||
redirect = reverse("horizon:project:containers:index")
|
redirect = reverse("horizon:project:containers:index")
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -158,7 +158,7 @@ class UpdateImageForm(forms.SelfHandlingForm):
|
|||||||
meta['purge_props'] = False
|
meta['purge_props'] = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
image = api.image_update(request, image_id, **meta)
|
image = api.glance.image_update(request, image_id, **meta)
|
||||||
messages.success(request, _('Image was successfully updated.'))
|
messages.success(request, _('Image was successfully updated.'))
|
||||||
return image
|
return image
|
||||||
except:
|
except:
|
||||||
|
@ -53,7 +53,7 @@ class DeleteImage(tables.DeleteAction):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.image_delete(request, obj_id)
|
api.glance.image_delete(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class CreateImage(tables.LinkAction):
|
class CreateImage(tables.LinkAction):
|
||||||
@ -94,7 +94,7 @@ class UpdateRow(tables.Row):
|
|||||||
ajax = True
|
ajax = True
|
||||||
|
|
||||||
def get_data(self, request, image_id):
|
def get_data(self, request, image_id):
|
||||||
image = api.image_get(request, image_id)
|
image = api.glance.image_get(request, image_id)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,12 +95,12 @@ class ImageViewTests(test.TestCase):
|
|||||||
res = self.client.get(url)
|
res = self.client.get(url)
|
||||||
self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL)
|
self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('image_get',)})
|
@test.create_stubs({api.glance: ('image_get',)})
|
||||||
def test_image_update_get(self):
|
def test_image_update_get(self):
|
||||||
image = self.images.first()
|
image = self.images.first()
|
||||||
image.disk_format = "ami"
|
image.disk_format = "ami"
|
||||||
image.is_public = True
|
image.is_public = True
|
||||||
api.image_get(IsA(http.HttpRequest), str(image.id)) \
|
api.glance.image_get(IsA(http.HttpRequest), str(image.id)) \
|
||||||
.AndReturn(image)
|
.AndReturn(image)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ class UpdateView(forms.ModalFormView):
|
|||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
if not hasattr(self, "_object"):
|
||||||
try:
|
try:
|
||||||
self._object = api.image_get(self.request,
|
self._object = api.glance.image_get(self.request,
|
||||||
self.kwargs['image_id'])
|
self.kwargs['image_id'])
|
||||||
except:
|
except:
|
||||||
msg = _('Unable to retrieve image.')
|
msg = _('Unable to retrieve image.')
|
||||||
url = reverse('horizon:project:images_and_snapshots:index')
|
url = reverse('horizon:project:images_and_snapshots:index')
|
||||||
|
@ -41,11 +41,11 @@ class CreateSnapshot(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
snapshot = api.snapshot_create(request,
|
snapshot = api.nova.snapshot_create(request,
|
||||||
data['instance_id'],
|
data['instance_id'],
|
||||||
data['name'])
|
data['name'])
|
||||||
# NOTE(gabriel): This API call is only to display a pretty name.
|
# NOTE(gabriel): This API call is only to display a pretty name.
|
||||||
instance = api.server_get(request, data['instance_id'])
|
instance = api.nova.server_get(request, data['instance_id'])
|
||||||
vals = {"name": data['name'], "inst": instance.name}
|
vals = {"name": data['name'], "inst": instance.name}
|
||||||
messages.success(request, _('Snapshot "%(name)s" created for '
|
messages.success(request, _('Snapshot "%(name)s" created for '
|
||||||
'instance "%(inst)s"') % vals)
|
'instance "%(inst)s"') % vals)
|
||||||
|
@ -33,8 +33,8 @@ INDEX_URL = reverse('horizon:project:images_and_snapshots:index')
|
|||||||
class SnapshotsViewTests(test.TestCase):
|
class SnapshotsViewTests(test.TestCase):
|
||||||
def test_create_snapshot_get(self):
|
def test_create_snapshot_get(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
self.mox.StubOutWithMock(api, 'server_get')
|
self.mox.StubOutWithMock(api.nova, 'server_get')
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
url = reverse('horizon:project:images_and_snapshots:snapshots:create',
|
url = reverse('horizon:project:images_and_snapshots:snapshots:create',
|
||||||
@ -45,8 +45,8 @@ class SnapshotsViewTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_get_server_exception(self):
|
def test_create_get_server_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
self.mox.StubOutWithMock(api, 'server_get')
|
self.mox.StubOutWithMock(api.nova, 'server_get')
|
||||||
api.server_get(IsA(http.HttpRequest), server.id) \
|
api.nova.server_get(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -60,11 +60,11 @@ class SnapshotsViewTests(test.TestCase):
|
|||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
snapshot = self.snapshots.first()
|
snapshot = self.snapshots.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'server_get')
|
self.mox.StubOutWithMock(api.nova, 'server_get')
|
||||||
self.mox.StubOutWithMock(api, 'snapshot_create')
|
self.mox.StubOutWithMock(api.nova, 'snapshot_create')
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.snapshot_create(IsA(http.HttpRequest), server.id, snapshot.name) \
|
api.nova.snapshot_create(IsA(http.HttpRequest), server.id,
|
||||||
.AndReturn(snapshot)
|
snapshot.name).AndReturn(snapshot)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'CreateSnapshot',
|
formData = {'method': 'CreateSnapshot',
|
||||||
@ -81,10 +81,10 @@ class SnapshotsViewTests(test.TestCase):
|
|||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
snapshot = self.snapshots.first()
|
snapshot = self.snapshots.first()
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'server_get')
|
self.mox.StubOutWithMock(api.nova, 'server_get')
|
||||||
self.mox.StubOutWithMock(api, 'snapshot_create')
|
self.mox.StubOutWithMock(api.nova, 'snapshot_create')
|
||||||
api.snapshot_create(IsA(http.HttpRequest), server.id, snapshot.name) \
|
api.nova.snapshot_create(IsA(http.HttpRequest), server.id,
|
||||||
.AndRaise(self.exceptions.nova)
|
snapshot.name).AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'method': 'CreateSnapshot',
|
formData = {'method': 'CreateSnapshot',
|
||||||
|
@ -45,8 +45,8 @@ class CreateView(forms.ModalFormView):
|
|||||||
def get_object(self):
|
def get_object(self):
|
||||||
if not hasattr(self, "_object"):
|
if not hasattr(self, "_object"):
|
||||||
try:
|
try:
|
||||||
self._object = api.server_get(self.request,
|
self._object = api.nova.server_get(self.request,
|
||||||
self.kwargs["instance_id"])
|
self.kwargs["instance_id"])
|
||||||
except:
|
except:
|
||||||
redirect = reverse('horizon:project:instances:index')
|
redirect = reverse('horizon:project:instances:index')
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -32,8 +32,9 @@ INDEX_URL = reverse('horizon:project:images_and_snapshots:index')
|
|||||||
|
|
||||||
|
|
||||||
class ImagesAndSnapshotsTests(test.TestCase):
|
class ImagesAndSnapshotsTests(test.TestCase):
|
||||||
@test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed',
|
@test.create_stubs({api.glance: ('image_list_detailed',
|
||||||
'volume_snapshot_list', 'volume_get',)})
|
'snapshot_list_detailed'),
|
||||||
|
api.cinder: ('volume_snapshot_list', 'volume_get')})
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
images = self.images.list()
|
images = self.images.list()
|
||||||
snapshots = self.snapshots.list()
|
snapshots = self.snapshots.list()
|
||||||
@ -42,19 +43,19 @@ class ImagesAndSnapshotsTests(test.TestCase):
|
|||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
volume.volume_id = volume.id
|
volume.volume_id = volume.id
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
||||||
|
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)) \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(volumes)
|
.AndReturn(volumes)
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn([images, False])
|
marker=None).AndReturn([images, False])
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest),
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
||||||
marker=None).AndReturn([snapshots, False])
|
.AndReturn([snapshots, False])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
@ -65,60 +66,64 @@ class ImagesAndSnapshotsTests(test.TestCase):
|
|||||||
filtered_images = filter(filter_func, images)
|
filtered_images = filter(filter_func, images)
|
||||||
self.assertItemsEqual(images, filtered_images)
|
self.assertItemsEqual(images, filtered_images)
|
||||||
|
|
||||||
@test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed',
|
@test.create_stubs({api.glance: ('image_list_detailed',
|
||||||
'volume_snapshot_list', 'volume_get',)})
|
'snapshot_list_detailed'),
|
||||||
|
api.cinder: ('volume_snapshot_list', 'volume_get')})
|
||||||
def test_index_no_images(self):
|
def test_index_no_images(self):
|
||||||
volumes = self.volumes.list()
|
volumes = self.volumes.list()
|
||||||
|
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
volume.volume_id = volume.id
|
volume.volume_id = volume.id
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
||||||
|
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)) \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(volumes)
|
.AndReturn(volumes)
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn([(), False])
|
marker=None).AndReturn([(), False])
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
||||||
.AndReturn([self.snapshots.list(), False])
|
.AndReturn([self.snapshots.list(), False])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html')
|
self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html')
|
||||||
|
|
||||||
@test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed',
|
@test.create_stubs({api.glance: ('image_list_detailed',
|
||||||
'volume_snapshot_list', 'volume_get',)})
|
'snapshot_list_detailed'),
|
||||||
|
api.cinder: ('volume_snapshot_list', 'volume_get')})
|
||||||
def test_index_error(self):
|
def test_index_error(self):
|
||||||
volumes = self.volumes.list()
|
volumes = self.volumes.list()
|
||||||
|
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
volume.volume_id = volume.id
|
volume.volume_id = volume.id
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
||||||
|
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)) \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(volumes)
|
.AndReturn(volumes)
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndRaise(self.exceptions.glance)
|
marker=None) \
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
.AndRaise(self.exceptions.glance)
|
||||||
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
||||||
.AndReturn([self.snapshots.list(), False])
|
.AndReturn([self.snapshots.list(), False])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html')
|
self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html')
|
||||||
|
|
||||||
@test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed',
|
@test.create_stubs({api.glance: ('image_list_detailed',
|
||||||
'volume_snapshot_list', 'volume_get',)})
|
'snapshot_list_detailed'),
|
||||||
|
api.cinder: ('volume_snapshot_list', 'volume_get')})
|
||||||
def test_queued_snapshot_actions(self):
|
def test_queued_snapshot_actions(self):
|
||||||
images = self.images.list()
|
images = self.images.list()
|
||||||
snapshots = self.snapshots.list()
|
snapshots = self.snapshots.list()
|
||||||
@ -127,19 +132,19 @@ class ImagesAndSnapshotsTests(test.TestCase):
|
|||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
volume.volume_id = volume.id
|
volume.volume_id = volume.id
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
for volume in volumes:
|
for volume in volumes:
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \
|
||||||
.AndReturn(volume)
|
.AndReturn(volume)
|
||||||
api.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id)
|
||||||
|
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)) \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \
|
||||||
.AndReturn(volumes)
|
.AndReturn(volumes)
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn([images, False])
|
marker=None).AndReturn([images, False])
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
|
||||||
.AndReturn([snapshots, False])
|
.AndReturn([snapshots, False])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
res = self.client.get(INDEX_URL)
|
res = self.client.get(INDEX_URL)
|
||||||
|
@ -54,8 +54,8 @@ class IndexView(tables.MultiTableView):
|
|||||||
# FIXME(gabriel): The paging is going to be strange here due to
|
# FIXME(gabriel): The paging is going to be strange here due to
|
||||||
# our filtering after the fact.
|
# our filtering after the fact.
|
||||||
(all_images,
|
(all_images,
|
||||||
self._more_images) = api.image_list_detailed(self.request,
|
self._more_images) = api.glance.image_list_detailed(self.request,
|
||||||
marker=marker)
|
marker=marker)
|
||||||
images = [im for im in all_images
|
images = [im for im in all_images
|
||||||
if im.container_format not in ['aki', 'ari'] and
|
if im.container_format not in ['aki', 'ari'] and
|
||||||
im.properties.get("image_type", '') != "snapshot"]
|
im.properties.get("image_type", '') != "snapshot"]
|
||||||
@ -68,8 +68,8 @@ class IndexView(tables.MultiTableView):
|
|||||||
req = self.request
|
req = self.request
|
||||||
marker = req.GET.get(SnapshotsTable._meta.pagination_param, None)
|
marker = req.GET.get(SnapshotsTable._meta.pagination_param, None)
|
||||||
try:
|
try:
|
||||||
snaps, self._more_snapshots = api.snapshot_list_detailed(req,
|
snaps, self._more_snapshots = api.glance.snapshot_list_detailed(
|
||||||
marker=marker)
|
req, marker=marker)
|
||||||
except:
|
except:
|
||||||
snaps = []
|
snaps = []
|
||||||
exceptions.handle(req, _("Unable to retrieve snapshots."))
|
exceptions.handle(req, _("Unable to retrieve snapshots."))
|
||||||
@ -78,7 +78,7 @@ class IndexView(tables.MultiTableView):
|
|||||||
def get_volume_snapshots_data(self):
|
def get_volume_snapshots_data(self):
|
||||||
if is_service_enabled(self.request, 'volume'):
|
if is_service_enabled(self.request, 'volume'):
|
||||||
try:
|
try:
|
||||||
snapshots = api.volume_snapshot_list(self.request)
|
snapshots = api.cinder.volume_snapshot_list(self.request)
|
||||||
except:
|
except:
|
||||||
snapshots = []
|
snapshots = []
|
||||||
exceptions.handle(self.request, _("Unable to retrieve "
|
exceptions.handle(self.request, _("Unable to retrieve "
|
||||||
|
@ -37,7 +37,7 @@ class DeleteVolumeSnapshot(tables.DeleteAction):
|
|||||||
action_past = _("Scheduled deletion of")
|
action_past = _("Scheduled deletion of")
|
||||||
|
|
||||||
def delete(self, request, obj_id):
|
def delete(self, request, obj_id):
|
||||||
api.volume_snapshot_delete(request, obj_id)
|
api.cinder.volume_snapshot_delete(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class CreateVolumeFromSnapshot(tables.LinkAction):
|
class CreateVolumeFromSnapshot(tables.LinkAction):
|
||||||
@ -66,11 +66,13 @@ class UpdateRow(tables.Row):
|
|||||||
class SnapshotVolumeNameColumn(tables.Column):
|
class SnapshotVolumeNameColumn(tables.Column):
|
||||||
def get_raw_data(self, snapshot):
|
def get_raw_data(self, snapshot):
|
||||||
request = self.table.request
|
request = self.table.request
|
||||||
volume_name = api.volume_get(request, snapshot.volume_id).display_name
|
volume_name = api.cinder.volume_get(request,
|
||||||
|
snapshot.volume_id).display_name
|
||||||
return safestring.mark_safe(volume_name)
|
return safestring.mark_safe(volume_name)
|
||||||
|
|
||||||
def get_link_url(self, snapshot):
|
def get_link_url(self, snapshot):
|
||||||
volume_id = api.volume_get(self.table.request, snapshot.volume_id).id
|
volume_id = api.cinder.volume_get(self.table.request,
|
||||||
|
snapshot.volume_id).id
|
||||||
return reverse(self.link, args=(volume_id,))
|
return reverse(self.link, args=(volume_id,))
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,27 +61,27 @@ class VolumeSnapshotsViewTests(test.TestCase):
|
|||||||
res = self.client.post(url, formData)
|
res = self.client.post(url, formData)
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ['image_list_detailed',
|
@test.create_stubs({api.glance: ('image_list_detailed',
|
||||||
'snapshot_list_detailed',
|
'snapshot_list_detailed'),
|
||||||
'volume_snapshot_list',
|
api.cinder: ('volume_snapshot_list',
|
||||||
'volume_snapshot_delete', ], })
|
'volume_snapshot_delete')})
|
||||||
def test_delete_volume_snapshot(self):
|
def test_delete_volume_snapshot(self):
|
||||||
vol_snapshots = self.volume_snapshots.list()
|
vol_snapshots = self.volume_snapshots.list()
|
||||||
snapshot = self.volume_snapshots.first()
|
snapshot = self.volume_snapshots.first()
|
||||||
|
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn(([], False))
|
marker=None).AndReturn(([], False))
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest),
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn(([], False))
|
marker=None).AndReturn(([], False))
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)). \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)). \
|
||||||
AndReturn(vol_snapshots)
|
AndReturn(vol_snapshots)
|
||||||
api.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id)
|
api.cinder.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id)
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn(([], False))
|
marker=None).AndReturn(([], False))
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest),
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn(([], False))
|
marker=None).AndReturn(([], False))
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)). \
|
api.cinder.volume_snapshot_list(IsA(http.HttpRequest)). \
|
||||||
AndReturn([])
|
AndReturn([])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
formData = {'action':
|
formData = {'action':
|
||||||
|
@ -40,7 +40,8 @@ class UpdateInstance(forms.SelfHandlingForm):
|
|||||||
|
|
||||||
def handle(self, request, data):
|
def handle(self, request, data):
|
||||||
try:
|
try:
|
||||||
server = api.server_update(request, data['instance'], data['name'])
|
server = api.nova.server_update(request, data['instance'],
|
||||||
|
data['name'])
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('Instance "%s" updated.') % data['name'])
|
_('Instance "%s" updated.') % data['name'])
|
||||||
return server
|
return server
|
||||||
|
@ -83,7 +83,7 @@ class TerminateInstance(tables.BatchAction):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
api.server_delete(request, obj_id)
|
api.nova.server_delete(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class RebootInstance(tables.BatchAction):
|
class RebootInstance(tables.BatchAction):
|
||||||
@ -100,7 +100,7 @@ class RebootInstance(tables.BatchAction):
|
|||||||
and not is_deleting(instance))
|
and not is_deleting(instance))
|
||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
api.server_reboot(request, obj_id)
|
api.nova.server_reboot(request, obj_id)
|
||||||
|
|
||||||
|
|
||||||
class TogglePause(tables.BatchAction):
|
class TogglePause(tables.BatchAction):
|
||||||
@ -125,10 +125,10 @@ class TogglePause(tables.BatchAction):
|
|||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
if self.paused:
|
if self.paused:
|
||||||
api.server_unpause(request, obj_id)
|
api.nova.server_unpause(request, obj_id)
|
||||||
self.current_past_action = UNPAUSE
|
self.current_past_action = UNPAUSE
|
||||||
else:
|
else:
|
||||||
api.server_pause(request, obj_id)
|
api.nova.server_pause(request, obj_id)
|
||||||
self.current_past_action = PAUSE
|
self.current_past_action = PAUSE
|
||||||
|
|
||||||
|
|
||||||
@ -154,10 +154,10 @@ class ToggleSuspend(tables.BatchAction):
|
|||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
if self.suspended:
|
if self.suspended:
|
||||||
api.server_resume(request, obj_id)
|
api.nova.server_resume(request, obj_id)
|
||||||
self.current_past_action = RESUME
|
self.current_past_action = RESUME
|
||||||
else:
|
else:
|
||||||
api.server_suspend(request, obj_id)
|
api.nova.server_suspend(request, obj_id)
|
||||||
self.current_past_action = SUSPEND
|
self.current_past_action = SUSPEND
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ class LaunchLink(tables.LinkAction):
|
|||||||
|
|
||||||
def allowed(self, request, datum):
|
def allowed(self, request, datum):
|
||||||
try:
|
try:
|
||||||
limits = api.tenant_absolute_limits(request, reserved=True)
|
limits = api.nova.tenant_absolute_limits(request, reserved=True)
|
||||||
|
|
||||||
instances_available = limits['maxTotalInstances'] \
|
instances_available = limits['maxTotalInstances'] \
|
||||||
- limits['totalInstancesUsed']
|
- limits['totalInstancesUsed']
|
||||||
@ -254,7 +254,7 @@ class ConfirmResize(tables.Action):
|
|||||||
return instance.status == 'VERIFY_RESIZE'
|
return instance.status == 'VERIFY_RESIZE'
|
||||||
|
|
||||||
def single(self, table, request, instance):
|
def single(self, table, request, instance):
|
||||||
api.server_confirm_resize(request, instance)
|
api.nova.server_confirm_resize(request, instance)
|
||||||
|
|
||||||
|
|
||||||
class RevertResize(tables.Action):
|
class RevertResize(tables.Action):
|
||||||
@ -266,7 +266,7 @@ class RevertResize(tables.Action):
|
|||||||
return instance.status == 'VERIFY_RESIZE'
|
return instance.status == 'VERIFY_RESIZE'
|
||||||
|
|
||||||
def single(self, table, request, instance):
|
def single(self, table, request, instance):
|
||||||
api.server_revert_resize(request, instance)
|
api.nova.server_revert_resize(request, instance)
|
||||||
|
|
||||||
|
|
||||||
class AssociateIP(tables.LinkAction):
|
class AssociateIP(tables.LinkAction):
|
||||||
@ -355,8 +355,9 @@ class UpdateRow(tables.Row):
|
|||||||
ajax = True
|
ajax = True
|
||||||
|
|
||||||
def get_data(self, request, instance_id):
|
def get_data(self, request, instance_id):
|
||||||
instance = api.server_get(request, instance_id)
|
instance = api.nova.server_get(request, instance_id)
|
||||||
instance.full_flavor = api.flavor_get(request, instance.flavor["id"])
|
instance.full_flavor = api.nova.flavor_get(request,
|
||||||
|
instance.flavor["id"])
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ class LogTab(tabs.Tab):
|
|||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
instance = self.tab_group.kwargs['instance']
|
instance = self.tab_group.kwargs['instance']
|
||||||
try:
|
try:
|
||||||
data = api.server_console_output(request,
|
data = api.nova.server_console_output(request,
|
||||||
instance.id,
|
instance.id,
|
||||||
tail_length=35)
|
tail_length=35)
|
||||||
except:
|
except:
|
||||||
data = _('Unable to get log for instance "%s".') % instance.id
|
data = _('Unable to get log for instance "%s".') % instance.id
|
||||||
exceptions.handle(request, ignore=True)
|
exceptions.handle(request, ignore=True)
|
||||||
|
@ -40,12 +40,15 @@ INDEX_URL = reverse('horizon:project:instances:index')
|
|||||||
|
|
||||||
|
|
||||||
class InstanceTests(test.TestCase):
|
class InstanceTests(test.TestCase):
|
||||||
@test.create_stubs({api: ('flavor_list', 'server_list',
|
@test.create_stubs({api.nova: ('flavor_list',
|
||||||
'tenant_absolute_limits')})
|
'server_list',
|
||||||
|
'tenant_absolute_limits')})
|
||||||
def test_index(self):
|
def test_index(self):
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
.MultipleTimes().AndReturn(self.limits['absolute'])
|
.MultipleTimes().AndReturn(self.limits['absolute'])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -59,10 +62,12 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertItemsEqual(instances, self.servers.list())
|
self.assertItemsEqual(instances, self.servers.list())
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_list', 'tenant_absolute_limits')})
|
@test.create_stubs({api.nova: ('server_list',
|
||||||
|
'tenant_absolute_limits')})
|
||||||
def test_index_server_list_exception(self):
|
def test_index_server_list_exception(self):
|
||||||
api.server_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova)
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
.AndRaise(self.exceptions.nova)
|
||||||
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
.MultipleTimes().AndReturn(self.limits['absolute'])
|
.MultipleTimes().AndReturn(self.limits['absolute'])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -73,19 +78,22 @@ class InstanceTests(test.TestCase):
|
|||||||
self.assertEqual(len(res.context['instances_table'].data), 0)
|
self.assertEqual(len(res.context['instances_table'].data), 0)
|
||||||
self.assertMessageCount(res, error=1)
|
self.assertMessageCount(res, error=1)
|
||||||
|
|
||||||
@test.create_stubs({api: ('flavor_list', 'server_list', 'flavor_get',
|
@test.create_stubs({api.nova: ('flavor_list',
|
||||||
'tenant_absolute_limits')})
|
'server_list',
|
||||||
|
'flavor_get',
|
||||||
|
'tenant_absolute_limits')})
|
||||||
def test_index_flavor_list_exception(self):
|
def test_index_flavor_list_exception(self):
|
||||||
servers = self.servers.list()
|
servers = self.servers.list()
|
||||||
flavors = self.flavors.list()
|
flavors = self.flavors.list()
|
||||||
full_flavors = SortedDict([(f.id, f) for f in flavors])
|
full_flavors = SortedDict([(f.id, f) for f in flavors])
|
||||||
|
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(servers)
|
api.nova.server_list(IsA(http.HttpRequest)).AndReturn(servers)
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova)
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
for server in servers:
|
for server in servers:
|
||||||
api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \
|
api.nova.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \
|
||||||
AndReturn(full_flavors[server.flavor["id"]])
|
AndReturn(full_flavors[server.flavor["id"]])
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
.MultipleTimes().AndReturn(self.limits['absolute'])
|
.MultipleTimes().AndReturn(self.limits['absolute'])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -97,8 +105,10 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertItemsEqual(instances, self.servers.list())
|
self.assertItemsEqual(instances, self.servers.list())
|
||||||
|
|
||||||
@test.create_stubs({api: ('flavor_list', 'server_list', 'flavor_get',
|
@test.create_stubs({api.nova: ('flavor_list',
|
||||||
'tenant_absolute_limits')})
|
'server_list',
|
||||||
|
'flavor_get',
|
||||||
|
'tenant_absolute_limits')})
|
||||||
def test_index_flavor_get_exception(self):
|
def test_index_flavor_get_exception(self):
|
||||||
servers = self.servers.list()
|
servers = self.servers.list()
|
||||||
flavors = self.flavors.list()
|
flavors = self.flavors.list()
|
||||||
@ -107,12 +117,12 @@ class InstanceTests(test.TestCase):
|
|||||||
for i, server in enumerate(servers):
|
for i, server in enumerate(servers):
|
||||||
server.flavor['id'] = str(uuid.UUID(int=i))
|
server.flavor['id'] = str(uuid.UUID(int=i))
|
||||||
|
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(servers)
|
api.nova.server_list(IsA(http.HttpRequest)).AndReturn(servers)
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors)
|
api.nova.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors)
|
||||||
for server in servers:
|
for server in servers:
|
||||||
api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \
|
api.nova.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \
|
||||||
AndRaise(self.exceptions.nova)
|
AndRaise(self.exceptions.nova)
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
.MultipleTimes().AndReturn(self.limits['absolute'])
|
.MultipleTimes().AndReturn(self.limits['absolute'])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -125,15 +135,16 @@ class InstanceTests(test.TestCase):
|
|||||||
self.assertMessageCount(res, error=len(servers))
|
self.assertMessageCount(res, error=len(servers))
|
||||||
self.assertItemsEqual(instances, self.servers.list())
|
self.assertItemsEqual(instances, self.servers.list())
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_list',
|
@test.create_stubs({api.nova: ('server_list',
|
||||||
'flavor_list',
|
'flavor_list',
|
||||||
'server_delete',)})
|
'server_delete',)})
|
||||||
def test_terminate_instance(self):
|
def test_terminate_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
|
.AndReturn(self.servers.list())
|
||||||
api.server_delete(IsA(http.HttpRequest), server.id)
|
api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
|
||||||
|
api.nova.server_delete(IsA(http.HttpRequest), server.id)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -142,15 +153,16 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_list',
|
@test.create_stubs({api.nova: ('server_list',
|
||||||
'flavor_list',
|
'flavor_list',
|
||||||
'server_delete',)})
|
'server_delete',)})
|
||||||
def test_terminate_instance_exception(self):
|
def test_terminate_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
|
.AndReturn(self.servers.list())
|
||||||
api.server_delete(IsA(http.HttpRequest), server.id) \
|
api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())
|
||||||
|
api.nova.server_delete(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -160,15 +172,17 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_pause',
|
@test.create_stubs({api.nova: ('server_pause',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_pause_instance(self):
|
def test_pause_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_pause(IsA(http.HttpRequest), server.id)
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_pause(IsA(http.HttpRequest), server.id)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -177,15 +191,17 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_pause',
|
@test.create_stubs({api.nova: ('server_pause',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_pause_instance_exception(self):
|
def test_pause_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_pause(IsA(http.HttpRequest), server.id) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_pause(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -195,16 +211,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_unpause',
|
@test.create_stubs({api.nova: ('server_unpause',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_unpause_instance(self):
|
def test_unpause_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
server.status = "PAUSED"
|
server.status = "PAUSED"
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_unpause(IsA(http.HttpRequest), server.id)
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_unpause(IsA(http.HttpRequest), server.id)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -213,16 +231,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_unpause',
|
@test.create_stubs({api.nova: ('server_unpause',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_unpause_instance_exception(self):
|
def test_unpause_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
server.status = "PAUSED"
|
server.status = "PAUSED"
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_unpause(IsA(http.HttpRequest), server.id) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_unpause(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -232,15 +252,17 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_reboot',
|
@test.create_stubs({api.nova: ('server_reboot',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_reboot_instance(self):
|
def test_reboot_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_reboot(IsA(http.HttpRequest), server.id)
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_reboot(IsA(http.HttpRequest), server.id)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -249,16 +271,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_reboot',
|
@test.create_stubs({api.nova: ('server_reboot',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_reboot_instance_exception(self):
|
def test_reboot_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_reboot(IsA(http.HttpRequest), server.id) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_reboot(IsA(http.HttpRequest), server.id) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -267,15 +291,17 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_suspend',
|
@test.create_stubs({api.nova: ('server_suspend',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_suspend_instance(self):
|
def test_suspend_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_suspend(IsA(http.HttpRequest), unicode(server.id))
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id))
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -284,16 +310,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_suspend',
|
@test.create_stubs({api.nova: ('server_suspend',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_suspend_instance_exception(self):
|
def test_suspend_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_suspend(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
unicode(server.id)).AndRaise(self.exceptions.nova)
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id)) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -302,16 +330,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_resume',
|
@test.create_stubs({api.nova: ('server_resume',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_resume_instance(self):
|
def test_resume_instance(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
server.status = "SUSPENDED"
|
server.status = "SUSPENDED"
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_resume(IsA(http.HttpRequest), unicode(server.id))
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_resume(IsA(http.HttpRequest), unicode(server.id))
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -320,17 +350,20 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_resume',
|
@test.create_stubs({api.nova: ('server_resume',
|
||||||
'server_list',
|
'server_list',
|
||||||
'flavor_list',)})
|
'flavor_list',)})
|
||||||
def test_resume_instance_exception(self):
|
def test_resume_instance_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
server.status = "SUSPENDED"
|
server.status = "SUSPENDED"
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.server_resume(IsA(http.HttpRequest),
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
unicode(server.id)).AndRaise(self.exceptions.nova)
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.server_resume(IsA(http.HttpRequest),
|
||||||
|
unicode(server.id)) \
|
||||||
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -339,21 +372,21 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ("server_get",
|
@test.create_stubs({api.nova: ("server_get",
|
||||||
"instance_volumes_list",
|
"instance_volumes_list",
|
||||||
"flavor_get",
|
"flavor_get",
|
||||||
"server_security_groups")})
|
"server_security_groups")})
|
||||||
def test_instance_details_volumes(self):
|
def test_instance_details_volumes(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
volumes = [self.volumes.list()[1]]
|
volumes = [self.volumes.list()[1]]
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.instance_volumes_list(IsA(http.HttpRequest),
|
api.nova.instance_volumes_list(IsA(http.HttpRequest),
|
||||||
server.id).AndReturn(volumes)
|
server.id).AndReturn(volumes)
|
||||||
api.flavor_get(IsA(http.HttpRequest),
|
api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
|
||||||
server.flavor['id']).AndReturn(self.flavors.first())
|
.AndReturn(self.flavors.first())
|
||||||
api.server_security_groups(IsA(http.HttpRequest),
|
api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \
|
||||||
server.id).AndReturn(self.security_groups.first())
|
.AndReturn(self.security_groups.first())
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -363,21 +396,21 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertItemsEqual(res.context['instance'].volumes, volumes)
|
self.assertItemsEqual(res.context['instance'].volumes, volumes)
|
||||||
|
|
||||||
@test.create_stubs({api: ("server_get",
|
@test.create_stubs({api.nova: ("server_get",
|
||||||
"instance_volumes_list",
|
"instance_volumes_list",
|
||||||
"flavor_get",
|
"flavor_get",
|
||||||
"server_security_groups")})
|
"server_security_groups")})
|
||||||
def test_instance_details_volume_sorting(self):
|
def test_instance_details_volume_sorting(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
volumes = self.volumes.list()[1:3]
|
volumes = self.volumes.list()[1:3]
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.instance_volumes_list(IsA(http.HttpRequest),
|
api.nova.instance_volumes_list(IsA(http.HttpRequest),
|
||||||
server.id).AndReturn(volumes)
|
server.id).AndReturn(volumes)
|
||||||
api.flavor_get(IsA(http.HttpRequest),
|
api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
|
||||||
server.flavor['id']).AndReturn(self.flavors.first())
|
.AndReturn(self.flavors.first())
|
||||||
api.server_security_groups(IsA(http.HttpRequest),
|
api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \
|
||||||
server.id).AndReturn(self.security_groups.first())
|
.AndReturn(self.security_groups.first())
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -391,20 +424,20 @@ class InstanceTests(test.TestCase):
|
|||||||
self.assertEquals(res.context['instance'].volumes[1].device,
|
self.assertEquals(res.context['instance'].volumes[1].device,
|
||||||
"/dev/hdk")
|
"/dev/hdk")
|
||||||
|
|
||||||
@test.create_stubs({api: ("server_get",
|
@test.create_stubs({api.nova: ("server_get",
|
||||||
"instance_volumes_list",
|
"instance_volumes_list",
|
||||||
"flavor_get",
|
"flavor_get",
|
||||||
"server_security_groups",)})
|
"server_security_groups",)})
|
||||||
def test_instance_details_metadata(self):
|
def test_instance_details_metadata(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.instance_volumes_list(IsA(http.HttpRequest),
|
api.nova.instance_volumes_list(IsA(http.HttpRequest),
|
||||||
server.id).AndReturn([])
|
server.id).AndReturn([])
|
||||||
api.flavor_get(IsA(http.HttpRequest),
|
api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \
|
||||||
server.flavor['id']).AndReturn(self.flavors.first())
|
.AndReturn(self.flavors.first())
|
||||||
api.server_security_groups(IsA(http.HttpRequest),
|
api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \
|
||||||
server.id).AndReturn(self.security_groups.list())
|
.AndReturn(self.security_groups.list())
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -423,13 +456,13 @@ class InstanceTests(test.TestCase):
|
|||||||
self.assertContains(res, "<dt>empty</dt>", 1)
|
self.assertContains(res, "<dt>empty</dt>", 1)
|
||||||
self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
|
self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_console_output',)})
|
@test.create_stubs({api.nova: ('server_console_output',)})
|
||||||
def test_instance_log(self):
|
def test_instance_log(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
CONSOLE_OUTPUT = 'output'
|
CONSOLE_OUTPUT = 'output'
|
||||||
|
|
||||||
api.server_console_output(IsA(http.HttpRequest),
|
api.nova.server_console_output(IsA(http.HttpRequest),
|
||||||
server.id, tail_length=None) \
|
server.id, tail_length=None) \
|
||||||
.AndReturn(CONSOLE_OUTPUT)
|
.AndReturn(CONSOLE_OUTPUT)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -444,12 +477,12 @@ class InstanceTests(test.TestCase):
|
|||||||
self.assertIsInstance(res, http.HttpResponse)
|
self.assertIsInstance(res, http.HttpResponse)
|
||||||
self.assertContains(res, CONSOLE_OUTPUT)
|
self.assertContains(res, CONSOLE_OUTPUT)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_console_output',)})
|
@test.create_stubs({api.nova: ('server_console_output',)})
|
||||||
def test_instance_log_exception(self):
|
def test_instance_log_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_console_output(IsA(http.HttpRequest),
|
api.nova.server_console_output(IsA(http.HttpRequest),
|
||||||
server.id, tail_length=None) \
|
server.id, tail_length=None) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -466,13 +499,15 @@ class InstanceTests(test.TestCase):
|
|||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
CONSOLE_OUTPUT = '/vncserver'
|
CONSOLE_OUTPUT = '/vncserver'
|
||||||
|
|
||||||
console_mock = self.mox.CreateMock(api.VNCConsole)
|
console_mock = self.mox.CreateMock(api.nova.VNCConsole)
|
||||||
console_mock.url = CONSOLE_OUTPUT
|
console_mock.url = CONSOLE_OUTPUT
|
||||||
|
|
||||||
self.mox.StubOutWithMock(api, 'server_vnc_console')
|
self.mox.StubOutWithMock(api.nova, 'server_vnc_console')
|
||||||
self.mox.StubOutWithMock(api, 'server_get')
|
self.mox.StubOutWithMock(api.nova, 'server_get')
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id) \
|
||||||
api.server_vnc_console(IgnoreArg(), server.id).AndReturn(console_mock)
|
.AndReturn(server)
|
||||||
|
api.nova.server_vnc_console(IgnoreArg(), server.id) \
|
||||||
|
.AndReturn(console_mock)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
url = reverse('horizon:project:instances:vnc',
|
url = reverse('horizon:project:instances:vnc',
|
||||||
@ -481,11 +516,11 @@ class InstanceTests(test.TestCase):
|
|||||||
redirect = CONSOLE_OUTPUT + '&title=%s(1)' % server.name
|
redirect = CONSOLE_OUTPUT + '&title=%s(1)' % server.name
|
||||||
self.assertRedirectsNoFollow(res, redirect)
|
self.assertRedirectsNoFollow(res, redirect)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_vnc_console',)})
|
@test.create_stubs({api.nova: ('server_vnc_console',)})
|
||||||
def test_instance_vnc_exception(self):
|
def test_instance_vnc_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_vnc_console(IsA(http.HttpRequest), server.id) \
|
api.nova.server_vnc_console(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -496,27 +531,27 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get',
|
@test.create_stubs({api.nova: ('server_get',
|
||||||
'snapshot_create',
|
'snapshot_create',
|
||||||
'snapshot_list_detailed',
|
'server_list',
|
||||||
'image_list_detailed',
|
'flavor_list',
|
||||||
'volume_snapshot_list',
|
'server_delete'),
|
||||||
'server_list',
|
cinder: ('volume_snapshot_list',),
|
||||||
'flavor_list',
|
api.glance: ('snapshot_list_detailed',
|
||||||
'server_delete',)})
|
'image_list_detailed')})
|
||||||
def test_create_instance_snapshot(self):
|
def test_create_instance_snapshot(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.snapshot_create(IsA(http.HttpRequest),
|
api.nova.snapshot_create(IsA(http.HttpRequest),
|
||||||
server.id,
|
server.id,
|
||||||
"snapshot1").AndReturn(self.snapshots.first())
|
"snapshot1").AndReturn(self.snapshots.first())
|
||||||
|
|
||||||
api.snapshot_list_detailed(IsA(http.HttpRequest),
|
api.glance.snapshot_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn([[], False])
|
marker=None).AndReturn([[], False])
|
||||||
api.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
marker=None).AndReturn([[], False])
|
marker=None).AndReturn([[], False])
|
||||||
api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])
|
cinder.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -529,11 +564,11 @@ class InstanceTests(test.TestCase):
|
|||||||
res = self.client.post(url, formData)
|
res = self.client.post(url, formData)
|
||||||
self.assertRedirects(res, redir_url)
|
self.assertRedirects(res, redir_url)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get',)})
|
@test.create_stubs({api.nova: ('server_get',)})
|
||||||
def test_instance_update_get(self):
|
def test_instance_update_get(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -542,11 +577,11 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertTemplateUsed(res, 'project/instances/update.html')
|
self.assertTemplateUsed(res, 'project/instances/update.html')
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get',)})
|
@test.create_stubs({api.nova: ('server_get',)})
|
||||||
def test_instance_update_get_server_get_exception(self):
|
def test_instance_update_get_server_get_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id) \
|
api.nova.server_get(IsA(http.HttpRequest), server.id) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -557,14 +592,14 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get', 'server_update')})
|
@test.create_stubs({api.nova: ('server_get', 'server_update')})
|
||||||
def test_instance_update_post(self):
|
def test_instance_update_post(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.server_update(IsA(http.HttpRequest),
|
api.nova.server_update(IsA(http.HttpRequest),
|
||||||
server.id,
|
server.id,
|
||||||
server.name).AndReturn(server)
|
server.name).AndReturn(server)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -578,12 +613,12 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertRedirectsNoFollow(res, INDEX_URL)
|
self.assertRedirectsNoFollow(res, INDEX_URL)
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_get', 'server_update')})
|
@test.create_stubs({api.nova: ('server_get', 'server_update')})
|
||||||
def test_instance_update_post_api_exception(self):
|
def test_instance_update_post_api_exception(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
|
|
||||||
api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
|
||||||
api.server_update(IsA(http.HttpRequest), server.id, server.name) \
|
api.nova.server_update(IsA(http.HttpRequest), server.id, server.name) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -617,7 +652,7 @@ class InstanceTests(test.TestCase):
|
|||||||
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
filters={'is_public': True,
|
filters={'is_public': True,
|
||||||
'status': 'active'}) \
|
'status': 'active'}) \
|
||||||
.AndReturn([self.images.list(), False])
|
.AndReturn([self.images.list(), False])
|
||||||
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
api.glance.image_list_detailed(IsA(http.HttpRequest),
|
||||||
filters={'property-owner_id': self.tenant.id,
|
filters={'property-owner_id': self.tenant.id,
|
||||||
'status': 'active'}) \
|
'status': 'active'}) \
|
||||||
@ -995,16 +1030,18 @@ class InstanceTests(test.TestCase):
|
|||||||
|
|
||||||
self.assertContains(res, "greater than or equal to 1")
|
self.assertContains(res, "greater than or equal to 1")
|
||||||
|
|
||||||
@test.create_stubs({api: ('flavor_list', 'server_list',
|
@test.create_stubs({api.nova: ('flavor_list', 'server_list',
|
||||||
'tenant_absolute_limits',)})
|
'tenant_absolute_limits',)})
|
||||||
def test_launch_button_disabled_when_quota_exceeded(self):
|
def test_launch_button_disabled_when_quota_exceeded(self):
|
||||||
limits = self.limits['absolute']
|
limits = self.limits['absolute']
|
||||||
limits['totalInstancesUsed'] = limits['maxTotalInstances']
|
limits['totalInstancesUsed'] = limits['maxTotalInstances']
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
.MultipleTimes().AndReturn(limits)
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
|
.MultipleTimes().AndReturn(limits)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -1021,15 +1058,17 @@ class InstanceTests(test.TestCase):
|
|||||||
html=True,
|
html=True,
|
||||||
msg_prefix="The launch button is not disabled")
|
msg_prefix="The launch button is not disabled")
|
||||||
|
|
||||||
@test.create_stubs({api: ('flavor_list', 'server_list',
|
@test.create_stubs({api.nova: ('flavor_list', 'server_list',
|
||||||
'tenant_absolute_limits')})
|
'tenant_absolute_limits')})
|
||||||
def test_index_options_after_migrate(self):
|
def test_index_options_after_migrate(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
server.status = "VERIFY_RESIZE"
|
server.status = "VERIFY_RESIZE"
|
||||||
|
|
||||||
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list())
|
api.nova.flavor_list(IsA(http.HttpRequest)) \
|
||||||
api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list())
|
.AndReturn(self.flavors.list())
|
||||||
api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
api.nova.server_list(IsA(http.HttpRequest)) \
|
||||||
|
.AndReturn(self.servers.list())
|
||||||
|
api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \
|
||||||
.MultipleTimes().AndReturn(self.limits['absolute'])
|
.MultipleTimes().AndReturn(self.limits['absolute'])
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
@ -52,7 +52,7 @@ class IndexView(tables.DataTableView):
|
|||||||
def get_data(self):
|
def get_data(self):
|
||||||
# Gather our instances
|
# Gather our instances
|
||||||
try:
|
try:
|
||||||
instances = api.server_list(self.request)
|
instances = api.nova.server_list(self.request)
|
||||||
except:
|
except:
|
||||||
instances = []
|
instances = []
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
@ -60,7 +60,7 @@ class IndexView(tables.DataTableView):
|
|||||||
# Gather our flavors and correlate our instances to them
|
# Gather our flavors and correlate our instances to them
|
||||||
if instances:
|
if instances:
|
||||||
try:
|
try:
|
||||||
flavors = api.flavor_list(self.request)
|
flavors = api.nova.flavor_list(self.request)
|
||||||
except:
|
except:
|
||||||
flavors = []
|
flavors = []
|
||||||
exceptions.handle(self.request, ignore=True)
|
exceptions.handle(self.request, ignore=True)
|
||||||
@ -76,8 +76,8 @@ class IndexView(tables.DataTableView):
|
|||||||
else:
|
else:
|
||||||
# If the flavor_id is not in full_flavors list,
|
# If the flavor_id is not in full_flavors list,
|
||||||
# get it via nova api.
|
# get it via nova api.
|
||||||
instance.full_flavor = api.flavor_get(self.request,
|
instance.full_flavor = api.nova.flavor_get(
|
||||||
flavor_id)
|
self.request, flavor_id)
|
||||||
except:
|
except:
|
||||||
msg = _('Unable to retrieve instance size information.')
|
msg = _('Unable to retrieve instance size information.')
|
||||||
exceptions.handle(self.request, msg)
|
exceptions.handle(self.request, msg)
|
||||||
@ -99,9 +99,9 @@ def console(request, instance_id):
|
|||||||
try:
|
try:
|
||||||
# TODO(jakedahn): clean this up once the api supports tailing.
|
# TODO(jakedahn): clean this up once the api supports tailing.
|
||||||
tail = request.GET.get('length', None)
|
tail = request.GET.get('length', None)
|
||||||
data = api.server_console_output(request,
|
data = api.nova.server_console_output(request,
|
||||||
instance_id,
|
instance_id,
|
||||||
tail_length=tail)
|
tail_length=tail)
|
||||||
except:
|
except:
|
||||||
data = _('Unable to get log for instance "%s".') % instance_id
|
data = _('Unable to get log for instance "%s".') % instance_id
|
||||||
exceptions.handle(request, ignore=True)
|
exceptions.handle(request, ignore=True)
|
||||||
@ -113,8 +113,8 @@ def console(request, instance_id):
|
|||||||
|
|
||||||
def vnc(request, instance_id):
|
def vnc(request, instance_id):
|
||||||
try:
|
try:
|
||||||
console = api.server_vnc_console(request, instance_id)
|
console = api.nova.server_vnc_console(request, instance_id)
|
||||||
instance = api.server_get(request, instance_id)
|
instance = api.nova.server_get(request, instance_id)
|
||||||
return shortcuts.redirect(console.url +
|
return shortcuts.redirect(console.url +
|
||||||
("&title=%s(%s)" % (instance.name, instance_id)))
|
("&title=%s(%s)" % (instance.name, instance_id)))
|
||||||
except:
|
except:
|
||||||
@ -138,7 +138,7 @@ class UpdateView(forms.ModalFormView):
|
|||||||
if not hasattr(self, "_object"):
|
if not hasattr(self, "_object"):
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
try:
|
try:
|
||||||
self._object = api.server_get(self.request, instance_id)
|
self._object = api.nova.server_get(self.request, instance_id)
|
||||||
except:
|
except:
|
||||||
redirect = reverse("horizon:project:instances:index")
|
redirect = reverse("horizon:project:instances:index")
|
||||||
msg = _('Unable to retrieve instance details.')
|
msg = _('Unable to retrieve instance details.')
|
||||||
@ -164,14 +164,14 @@ class DetailView(tabs.TabView):
|
|||||||
if not hasattr(self, "_instance"):
|
if not hasattr(self, "_instance"):
|
||||||
try:
|
try:
|
||||||
instance_id = self.kwargs['instance_id']
|
instance_id = self.kwargs['instance_id']
|
||||||
instance = api.server_get(self.request, instance_id)
|
instance = api.nova.server_get(self.request, instance_id)
|
||||||
instance.volumes = api.instance_volumes_list(self.request,
|
instance.volumes = api.nova.instance_volumes_list(self.request,
|
||||||
instance_id)
|
instance_id)
|
||||||
# Sort by device name
|
# Sort by device name
|
||||||
instance.volumes.sort(key=lambda vol: vol.device)
|
instance.volumes.sort(key=lambda vol: vol.device)
|
||||||
instance.full_flavor = api.flavor_get(self.request,
|
instance.full_flavor = api.nova.flavor_get(
|
||||||
instance.flavor["id"])
|
self.request, instance.flavor["id"])
|
||||||
instance.security_groups = api.server_security_groups(
|
instance.security_groups = api.nova.server_security_groups(
|
||||||
self.request, instance_id)
|
self.request, instance_id)
|
||||||
except:
|
except:
|
||||||
redirect = reverse('horizon:project:instances:index')
|
redirect = reverse('horizon:project:instances:index')
|
||||||
|
@ -30,6 +30,7 @@ from horizon import workflows
|
|||||||
|
|
||||||
from openstack_dashboard import api
|
from openstack_dashboard import api
|
||||||
from openstack_dashboard.api import cinder
|
from openstack_dashboard.api import cinder
|
||||||
|
from openstack_dashboard.api import glance
|
||||||
from openstack_dashboard.usage import quotas
|
from openstack_dashboard.usage import quotas
|
||||||
|
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ class VolumeOptionsAction(workflows.Action):
|
|||||||
volume_options = [("", _("Select Volume"))]
|
volume_options = [("", _("Select Volume"))]
|
||||||
try:
|
try:
|
||||||
volumes = [v for v in cinder.volume_list(self.request)
|
volumes = [v for v in cinder.volume_list(self.request)
|
||||||
if v.status == api.VOLUME_STATE_AVAILABLE]
|
if v.status == api.cinder.VOLUME_STATE_AVAILABLE]
|
||||||
volume_options.extend([self._get_volume_display_name(vol)
|
volume_options.extend([self._get_volume_display_name(vol)
|
||||||
for vol in volumes])
|
for vol in volumes])
|
||||||
except:
|
except:
|
||||||
@ -132,7 +133,7 @@ class VolumeOptionsAction(workflows.Action):
|
|||||||
try:
|
try:
|
||||||
snapshots = cinder.volume_snapshot_list(self.request)
|
snapshots = cinder.volume_snapshot_list(self.request)
|
||||||
snapshots = [s for s in snapshots
|
snapshots = [s for s in snapshots
|
||||||
if s.status == api.VOLUME_STATE_AVAILABLE]
|
if s.status == api.cinder.VOLUME_STATE_AVAILABLE]
|
||||||
volume_options.extend([self._get_volume_display_name(snap)
|
volume_options.extend([self._get_volume_display_name(snap)
|
||||||
for snap in snapshots])
|
for snap in snapshots])
|
||||||
except:
|
except:
|
||||||
@ -223,8 +224,8 @@ class SetInstanceDetailsAction(workflows.Action):
|
|||||||
public = {"is_public": True,
|
public = {"is_public": True,
|
||||||
"status": "active"}
|
"status": "active"}
|
||||||
try:
|
try:
|
||||||
public_images, _more = api.glance.image_list_detailed(request,
|
public_images, _more = glance.image_list_detailed(
|
||||||
filters=public)
|
request, filters=public)
|
||||||
except:
|
except:
|
||||||
public_images = []
|
public_images = []
|
||||||
exceptions.handle(request,
|
exceptions.handle(request,
|
||||||
@ -239,8 +240,8 @@ class SetInstanceDetailsAction(workflows.Action):
|
|||||||
owner = {"property-owner_id": project_id,
|
owner = {"property-owner_id": project_id,
|
||||||
"status": "active"}
|
"status": "active"}
|
||||||
try:
|
try:
|
||||||
owned_images, _more = api.glance.image_list_detailed(request,
|
owned_images, _more = glance.image_list_detailed(
|
||||||
filters=owner)
|
request, filters=owner)
|
||||||
except:
|
except:
|
||||||
exceptions.handle(request,
|
exceptions.handle(request,
|
||||||
_("Unable to retrieve images for "
|
_("Unable to retrieve images for "
|
||||||
|
@ -40,12 +40,12 @@ class UsageViewTests(test.TestCase):
|
|||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
usage_obj = api.nova.NovaUsage(self.usages.first())
|
usage_obj = api.nova.NovaUsage(self.usages.first())
|
||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
||||||
api.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn(usage_obj)
|
.AndReturn(usage_obj)
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -57,11 +57,11 @@ class UsageViewTests(test.TestCase):
|
|||||||
def test_unauthorized(self):
|
def test_unauthorized(self):
|
||||||
exc = self.exceptions.keystone_unauthorized
|
exc = self.exceptions.keystone_unauthorized
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
api.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndRaise(exc)
|
.AndRaise(exc)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
url = reverse('horizon:project:overview:index')
|
url = reverse('horizon:project:overview:index')
|
||||||
@ -72,14 +72,14 @@ class UsageViewTests(test.TestCase):
|
|||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
usage_obj = api.nova.NovaUsage(self.usages.first())
|
usage_obj = api.nova.NovaUsage(self.usages.first())
|
||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.nova.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn(usage_obj)
|
.AndReturn(usage_obj)
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -91,14 +91,14 @@ class UsageViewTests(test.TestCase):
|
|||||||
def test_usage_exception_usage(self):
|
def test_usage_exception_usage(self):
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.nova.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
@ -109,14 +109,14 @@ class UsageViewTests(test.TestCase):
|
|||||||
def test_usage_exception_quota(self):
|
def test_usage_exception_quota(self):
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
usage_obj = api.nova.NovaUsage(self.usages.first())
|
usage_obj = api.nova.NovaUsage(self.usages.first())
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.nova.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn(usage_obj)
|
.AndReturn(usage_obj)
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest))\
|
quotas.tenant_quota_usages(IsA(http.HttpRequest))\
|
||||||
.AndRaise(self.exceptions.nova)
|
.AndRaise(self.exceptions.nova)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
@ -129,14 +129,14 @@ class UsageViewTests(test.TestCase):
|
|||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
usage_obj = api.nova.NovaUsage(self.usages.first())
|
usage_obj = api.nova.NovaUsage(self.usages.first())
|
||||||
quota_data = self.quota_usages.first()
|
quota_data = self.quota_usages.first()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api.nova, 'usage_get')
|
||||||
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
self.mox.StubOutWithMock(quotas, 'tenant_quota_usages')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.nova.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
Func(usage.almost_now)) \
|
Func(usage.almost_now)) \
|
||||||
.AndReturn(usage_obj)
|
.AndReturn(usage_obj)
|
||||||
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ class DeleteRouter(tables.DeleteAction):
|
|||||||
obj = self.table.get_object_by_id(obj_id)
|
obj = self.table.get_object_by_id(obj_id)
|
||||||
name = self.table.get_object_display(obj)
|
name = self.table.get_object_display(obj)
|
||||||
try:
|
try:
|
||||||
api.router_delete(request, obj_id)
|
api.quantum.router_delete(request, obj_id)
|
||||||
except q_ext.QuantumClientException as e:
|
except q_ext.QuantumClientException as e:
|
||||||
msg = _('Unable to delete router "%s"') % e.message
|
msg = _('Unable to delete router "%s"') % e.message
|
||||||
LOG.info(msg)
|
LOG.info(msg)
|
||||||
@ -65,7 +65,7 @@ class UpdateRow(tables.Row):
|
|||||||
ajax = True
|
ajax = True
|
||||||
|
|
||||||
def get_data(self, request, router_id):
|
def get_data(self, request, router_id):
|
||||||
router = api.router_get(request, router_id)
|
router = api.quantum.router_get(request, router_id)
|
||||||
return router
|
return router
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class OverviewTab(tabs.Tab):
|
|||||||
def get_context_data(self, request):
|
def get_context_data(self, request):
|
||||||
router_id = self.tab_group.kwargs['router_id']
|
router_id = self.tab_group.kwargs['router_id']
|
||||||
try:
|
try:
|
||||||
router = api.router_get(request, router_id)
|
router = api.quantum.router_get(request, router_id)
|
||||||
except:
|
except:
|
||||||
redirect = reverse(redirect_url)
|
redirect = reverse(redirect_url)
|
||||||
exceptions.handle(self.request,
|
exceptions.handle(self.request,
|
||||||
|
@ -188,10 +188,10 @@ class AttachForm(forms.SelfHandlingForm):
|
|||||||
# it, so let's slice that off...
|
# it, so let's slice that off...
|
||||||
instance_name = instance_name.rsplit(" (")[0]
|
instance_name = instance_name.rsplit(" (")[0]
|
||||||
try:
|
try:
|
||||||
attach = api.instance_volume_attach(request,
|
attach = api.nova.instance_volume_attach(request,
|
||||||
data['volume_id'],
|
data['volume_id'],
|
||||||
data['instance'],
|
data['instance'],
|
||||||
data.get('device', ''))
|
data.get('device', ''))
|
||||||
volume = cinder.volume_get(request, data['volume_id'])
|
volume = cinder.volume_get(request, data['volume_id'])
|
||||||
if not volume.display_name:
|
if not volume.display_name:
|
||||||
volume_name = volume.id
|
volume_name = volume.id
|
||||||
|
@ -196,9 +196,9 @@ class DetachVolume(tables.BatchAction):
|
|||||||
|
|
||||||
def action(self, request, obj_id):
|
def action(self, request, obj_id):
|
||||||
attachment = self.table.get_object_by_id(obj_id)
|
attachment = self.table.get_object_by_id(obj_id)
|
||||||
api.instance_volume_detach(request,
|
api.nova.instance_volume_detach(request,
|
||||||
attachment.get('server_id', None),
|
attachment.get('server_id', None),
|
||||||
obj_id)
|
obj_id)
|
||||||
|
|
||||||
def get_success_url(self, request):
|
def get_success_url(self, request):
|
||||||
return reverse('horizon:project:volumes:index')
|
return reverse('horizon:project:volumes:index')
|
||||||
|
@ -73,13 +73,14 @@ class DownloadX509Credentials(forms.SelfHandlingForm):
|
|||||||
keys = find_or_create_access_keys(request, data.get('tenant'))
|
keys = find_or_create_access_keys(request, data.get('tenant'))
|
||||||
context = {'ec2_access_key': keys.access,
|
context = {'ec2_access_key': keys.access,
|
||||||
'ec2_secret_key': keys.secret,
|
'ec2_secret_key': keys.secret,
|
||||||
'ec2_endpoint': api.url_for(request,
|
'ec2_endpoint': api.base.url_for(
|
||||||
'ec2',
|
request,
|
||||||
endpoint_type='publicURL')}
|
'ec2',
|
||||||
|
endpoint_type='publicURL')}
|
||||||
try:
|
try:
|
||||||
s3_endpoint = api.url_for(request,
|
s3_endpoint = api.base.url_for(request,
|
||||||
's3',
|
's3',
|
||||||
endpoint_type='publicURL')
|
endpoint_type='publicURL')
|
||||||
except exceptions.ServiceCatalogException:
|
except exceptions.ServiceCatalogException:
|
||||||
s3_endpoint = None
|
s3_endpoint = None
|
||||||
context['s3_endpoint'] = s3_endpoint
|
context['s3_endpoint'] = s3_endpoint
|
||||||
|
@ -41,7 +41,7 @@ class DownloadOpenRCForm(forms.SelfHandlingForm):
|
|||||||
# Populate tenant choices
|
# Populate tenant choices
|
||||||
tenant_choices = []
|
tenant_choices = []
|
||||||
try:
|
try:
|
||||||
tenants = api.tenant_list(request)
|
tenants = api.keystone.tenant_list(request)
|
||||||
except:
|
except:
|
||||||
tenants = []
|
tenants = []
|
||||||
exceptions.handle(request, _("Unable to retrieve project list."))
|
exceptions.handle(request, _("Unable to retrieve project list."))
|
||||||
@ -55,9 +55,9 @@ class DownloadOpenRCForm(forms.SelfHandlingForm):
|
|||||||
tenant_id = data['tenant']
|
tenant_id = data['tenant']
|
||||||
tenant_name = dict(self.fields['tenant'].choices)[tenant_id]
|
tenant_name = dict(self.fields['tenant'].choices)[tenant_id]
|
||||||
|
|
||||||
keystone_url = api.url_for(request,
|
keystone_url = api.base.url_for(request,
|
||||||
'identity',
|
'identity',
|
||||||
endpoint_type='publicURL')
|
endpoint_type='publicURL')
|
||||||
|
|
||||||
context = {'user': request.user,
|
context = {'user': request.user,
|
||||||
'auth_url': keystone_url,
|
'auth_url': keystone_url,
|
||||||
|
@ -41,7 +41,7 @@ class ServerWrapperTests(test.TestCase):
|
|||||||
image.id).AndReturn(image)
|
image.id).AndReturn(image)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
server = api.Server(self.servers.first(), self.request)
|
server = api.nova.Server(self.servers.first(), self.request)
|
||||||
self.assertEqual(server.image_name, image.name)
|
self.assertEqual(server.image_name, image.name)
|
||||||
|
|
||||||
|
|
||||||
@ -70,9 +70,9 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
console_type).AndReturn(console)
|
console_type).AndReturn(console)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
ret_val = api.server_vnc_console(self.request,
|
ret_val = api.nova.server_vnc_console(self.request,
|
||||||
server.id,
|
server.id,
|
||||||
console_type)
|
console_type)
|
||||||
self.assertIsInstance(ret_val, api.nova.VNCConsole)
|
self.assertIsInstance(ret_val, api.nova.VNCConsole)
|
||||||
|
|
||||||
def test_server_list(self):
|
def test_server_list(self):
|
||||||
@ -85,7 +85,7 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
|
|
||||||
ret_val = api.nova.server_list(self.request, all_tenants=True)
|
ret_val = api.nova.server_list(self.request, all_tenants=True)
|
||||||
for server in ret_val:
|
for server in ret_val:
|
||||||
self.assertIsInstance(server, api.Server)
|
self.assertIsInstance(server, api.nova.Server)
|
||||||
|
|
||||||
def test_usage_get(self):
|
def test_usage_get(self):
|
||||||
novaclient = self.stub_novaclient()
|
novaclient = self.stub_novaclient()
|
||||||
@ -95,7 +95,8 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
'end').AndReturn(self.usages.first())
|
'end').AndReturn(self.usages.first())
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
ret_val = api.usage_get(self.request, self.tenant.id, 'start', 'end')
|
ret_val = api.nova.usage_get(self.request, self.tenant.id,
|
||||||
|
'start', 'end')
|
||||||
self.assertIsInstance(ret_val, api.nova.NovaUsage)
|
self.assertIsInstance(ret_val, api.nova.NovaUsage)
|
||||||
|
|
||||||
def test_usage_list(self):
|
def test_usage_list(self):
|
||||||
@ -106,9 +107,9 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
novaclient.usage.list('start', 'end', True).AndReturn(usages)
|
novaclient.usage.list('start', 'end', True).AndReturn(usages)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
ret_val = api.usage_list(self.request, 'start', 'end')
|
ret_val = api.nova.usage_list(self.request, 'start', 'end')
|
||||||
for usage in ret_val:
|
for usage in ret_val:
|
||||||
self.assertIsInstance(usage, api.NovaUsage)
|
self.assertIsInstance(usage, api.nova.NovaUsage)
|
||||||
|
|
||||||
def test_server_get(self):
|
def test_server_get(self):
|
||||||
server = self.servers.first()
|
server = self.servers.first()
|
||||||
@ -118,7 +119,7 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
novaclient.servers.get(server.id).AndReturn(server)
|
novaclient.servers.get(server.id).AndReturn(server)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
ret_val = api.server_get(self.request, server.id)
|
ret_val = api.nova.server_get(self.request, server.id)
|
||||||
self.assertIsInstance(ret_val, api.nova.Server)
|
self.assertIsInstance(ret_val, api.nova.Server)
|
||||||
|
|
||||||
def test_server_remove_floating_ip(self):
|
def test_server_remove_floating_ip(self):
|
||||||
@ -134,9 +135,9 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
.AndReturn(server)
|
.AndReturn(server)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
server = api.server_remove_floating_ip(self.request,
|
server = api.nova.server_remove_floating_ip(self.request,
|
||||||
server.id,
|
server.id,
|
||||||
floating_ip.id)
|
floating_ip.id)
|
||||||
self.assertIsInstance(server, api.nova.Server)
|
self.assertIsInstance(server, api.nova.Server)
|
||||||
|
|
||||||
def test_server_add_floating_ip(self):
|
def test_server_add_floating_ip(self):
|
||||||
@ -152,9 +153,9 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
.AndReturn(server)
|
.AndReturn(server)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
server = api.server_add_floating_ip(self.request,
|
server = api.nova.server_add_floating_ip(self.request,
|
||||||
server.id,
|
server.id,
|
||||||
floating_ip.id)
|
floating_ip.id)
|
||||||
self.assertIsInstance(server, api.nova.Server)
|
self.assertIsInstance(server, api.nova.Server)
|
||||||
|
|
||||||
def test_absolute_limits_handle_unlimited(self):
|
def test_absolute_limits_handle_unlimited(self):
|
||||||
@ -172,7 +173,7 @@ class ComputeApiTests(test.APITestCase):
|
|||||||
novaclient.limits.get(reserved=True).AndReturn(limits)
|
novaclient.limits.get(reserved=True).AndReturn(limits)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
ret_val = api.tenant_absolute_limits(self.request, reserved=True)
|
ret_val = api.nova.tenant_absolute_limits(self.request, reserved=True)
|
||||||
expected_results = {"maxTotalCores": float("inf"),
|
expected_results = {"maxTotalCores": float("inf"),
|
||||||
"maxTotalInstances": 10}
|
"maxTotalInstances": 10}
|
||||||
for key in expected_results.keys():
|
for key in expected_results.keys():
|
||||||
|
@ -37,7 +37,7 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
full_listing=True).AndReturn([{}, cont_data])
|
full_listing=True).AndReturn([{}, cont_data])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
(conts, more) = api.swift_get_containers(self.request)
|
(conts, more) = api.swift.swift_get_containers(self.request)
|
||||||
self.assertEqual(len(conts), len(containers))
|
self.assertEqual(len(conts), len(containers))
|
||||||
self.assertFalse(more)
|
self.assertFalse(more)
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
swift_api.put_container(container.name).AndReturn(container)
|
swift_api.put_container(container.name).AndReturn(container)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
# Verification handled by mox, no assertions needed.
|
# Verification handled by mox, no assertions needed.
|
||||||
api.swift_create_container(self.request, container.name)
|
api.swift.swift_create_container(self.request, container.name)
|
||||||
|
|
||||||
def test_swift_create_container(self):
|
def test_swift_create_container(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
@ -59,7 +59,7 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
# Verification handled by mox, no assertions needed.
|
# Verification handled by mox, no assertions needed.
|
||||||
with self.assertRaises(exceptions.AlreadyExists):
|
with self.assertRaises(exceptions.AlreadyExists):
|
||||||
api.swift_create_container(self.request, container.name)
|
api.swift.swift_create_container(self.request, container.name)
|
||||||
|
|
||||||
def test_swift_get_objects(self):
|
def test_swift_get_objects(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
@ -74,7 +74,8 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
full_listing=True).AndReturn([{}, objects])
|
full_listing=True).AndReturn([{}, objects])
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
(objs, more) = api.swift_get_objects(self.request, container.name)
|
(objs, more) = api.swift.swift_get_objects(self.request,
|
||||||
|
container.name)
|
||||||
self.assertEqual(len(objs), len(objects))
|
self.assertEqual(len(objs), len(objects))
|
||||||
self.assertFalse(more)
|
self.assertFalse(more)
|
||||||
|
|
||||||
@ -98,10 +99,10 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
api.swift_upload_object(self.request,
|
api.swift.swift_upload_object(self.request,
|
||||||
container.name,
|
container.name,
|
||||||
obj.name,
|
obj.name,
|
||||||
FakeFile())
|
FakeFile())
|
||||||
|
|
||||||
def test_swift_object_exists(self):
|
def test_swift_object_exists(self):
|
||||||
container = self.containers.first()
|
container = self.containers.first()
|
||||||
@ -115,6 +116,6 @@ class SwiftApiTests(test.APITestCase):
|
|||||||
self.mox.ReplayAll()
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
args = self.request, container.name, obj.name
|
args = self.request, container.name, obj.name
|
||||||
self.assertTrue(api.swift_object_exists(*args))
|
self.assertTrue(api.swift.swift_object_exists(*args))
|
||||||
# Again, for a "non-existent" object
|
# Again, for a "non-existent" object
|
||||||
self.assertFalse(api.swift_object_exists(*args))
|
self.assertFalse(api.swift.swift_object_exists(*args))
|
||||||
|
@ -127,7 +127,7 @@ class GlobalUsage(BaseUsage):
|
|||||||
show_terminated = True
|
show_terminated = True
|
||||||
|
|
||||||
def get_usage_list(self, start, end):
|
def get_usage_list(self, start, end):
|
||||||
return api.usage_list(self.request, start, end)
|
return api.nova.usage_list(self.request, start, end)
|
||||||
|
|
||||||
|
|
||||||
class TenantUsage(BaseUsage):
|
class TenantUsage(BaseUsage):
|
||||||
@ -139,7 +139,7 @@ class TenantUsage(BaseUsage):
|
|||||||
self.show_terminated)
|
self.show_terminated)
|
||||||
instances = []
|
instances = []
|
||||||
terminated_instances = []
|
terminated_instances = []
|
||||||
usage = api.usage_get(self.request, self.tenant_id, start, end)
|
usage = api.nova.usage_get(self.request, self.tenant_id, start, end)
|
||||||
# Attribute may not exist if there are no instances
|
# Attribute may not exist if there are no instances
|
||||||
if hasattr(usage, 'server_usages'):
|
if hasattr(usage, 'server_usages'):
|
||||||
now = self.today
|
now = self.today
|
||||||
|
Loading…
x
Reference in New Issue
Block a user