make tests pass again
This commit is contained in:
parent
6b2c9d2b84
commit
093fe4f74f
@ -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)
|
||||
|
||||
|
||||
|
@ -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(),
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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',
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user