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:
Akihiro MOTOKI 2013-01-20 00:50:11 +09:00
parent b8071bcce7
commit 12faaa5c30
62 changed files with 1040 additions and 929 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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.'))

View File

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

View File

@ -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.')

View File

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

View File

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

View File

@ -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"

View File

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

View File

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

View File

@ -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:

View File

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

View File

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

View File

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

View File

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

View File

@ -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,

View File

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

View File

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

View File

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

View File

@ -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,

View File

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

View File

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

View File

@ -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,

View File

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

View File

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

View File

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

View File

@ -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,

View File

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

View File

@ -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,

View File

@ -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],

View File

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

View File

@ -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__,

View File

@ -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,

View File

@ -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:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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,

View File

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

View File

@ -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 "

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 "

View File

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

View File

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

View File

@ -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,

View File

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

View File

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

View File

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

View File

@ -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,

View File

@ -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():

View File

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

View File

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