make tests pass again

This commit is contained in:
Anthony Young 2011-07-16 01:14:07 -07:00
parent 6b2c9d2b84
commit 093fe4f74f
8 changed files with 75 additions and 45 deletions

View File

@ -222,7 +222,7 @@ class User(APIResourceWrapper):
def url_for(request, service_name, admin=False):
catalog = request.session['serviceCatalog']
catalog = request.user.service_catalog
if admin:
rv = catalog[service_name][0]['adminURL']
else:
@ -373,9 +373,9 @@ def keypair_list(request):
return [KeyPair(key) for key in extras_api(request).keypairs.list()]
def server_create(request, name, image, flavor, user_data, key_name):
def server_create(request, name, image, flavor, key_name, user_data):
return Server(extras_api(request).servers.create(
name, image, flavor, user_data=user_data, key_name=key_name),
name, image, flavor, key_name=key_name, user_data=user_data),
request)

View File

@ -59,7 +59,6 @@ class LaunchForm(forms.SelfHandlingForm):
user_data = forms.CharField(widget=forms.Textarea,
label="User Data",
required=False)
name = forms.CharField(max_length=80, label="Server Name")
# make the dropdown populate when the form is loaded not when django is
# started
@ -171,23 +170,16 @@ def launch(request, tenant_id, image_id):
# TODO(mgius): Any reason why these can't be after the launchform logic?
# If The form is valid, we've just wasted these two api calls
image = api.image_get(request, image_id)
tenant = api.token_get_tenant(request, request.user.tenant)
quotas = api.tenant_quota_get(request, request.user.tenant)
try:
image = api.image_get(request, image_id)
tenant = api.token_get_tenant(request, request.user.tenant)
quotas = api.tenant_quota_get(request, request.user.tenant)
quotas.ram = int(quotas.ram)/100
except Exception, e:
messages.error(request, 'Unable to retrieve image %s: %s' %
messages.error(request, 'Error parsing quota for %s: %s' %
(image_id, e.message))
return redirect('dash_instances', tenant_id)
try:
tenant = api.token_get_tenant(request, request.user.tenant)
except api_exceptions.ApiException, e:
messages.error(request, 'Unable to retrieve tenant %s: %s' %
(request.user.tenant, e.message))
return redirect('dash_instances', tenant_id)
form, handled = LaunchForm.maybe_handle(
request, initial={'flavorlist': flavorlist(),
'keynamelist': keynamelist(),

View File

@ -28,9 +28,9 @@ from django import template
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core import validators
from django import shortcuts
from django.shortcuts import redirect, render_to_response
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext as _
from django_openstack import api
@ -57,12 +57,14 @@ class DeleteKeypair(forms.SelfHandlingForm):
class CreateKeypair(forms.SelfHandlingForm):
name = forms.CharField(max_length="20", label="Keypair Name")
name = forms.CharField(max_length="20", label="Keypair Name",
validators=[validators.RegexValidator('\w+')])
def handle(self, request, data):
try:
LOG.info('Creating keypair "%s"' % data['name'])
keypair = api.keypair_create(request, slugify(data['name']))
keypair = api.keypair_create(request, data['name'])
response = http.HttpResponse(mimetype='application/binary')
response['Content-Disposition'] = \
'attachment; filename=%s.pem' % \
@ -79,6 +81,9 @@ class CreateKeypair(forms.SelfHandlingForm):
def index(request, tenant_id):
delete_form, handled = DeleteKeypair.maybe_handle(request)
if handled:
return handled
try:
keypairs = api.keypair_list(request)
except api_exceptions.ApiException, e:

View File

@ -25,11 +25,12 @@ import openstack
class User(object):
def __init__(self, token, user, tenant, admin):
def __init__(self, token, user, tenant, admin, service_catalog):
self.token = token
self.username = user
self.tenant = tenant
self.admin = admin
self.service_catalog = service_catalog
def is_authenticated(self):
# TODO: deal with token expiration
@ -45,11 +46,13 @@ def get_user_from_request(request):
return User(request.session['token'],
request.session['user'],
request.session['tenant'],
request.session['admin'])
request.session['admin'],
request.session['serviceCatalog'])
class LazyUser(object):
def __get__(self, request, obj_type=None):
return get_user_from_request(request)
if not hasattr(request, '_cached_user'):
request._cached_user = get_user_from_request(request)
return request._cached_user

View File

@ -49,6 +49,8 @@ class TestCase(test.TestCase):
TEST_TOKEN = 'aToken'
TEST_USER = 'test'
TEST_SERVICE_CATALOG = {'cdn': [{'adminURL': 'http://cdn.admin-nets.local/v1.1/1234', 'region': 'RegionOne', 'internalURL': 'http://127.0.0.1:7777/v1.1/1234', 'publicURL': 'http://cdn.publicinternets.com/v1.1/1234'}], 'nova_compat': [{'adminURL': 'http://127.0.0.1:8774/v1.0', 'region': 'RegionOne', 'internalURL': 'http://localhost:8774/v1.0', 'publicURL': 'http://nova.publicinternets.com/v1.0/'}], 'nova': [{'adminURL': 'http://nova/novapi/admin', 'region': 'RegionOne', 'internalURL': 'http://nova/novapi/internal', 'publicURL': 'http://nova/novapi/public'}], 'keystone': [{'adminURL': 'http://127.0.0.1:8081/v2.0', 'region': 'RegionOne', 'internalURL': 'http://127.0.0.1:8080/v2.0', 'publicURL': 'http://keystone.publicinternets.com/v2.0'}], 'glance': [{'adminURL': 'http://glance/glanceapi/admin', 'region': 'RegionOne', 'internalURL': 'http://glance/glanceapi/internal', 'publicURL': 'http://glance/glanceapi/public'}], 'swift': [{'adminURL': 'http://swift.admin-nets.local:8080/', 'region': 'RegionOne', 'internalURL': 'http://127.0.0.1:8080/v1/AUTH_1234', 'publicURL': 'http://swift.publicinternets.com/v1/AUTH_1234'}]}
def setUp(self):
self.mox = mox.Mox()
self._real_render_to_response = shortcuts.render_to_response
@ -56,7 +58,7 @@ class TestCase(test.TestCase):
self._real_get_user_from_request = keystone.get_user_from_request
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
True)
True, self.TEST_SERVICE_CATALOG)
self.request = http.HttpRequest()
keystone.AuthenticationMiddleware().process_request(self.request)
@ -70,6 +72,6 @@ class TestCase(test.TestCase):
('Location', settings.TESTSERVER + expected_url))
self.assertEqual(response.status_code, 302)
def setActiveUser(self, token, username, tenant, is_admin):
def setActiveUser(self, token, username, tenant, is_admin, service_catalog):
keystone.get_user_from_request = \
lambda x: keystone.User(token, username, tenant, is_admin)
lambda x: keystone.User(token, username, tenant, is_admin, service_catalog)

View File

@ -289,16 +289,15 @@ class ApiHelperTests(test.TestCase):
GLANCE_URL = 'http://glance/glanceapi/'
NOVA_URL = 'http://nova/novapi/'
serviceCatalog = {
'glance': [{'adminURL': GLANCE_URL + 'admin',
'internalURL': GLANCE_URL + 'internal'},
],
'nova': [{'adminURL': NOVA_URL + 'admin',
'internalURL': NOVA_URL + 'internal'},
],
}
self.request.session['serviceCatalog'] = serviceCatalog
# NOTE: serviceCatalog is now constructed as part of the user object
# serviceCatalog = {
# 'glance': [{'adminURL': GLANCE_URL + 'admin',
# 'internalURL': GLANCE_URL + 'internal'},
# ],
# 'nova': [{'adminURL': NOVA_URL + 'admin',
# 'internalURL': NOVA_URL + 'internal'},
# ],
# }
url = api.url_for(self.request, 'glance')
self.assertEqual(url, GLANCE_URL + 'internal')
@ -516,7 +515,7 @@ class AccountApiTests(test.TestCase):
account_api.users = self.mox.CreateMockAnything()
account_api.users.create(TEST_USERNAME, TEST_EMAIL, TEST_PASSWORD,
TEST_TENANT_ID).AndReturn(TEST_RETURN)
TEST_TENANT_ID, True).AndReturn(TEST_RETURN)
self.mox.ReplayAll()
@ -999,7 +998,7 @@ class ExtrasApiTests(test.TestCase):
extras_api.consoles.create(
TEST_INSTANCE_ID, TEST_CONSOLE_KIND).AndReturn(TEST_RETURN)
extras_api.consoles.create(
TEST_INSTANCE_ID, None).AndReturn(TEST_RETURN + '2')
TEST_INSTANCE_ID, 'text').AndReturn(TEST_RETURN + '2')
self.mox.ReplayAll()
@ -1095,7 +1094,7 @@ class ExtrasApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.server_create(self.request, NAME, IMAGE, FLAVOR,
USER_DATA, KEY)
KEY, USER_DATA)
self.assertIsInstance(ret_val, api.Server)
self.assertEqual(ret_val._apiresource, TEST_RETURN)

View File

@ -11,6 +11,10 @@ from openstackx.api import exceptions as api_exceptions
from mox import IgnoreArg, IsA
class FakeQuota:
ram = 100
class ImageViewTests(base.BaseViewTests):
def setUp(self):
super(ImageViewTests, self).setUp()
@ -119,6 +123,10 @@ class ImageViewTests(base.BaseViewTests):
api.image_get(IsA(http.HttpRequest),
IMAGE_ID).AndReturn(self.visibleImage)
self.mox.StubOutWithMock(api, 'tenant_quota_get')
api.tenant_quota_get(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(FakeQuota)
self.mox.StubOutWithMock(api, 'token_get_tenant')
api.token_get_tenant(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
@ -165,6 +173,7 @@ class ImageViewTests(base.BaseViewTests):
'key_name': KEY_NAME,
'name': SERVER_NAME,
'user_data': USER_DATA,
'tenant_id': self.TEST_TENANT,
}
self.mox.StubOutWithMock(api, 'image_get')
@ -175,6 +184,10 @@ class ImageViewTests(base.BaseViewTests):
api.token_get_tenant(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
self.mox.StubOutWithMock(api, 'tenant_quota_get')
api.tenant_quota_get(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(FakeQuota)
self.mox.StubOutWithMock(api, 'flavor_list')
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
@ -193,7 +206,7 @@ class ImageViewTests(base.BaseViewTests):
api.server_create(IsA(http.HttpRequest), SERVER_NAME,
self.visibleImage, self.flavors[0],
user_data=USER_DATA, key_name=KEY_NAME)
KEY_NAME, USER_DATA)
self.mox.StubOutWithMock(messages, 'success')
messages.success(IsA(http.HttpRequest), IsA(str))
@ -204,8 +217,8 @@ class ImageViewTests(base.BaseViewTests):
args=[self.TEST_TENANT, IMAGE_ID]),
form_data)
self.assertRedirectsNoFollow(res, reverse('dash_images_launch',
args=[self.TEST_TENANT, IMAGE_ID]))
self.assertRedirectsNoFollow(res, reverse('dash_instances',
args=[self.TEST_TENANT]))
self.mox.VerifyAll()
@ -220,6 +233,10 @@ class ImageViewTests(base.BaseViewTests):
api.token_get_tenant(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
self.mox.StubOutWithMock(api, 'tenant_quota_get')
api.tenant_quota_get(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(FakeQuota)
exception = api_exceptions.ApiException('apiException')
self.mox.StubOutWithMock(api, 'flavor_list')
api.flavor_list(IsA(http.HttpRequest)).AndRaise(exception)
@ -242,7 +259,7 @@ class ImageViewTests(base.BaseViewTests):
self.mox.VerifyAll()
def test_launch_keypairlist_error(self):
IMAGE_ID = '1'
IMAGE_ID = '2'
self.mox.StubOutWithMock(api, 'image_get')
api.image_get(IsA(http.HttpRequest),
@ -252,6 +269,10 @@ class ImageViewTests(base.BaseViewTests):
api.token_get_tenant(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
self.mox.StubOutWithMock(api, 'tenant_quota_get')
api.tenant_quota_get(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(FakeQuota)
self.mox.StubOutWithMock(api, 'flavor_list')
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
@ -285,6 +306,7 @@ class ImageViewTests(base.BaseViewTests):
'image_id': IMAGE_ID,
'key_name': KEY_NAME,
'name': SERVER_NAME,
'tenant_id': self.TEST_TENANT,
'user_data': USER_DATA,
}
@ -296,6 +318,10 @@ class ImageViewTests(base.BaseViewTests):
api.token_get_tenant(IgnoreArg(),
self.TEST_TENANT).AndReturn(self.TEST_TENANT)
self.mox.StubOutWithMock(api, 'tenant_quota_get')
api.tenant_quota_get(IsA(http.HttpRequest),
self.TEST_TENANT).AndReturn(FakeQuota)
self.mox.StubOutWithMock(api, 'flavor_list')
api.flavor_list(IgnoreArg()).AndReturn(self.flavors)
@ -313,13 +339,13 @@ class ImageViewTests(base.BaseViewTests):
self.mox.StubOutWithMock(api, 'server_create')
exception = api_exceptions.ApiException('apiException')
api.server_create(IgnoreArg(), SERVER_NAME,
api.server_create(IsA(http.HttpRequest), SERVER_NAME,
self.visibleImage, self.flavors[0],
user_data=USER_DATA,
key_name=KEY_NAME).AndRaise(exception)
KEY_NAME,
USER_DATA).AndRaise(exception)
self.mox.StubOutWithMock(messages, 'error')
messages.error(IgnoreArg(), IsA(unicode))
messages.error(IsA(http.HttpRequest), IsA(str))
self.mox.ReplayAll()
url = reverse('dash_images_launch',

View File

@ -284,6 +284,9 @@ class InstanceViewTests(base.BaseViewTests):
console_mock.output = CONSOLE_OUTPUT
self.mox.StubOutWithMock(api, 'console_create')
self.mox.StubOutWithMock(api, 'server_get')
api.server_get(IsA(http.HttpRequest),
str(self.servers[0].id)).AndReturn(self.servers[0])
api.console_create(IgnoreArg(),
unicode(INSTANCE_ID),
'vnc').AndReturn(console_mock)
@ -293,7 +296,7 @@ class InstanceViewTests(base.BaseViewTests):
res = self.client.get(reverse('dash_instances_vnc',
args=[self.TEST_TENANT, INSTANCE_ID]))
self.assertRedirectsNoFollow(res, CONSOLE_OUTPUT)
self.assertRedirectsNoFollow(res, CONSOLE_OUTPUT + '&title=serverName(1)')
self.mox.VerifyAll()