intermediate commit

This commit is contained in:
termie
2011-07-13 17:10:05 -07:00
parent dda978611d
commit 6b2c9d2b84
9 changed files with 132 additions and 183 deletions

View File

@@ -256,25 +256,26 @@ def check_openstackx(f):
def compute_api(request):
compute = openstack.compute.Compute(
auth_token=request.session['token'],
auth_token=request.user.token,
management_url=url_for(request, 'nova'))
# this below hack is necessary to make the jacobian compute client work
# TODO(mgius): It looks like this is unused now?
compute.client.auth_token = request.session['token']
compute.client.auth_token = request.user.token
compute.client.management_url = url_for(request, 'nova')
LOG.debug('compute_api connection created using token "%s"'
' and url "%s"' %
(request.session['token'], url_for(request, 'nova')))
(request.user.token, url_for(request, 'nova')))
return compute
def account_api(request):
LOG.error(dir(request))
LOG.debug('account_api connection created using token "%s"'
' and url "%s"' %
(request.session['token'],
(request.user.token,
url_for(request, 'identity', True)))
return openstackx.extras.Account(
auth_token=request.session['token'],
auth_token=request.user.token,
management_url=url_for(request, 'identity', True))
@@ -288,16 +289,16 @@ def glance_api(request):
def admin_api(request):
LOG.debug('admin_api connection created using token "%s"'
' and url "%s"' %
(request.session['token'], url_for(request, 'nova', True)))
return openstackx.admin.Admin(auth_token=request.session['token'],
(request.user.token, url_for(request, 'nova', True)))
return openstackx.admin.Admin(auth_token=request.user.token,
management_url=url_for(request, 'nova', True))
def extras_api(request):
LOG.debug('extras_api connection created using token "%s"'
' and url "%s"' %
(request.session['token'], url_for(request, 'nova')))
return openstackx.extras.Extras(auth_token=request.session['token'],
(request.user.token, url_for(request, 'nova')))
return openstackx.extras.Extras(auth_token=request.user.token,
management_url=url_for(request, 'nova'))
@@ -418,7 +419,7 @@ def service_update(request, name, enabled):
def token_get_tenant(request, tenant_id):
tenants = auth_api().tenants.for_token(request.session['token'])
tenants = auth_api().tenants.for_token(request.user.token)
for t in tenants:
if str(t.id) == str(tenant_id):
return Tenant(t)

View File

@@ -146,6 +146,7 @@ def index(request, tenant_id):
@login_required
def launch(request, tenant_id, image_id):
LOG.error(dir(request))
def flavorlist():
try:
fl = api.flavor_list(request)

View File

@@ -103,10 +103,6 @@ def index(request, tenant_id):
instances = []
try:
instances = api.server_list(request)
for instance in instances:
# FIXME - ported this over, but it is hacky
instance.attrs['image_name'] =\
image_dict.get(int(instance.attrs['image_ref']),{}).get('name')
except api_exceptions.ApiException as e:
LOG.error('Exception in instance index', exc_info=True)
messages.error(request, 'Unable to get instance list: %s' % e.message)

View File

@@ -0,0 +1,75 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
from django import http
from django import shortcuts
from django import test
from django.conf import settings
import mox
from django_openstack.middleware import keystone
def fake_render_to_response(template_name, context, context_instance=None,
mimetype='text/html'):
"""Replacement for render_to_response so that views can be tested
without having to stub out templates that belong in the frontend
implementation.
Should be able to be tested using the django unit test assertions like a
normal render_to_response return value can be.
"""
class Template(object):
def __init__(self, name):
self.name = name
if context_instance is None:
context_instance = django_template.Context(context)
else:
context_instance.update(context)
resp = http.HttpResponse()
template = Template(template_name)
resp.write('<html><body><p>'
'This is a fake httpresponse for testing purposes only'
'</p></body></html>')
# Allows django.test.client to populate fields on the response object
test.signals.template_rendered.send(template, template=template,
context=context_instance)
return resp
class TestCase(test.TestCase):
TEST_PROJECT = 'test'
TEST_REGION = 'test'
TEST_STAFF_USER = 'staffUser'
TEST_TENANT = 'aTenant'
TEST_TOKEN = 'aToken'
TEST_USER = 'test'
def setUp(self):
self.mox = mox.Mox()
self._real_render_to_response = shortcuts.render_to_response
shortcuts.render_to_response = fake_render_to_response
self._real_get_user_from_request = keystone.get_user_from_request
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
True)
self.request = http.HttpRequest()
keystone.AuthenticationMiddleware().process_request(self.request)
def tearDown(self):
self.mox.UnsetStubs()
shortcuts.render_to_response = self._real_render_to_response
keystone.get_user_from_request = self._real_get_user_from_request
def assertRedirectsNoFollow(self, response, expected_url):
self.assertEqual(response._headers['location'],
('Location', settings.TESTSERVER + expected_url))
self.assertEqual(response.status_code, 302)
def setActiveUser(self, token, username, tenant, is_admin):
keystone.get_user_from_request = \
lambda x: keystone.User(token, username, tenant, is_admin)

View File

@@ -24,7 +24,6 @@ import json
import mox
from django import http
from django import test
from django.conf import settings
from django_openstack import api
from glance import client as glance_client
@@ -35,6 +34,10 @@ from openstackx import auth as OSAuth
from openstackx import extras as OSExtras
from django_openstack import test
from django_openstack.middleware import keystone
TEST_CONSOLE_KIND = 'vnc'
TEST_EMAIL = 'test@test.com'
TEST_HOSTNAME = 'hostname'
@@ -228,7 +231,7 @@ class ServerWrapperTests(test.TestCase):
IMAGE_REF = '3'
def setUp(self):
self.mox = mox.Mox()
super(ServerWrapperTests, self).setUp()
# these are all objects "fetched" from the api
self.inner_attrs = {'host': self.HOST}
@@ -236,10 +239,7 @@ class ServerWrapperTests(test.TestCase):
self.inner_server = Server(self.ID, self.IMAGE_REF, self.inner_attrs)
self.inner_server_no_attrs = Server(self.ID, self.IMAGE_REF)
self.request = self.mox.CreateMock(http.HttpRequest)
def tearDown(self):
self.mox.UnsetStubs()
#self.request = self.mox.CreateMock(http.HttpRequest)
def test_get_attrs(self):
server = api.Server(self.inner_server, self.request)
@@ -284,13 +284,6 @@ class ServerWrapperTests(test.TestCase):
class ApiHelperTests(test.TestCase):
""" Tests for functions that don't use one of the api objects """
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = dict()
def tearDown(self):
self.mox.UnsetStubs()
def test_url_for(self):
GLANCE_URL = 'http://glance/glanceapi/'
@@ -422,15 +415,6 @@ class ApiHelperTests(test.TestCase):
class AccountApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = dict()
self.request.session['token'] = TEST_TOKEN
def tearDown(self):
self.mox.UnsetStubs()
def stub_account_api(self):
self.mox.StubOutWithMock(api, 'account_api')
account_api = self.mox.CreateMock(OSExtras.Account)
@@ -537,7 +521,7 @@ class AccountApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.user_create(self.request, TEST_USERNAME, TEST_EMAIL,
TEST_PASSWORD, TEST_TENANT_ID)
TEST_PASSWORD, TEST_TENANT_ID, True)
self.assertIsInstance(ret_val, api.User)
self.assertEqual(ret_val._apiresource, TEST_RETURN)
@@ -641,14 +625,15 @@ class AccountApiTests(test.TestCase):
class AdminApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = dict()
self.request.session['token'] = TEST_TOKEN
#def setUp(self):
# super(AdminApiTests, self).setUp()
# self.request = http.HttpRequest()
# keystone.AuthenticationMiddleware().process_request(self.request)
# #self.request.session = dict()
# #self.request.session['token'] = TEST_TOKEN
def tearDown(self):
self.mox.UnsetStubs()
#def tearDown(self):
# super(AdminApiTests, self).tearDown()
def stub_admin_api(self, count=1):
self.mox.StubOutWithMock(api, 'admin_api')
@@ -764,12 +749,6 @@ class AdminApiTests(test.TestCase):
class AuthApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
def tearDown(self):
self.mox.UnsetStubs()
def test_get_auth_api(self):
settings.OPENSTACK_KEYSTONE_URL = TEST_URL
self.mox.StubOutClassWithMocks(OSAuth, 'Auth')
@@ -885,15 +864,6 @@ class AuthApiTests(test.TestCase):
class ComputeApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = {}
self.request.session['token'] = TEST_TOKEN
def tearDown(self):
self.mox.UnsetStubs()
def stub_compute_api(self, count=1):
self.mox.StubOutWithMock(api, 'compute_api')
compute_api = self.mox.CreateMock(OSCompute.Compute)
@@ -1002,15 +972,6 @@ class ComputeApiTests(test.TestCase):
class ExtrasApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = dict()
self.request.session['token'] = TEST_TOKEN
def tearDown(self):
self.mox.UnsetStubs()
def stub_extras_api(self, count=1):
self.mox.StubOutWithMock(api, 'extras_api')
extras_api = self.mox.CreateMock(OSExtras.Extras)
@@ -1197,16 +1158,6 @@ class ExtrasApiTests(test.TestCase):
class GlanceApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.request = http.HttpRequest()
self.request.session = dict()
self.request.session['token'] = TEST_TOKEN
def tearDown(self):
self.mox.UnsetStubs()
def stub_glance_api(self, count=1):
self.mox.StubOutWithMock(api, 'glance_api')
glance_api = self.mox.CreateMock(glance_client.Client)
@@ -1313,12 +1264,6 @@ class GlanceApiTests(test.TestCase):
class SwiftApiTests(test.TestCase):
def setUp(self):
self.mox = mox.Mox()
def tearDown(self):
self.mox.UnsetStubs()
def stub_swift_api(self, count=1):
self.mox.StubOutWithMock(api, 'swift_api')
swift_api = self.mox.CreateMock(cloudfiles.connection.Connection)

View File

@@ -22,14 +22,7 @@
Base classes for view based unit tests.
"""
import mox
from django import http
from django import shortcuts
from django import template as django_template
from django import test
from django.conf import settings
from django_openstack.middleware import keystone
from django_openstack import test
class Object(object):
@@ -37,70 +30,5 @@ class Object(object):
pass
def fake_render_to_response(template_name, context, context_instance=None,
mimetype='text/html'):
"""Replacement for render_to_response so that views can be tested
without having to stub out templates that belong in the frontend
implementation.
Should be able to be tested using the django unit test assertions like a
normal render_to_response return value can be.
"""
class Template(object):
def __init__(self, name):
self.name = name
if context_instance is None:
context_instance = django_template.Context(context)
else:
context_instance.update(context)
resp = http.HttpResponse()
template = Template(template_name)
resp.write('<html><body><p>'
'This is a fake httpresponse for testing purposes only'
'</p></body></html>')
# Allows django.test.client to populate fields on the response object
test.signals.template_rendered.send(template, template=template,
context=context_instance)
return resp
class BaseViewTests(test.TestCase):
TEST_PROJECT = 'test'
TEST_REGION = 'test'
TEST_STAFF_USER = 'staffUser'
TEST_TENANT = 'aTenant'
TEST_TOKEN = 'aToken'
TEST_USER = 'test'
@classmethod
def setUpClass(cls):
cls._real_render_to_response = shortcuts.render_to_response
shortcuts.render_to_response = fake_render_to_response
cls._real_get_user_from_request = keystone.get_user_from_request
@classmethod
def tearDownClass(cls):
shortcuts.render_to_response = cls._real_render_to_response
keystone.get_user_from_request = cls._real_get_user_from_request
def setUp(self):
self.mox = mox.Mox()
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
True)
def tearDown(self):
self.mox.UnsetStubs()
def assertRedirectsNoFollow(self, response, expected_url):
self.assertEqual(response._headers['location'],
('Location', settings.TESTSERVER + expected_url))
self.assertEqual(response.status_code, 302)
def setActiveUser(self, token, username, tenant, is_admin):
keystone.get_user_from_request = \
lambda x: keystone.User(token, username, tenant, is_admin)
pass

View File

@@ -1,4 +1,6 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
import logging
from django import http
from django.contrib import messages
from django.core.urlresolvers import reverse
@@ -287,43 +289,42 @@ class ImageViewTests(base.BaseViewTests):
}
self.mox.StubOutWithMock(api, 'image_get')
api.image_get(IsA(http.HttpRequest),
api.image_get(IgnoreArg(),
IMAGE_ID).AndReturn(self.visibleImage)
self.mox.StubOutWithMock(api, 'token_get_tenant')
api.token_get_tenant(IsA(http.HttpRequest),
api.token_get_tenant(IgnoreArg(),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
self.mox.StubOutWithMock(api, 'flavor_list')
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
api.flavor_list(IgnoreArg()).AndReturn(self.flavors)
self.mox.StubOutWithMock(api, 'keypair_list')
api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)
api.keypair_list(IgnoreArg()).AndReturn(self.keypairs)
# called again by the form
api.image_get(IsA(http.HttpRequest),
api.image_get(IgnoreArg(),
IMAGE_ID).AndReturn(self.visibleImage)
self.mox.StubOutWithMock(api, 'flavor_get')
api.flavor_get(IsA(http.HttpRequest),
api.flavor_get(IgnoreArg(),
IsA(unicode)).AndReturn(self.flavors[0])
self.mox.StubOutWithMock(api, 'server_create')
exception = api_exceptions.ApiException('apiException')
api.server_create(IsA(http.HttpRequest), SERVER_NAME,
api.server_create(IgnoreArg(), SERVER_NAME,
self.visibleImage, self.flavors[0],
user_data=USER_DATA,
key_name=KEY_NAME).AndRaise(exception)
self.mox.StubOutWithMock(messages, 'error')
messages.error(IsA(http.HttpRequest), IsA(str))
messages.error(IgnoreArg(), IsA(unicode))
self.mox.ReplayAll()
res = self.client.post(reverse('dash_images_launch',
args=[self.TEST_TENANT, IMAGE_ID]),
form_data)
url = reverse('dash_images_launch',
args=[self.TEST_TENANT, IMAGE_ID])
res = self.client.post(url, form_data)
self.assertTemplateUsed(res, 'dash_launch.html')

View File

@@ -8,7 +8,7 @@ from django_openstack import api
from django_openstack import utils
from django_openstack.tests.view_tests import base
from openstackx.api import exceptions as api_exceptions
from mox import IsA
from mox import IsA, IgnoreArg
class InstanceViewTests(base.BaseViewTests):
@@ -238,8 +238,9 @@ class InstanceViewTests(base.BaseViewTests):
console_mock.output = CONSOLE_OUTPUT
self.mox.StubOutWithMock(api, 'console_create')
api.console_create(IsA(http.HttpRequest),
unicode(INSTANCE_ID)).AndReturn(console_mock)
api.console_create(IgnoreArg(),
unicode(INSTANCE_ID),
IgnoreArg()).AndReturn(console_mock)
self.mox.ReplayAll()
@@ -258,11 +259,12 @@ class InstanceViewTests(base.BaseViewTests):
message='apiException')
self.mox.StubOutWithMock(api, 'console_create')
api.console_create(IsA(http.HttpRequest),
unicode(INSTANCE_ID)).AndRaise(exception)
api.console_create(IgnoreArg(),
unicode(INSTANCE_ID),
IgnoreArg()).AndRaise(exception)
self.mox.StubOutWithMock(messages, 'error')
messages.error(IsA(http.HttpRequest), IsA(unicode))
messages.error(IgnoreArg(), IsA(unicode))
self.mox.ReplayAll()
@@ -282,7 +284,7 @@ class InstanceViewTests(base.BaseViewTests):
console_mock.output = CONSOLE_OUTPUT
self.mox.StubOutWithMock(api, 'console_create')
api.console_create(IsA(http.HttpRequest),
api.console_create(IgnoreArg(),
unicode(INSTANCE_ID),
'vnc').AndReturn(console_mock)