Merge branch 'master' into redesign-swishy

This commit is contained in:
Jake Dahn
2011-07-19 14:52:55 -07:00
16 changed files with 321 additions and 133 deletions

View File

@@ -221,6 +221,18 @@ class User(APIResourceWrapper):
_attrs = ['email', 'enabled', 'id', 'tenantId']
class SwiftAuthentication(object):
"""Auth container to pass CloudFiles storage URL and token from
session.
"""
def __init__(self, storage_url, auth_token):
self.storage_url = storage_url
self.auth_token = auth_token
def authenticate(self):
return (self.storage_url, '', self.auth_token)
def url_for(request, service_name, admin=False):
catalog = request.user.service_catalog
if admin:
@@ -309,11 +321,13 @@ def auth_api():
management_url=settings.OPENSTACK_KEYSTONE_URL)
def swift_api():
return cloudfiles.get_connection(
settings.SWIFT_ACCOUNT + ":" + settings.SWIFT_USER,
settings.SWIFT_PASS,
authurl=settings.SWIFT_AUTHURL)
def swift_api(request):
LOG.debug('object store connection created using token "%s"'
' and url "%s"' %
(request.session['token'], url_for(request, 'swift')))
auth = SwiftAuthentication(url_for(request, 'swift'),
request.session['token'])
return cloudfiles.get_connection(auth=auth)
def console_create(request, instance_id, kind='text'):
@@ -523,16 +537,16 @@ def user_update_tenant(request, user_id, tenant_id):
return User(account_api(request).users.update_tenant(user_id, tenant_id))
def swift_container_exists(container_name):
def swift_container_exists(request, container_name):
try:
swift_api().get_container(container_name)
swift_api(request).get_container(container_name)
return True
except cloudfiles.errors.NoSuchContainer:
return False
def swift_object_exists(container_name, object_name):
container = swift_api().get_container(container_name)
def swift_object_exists(request, container_name, object_name):
container = swift_api(request).get_container(container_name)
try:
container.get_object(object_name)
@@ -541,32 +555,34 @@ def swift_object_exists(container_name, object_name):
return False
def swift_get_containers():
return [Container(c) for c in swift_api().get_all_containers()]
def swift_get_containers(request):
return [Container(c) for c in swift_api(request).get_all_containers()]
def swift_create_container(name):
if swift_container_exists(name):
def swift_create_container(request, name):
if swift_container_exists(request, name):
raise Exception('Container with name %s already exists.' % (name))
return Container(swift_api().create_container(name))
return Container(swift_api(request).create_container(name))
def swift_delete_container(name):
swift_api().delete_container(name)
def swift_delete_container(request, name):
swift_api(request).delete_container(name)
def swift_get_objects(container_name, prefix=None):
container = swift_api().get_container(container_name)
def swift_get_objects(request, container_name, prefix=None):
container = swift_api(request).get_container(container_name)
return [SwiftObject(o) for o in container.get_objects(prefix=prefix)]
def swift_copy_object(orig_container_name, orig_object_name,
def swift_copy_object(request, orig_container_name, orig_object_name,
new_container_name, new_object_name):
container = swift_api().get_container(orig_container_name)
container = swift_api(request).get_container(orig_container_name)
if swift_object_exists(new_container_name, new_object_name) == True:
if swift_object_exists(request,
new_container_name,
new_object_name) == True:
raise Exception('Object with name %s already exists in container %s'
% (new_object_name, new_container_name))
@@ -574,17 +590,17 @@ def swift_copy_object(orig_container_name, orig_object_name,
return orig_obj.copy_to(new_container_name, new_object_name)
def swift_upload_object(container_name, object_name, object_data):
container = swift_api().get_container(container_name)
def swift_upload_object(request, container_name, object_name, object_data):
container = swift_api(request).get_container(container_name)
obj = container.create_object(object_name)
obj.write(object_data)
def swift_delete_object(container_name, object_name):
container = swift_api().get_container(container_name)
def swift_delete_object(request, container_name, object_name):
container = swift_api(request).get_container(container_name)
container.delete_object(object_name)
def swift_get_object_data(container_name, object_name):
container = swift_api().get_container(container_name)
def swift_get_object_data(request, container_name, object_name):
container = swift_api(request).get_container(container_name)
return container.get_object(object_name).stream()

View File

@@ -37,4 +37,4 @@ def tenants(request):
def swift(request):
return {'swift_configured': hasattr(settings, "SWIFT_AUTHURL")}
return {'swift_configured': settings.SWIFT_ENABLED}

View File

@@ -42,7 +42,7 @@ class DeleteContainer(forms.SelfHandlingForm):
def handle(self, request, data):
try:
api.swift_delete_container(data['container_name'])
api.swift_delete_container(request, data['container_name'])
except ContainerNotEmpty, e:
messages.error(request,
'Unable to delete non-empty container: %s' % \
@@ -60,7 +60,7 @@ class CreateContainer(forms.SelfHandlingForm):
name = forms.CharField(max_length="255", label="Container Name")
def handle(self, request, data):
api.swift_create_container(data['name'])
api.swift_create_container(request, data['name'])
messages.success(request, "Container was successfully created.")
return shortcuts.redirect("dash_containers", request.user.tenant)
@@ -71,7 +71,7 @@ def index(request, tenant_id):
if handled:
return handled
containers = api.swift_get_containers()
containers = api.swift_get_containers(request)
return shortcuts.render_to_response('dash_containers.html', {
'containers': containers,

View File

@@ -43,14 +43,6 @@ from glance.common import exception as glance_exception
LOG = logging.getLogger('django_openstack.dash.views.images')
from django.core import validators
import re
def validate_even(value):
if value % 2 != 0:
raise ValidationError(u'%s is not an even number' % value)
class LaunchForm(forms.SelfHandlingForm):
name = forms.CharField(max_length=80, label="Server Name")
@@ -145,7 +137,6 @@ 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

@@ -120,10 +120,6 @@ def index(request, tenant_id):
@login_required
def refresh(request, tenant_id):
for f in (TerminateInstance, RebootInstance):
_, handled = f.maybe_handle(request)
if handled:
return handled
instances = []
try:
instances = api.server_list(request)
@@ -135,7 +131,7 @@ def refresh(request, tenant_id):
terminate_form = TerminateInstance()
reboot_form = RebootInstance()
return render_to_response('_instance_list.html', {
return shortcuts.render_to_response('_instance_list.html', {
'instances': instances,
'terminate_form': terminate_form,
'reboot_form': reboot_form,

View File

@@ -44,7 +44,8 @@ class FilterObjects(forms.SelfHandlingForm):
def handle(self, request, data):
object_prefix = data['object_prefix'] or None
objects = api.swift_get_objects(data['container_name'],
objects = api.swift_get_objects(request,
data['container_name'],
prefix=object_prefix)
return objects
@@ -56,6 +57,7 @@ class DeleteObject(forms.SelfHandlingForm):
def handle(self, request, data):
api.swift_delete_object(
request,
data['container_name'],
data['object_name'])
messages.info(request,
@@ -71,6 +73,7 @@ class UploadObject(forms.SelfHandlingForm):
def handle(self, request, data):
api.swift_upload_object(
request,
data['container_name'],
data['name'],
self.files['object_file'].read())
@@ -89,11 +92,11 @@ class CopyObject(forms.SelfHandlingForm):
orig_object_name = forms.CharField(widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
containers = kwargs.pop('containers')
super(CopyObject, self).__init__(*args, **kwargs)
container_choices = \
[(c.name, c.name) for c in api.swift_get_containers()]
self.fields['new_container_name'].choices = container_choices
self.fields['new_container_name'].choices = containers
def handle(self, request, data):
orig_container_name = data['orig_container_name']
@@ -101,8 +104,9 @@ class CopyObject(forms.SelfHandlingForm):
new_container_name = data['new_container_name']
new_object_name = data['new_object_name']
api.swift_copy_object(orig_container_name, orig_object_name,
new_container_name, new_object_name)
api.swift_copy_object(request, orig_container_name,
orig_object_name, new_container_name,
new_object_name)
messages.success(request,
'Object was successfully copied to %s\%s' %
@@ -120,7 +124,7 @@ def index(request, tenant_id, container_name):
filter_form, objects = FilterObjects.maybe_handle(request)
if not objects:
filter_form.fields['container_name'].initial = container_name
objects = api.swift_get_objects(container_name)
objects = api.swift_get_objects(request, container_name)
delete_form.fields['container_name'].initial = container_name
return render_to_response('dash_objects.html', {
@@ -147,7 +151,7 @@ def upload(request, tenant_id, container_name):
@login_required
def download(request, tenant_id, container_name, object_name):
object_data = api.swift_get_object_data(
container_name, object_name)
request, container_name, object_name)
response = http.HttpResponse()
response['Content-Disposition'] = 'attachment; filename=%s' % \
@@ -159,7 +163,11 @@ def download(request, tenant_id, container_name, object_name):
@login_required
def copy(request, tenant_id, container_name, object_name):
form, handled = CopyObject.maybe_handle(request)
containers = \
[(c.name, c.name) for c in api.swift_get_containers(
request)]
form, handled = CopyObject.maybe_handle(request,
containers=containers)
if handled:
return handled

View File

@@ -52,7 +52,6 @@ def get_user_from_request(request):
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

@@ -624,16 +624,6 @@ class AccountApiTests(test.TestCase):
class AdminApiTests(test.TestCase):
#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):
# super(AdminApiTests, self).tearDown()
def stub_admin_api(self, count=1):
self.mox.StubOutWithMock(api, 'admin_api')
admin_api = self.mox.CreateMock(OSAdmin.Admin)
@@ -776,12 +766,11 @@ class AuthApiTests(test.TestCase):
]
tenants_mock.for_token('aToken').AndReturn(tenant_list)
request_mock = self.mox.CreateMock(http.HttpRequest)
request_mock.session = {'token': 'aToken'}
self.request.session = {'token': 'aToken'}
self.mox.ReplayAll()
ret_val = api.token_get_tenant(request_mock, TEST_TENANT_ID)
ret_val = api.token_get_tenant(self.request, TEST_TENANT_ID)
self.assertEqual(tenant_list[1], ret_val)
self.mox.VerifyAll()
@@ -800,12 +789,11 @@ class AuthApiTests(test.TestCase):
]
tenants_mock.for_token('aToken').AndReturn(tenant_list)
request_mock = self.mox.CreateMock(http.HttpRequest)
request_mock.session = {'token': 'aToken'}
self.request.session = {'token': 'aToken'}
self.mox.ReplayAll()
ret_val = api.token_get_tenant(request_mock, TEST_TENANT_ID)
ret_val = api.token_get_tenant(self.request, TEST_TENANT_ID)
self.assertIsNone(ret_val)
self.mox.VerifyAll()
@@ -827,11 +815,9 @@ class AuthApiTests(test.TestCase):
]
tenants_mock.for_token('aToken').AndReturn(tenant_list)
request_mock = self.mox.CreateMock(http.HttpRequest)
self.mox.ReplayAll()
ret_val = api.token_list_tenants(request_mock, 'aToken')
ret_val = api.token_list_tenants(self.request, 'aToken')
for tenant in ret_val:
self.assertIn(tenant, tenant_list)
@@ -850,11 +836,9 @@ class AuthApiTests(test.TestCase):
tokens_mock.create(TEST_TENANT_ID, TEST_USERNAME,
TEST_PASSWORD).AndReturn(test_token)
request_mock = self.mox.CreateMock(http.HttpRequest)
self.mox.ReplayAll()
ret_val = api.token_create(request_mock, TEST_TENANT_ID,
ret_val = api.token_create(self.request, TEST_TENANT_ID,
TEST_USERNAME, TEST_PASSWORD)
self.assertEqual(test_token, ret_val)
@@ -1263,28 +1247,23 @@ class GlanceApiTests(test.TestCase):
class SwiftApiTests(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_swift_api(self, count=1):
self.mox.StubOutWithMock(api, 'swift_api')
swift_api = self.mox.CreateMock(cloudfiles.connection.Connection)
for i in range(count):
api.swift_api().AndReturn(swift_api)
api.swift_api(IsA(http.HttpRequest)).AndReturn(swift_api)
return swift_api
def test_get_swift_api(self):
self.mox.StubOutWithMock(cloudfiles, 'get_connection')
swiftuser = ':'.join((settings.SWIFT_ACCOUNT, settings.SWIFT_USER))
cloudfiles.get_connection(swiftuser,
settings.SWIFT_PASS,
authurl=settings.SWIFT_AUTHURL
).AndReturn(TEST_RETURN)
self.mox.ReplayAll()
self.assertEqual(api.swift_api(), TEST_RETURN)
self.mox.VerifyAll()
def test_swift_get_containers(self):
containers = (TEST_RETURN, TEST_RETURN + '2')
@@ -1294,7 +1273,7 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_get_containers()
ret_val = api.swift_get_containers(self.request)
self.assertEqual(len(ret_val), len(containers))
for container in ret_val:
@@ -1309,12 +1288,13 @@ class SwiftApiTests(test.TestCase):
swift_api = self.stub_swift_api()
self.mox.StubOutWithMock(api, 'swift_container_exists')
api.swift_container_exists(NAME).AndReturn(False)
api.swift_container_exists(self.request,
NAME).AndReturn(False)
swift_api.create_container(NAME).AndReturn(TEST_RETURN)
self.mox.ReplayAll()
ret_val = api.swift_create_container(NAME)
ret_val = api.swift_create_container(self.request, NAME)
self.assertIsInstance(ret_val, api.Container)
self.assertEqual(ret_val._apiresource, TEST_RETURN)
@@ -1330,7 +1310,7 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_delete_container(NAME)
ret_val = api.swift_delete_container(self.request, NAME)
self.assertIsNone(ret_val)
@@ -1349,7 +1329,7 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_get_objects(NAME)
ret_val = api.swift_get_objects(self.request, NAME)
self.assertEqual(len(ret_val), len(swift_objects))
for swift_object in ret_val:
@@ -1372,7 +1352,9 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_get_objects(NAME, prefix=PREFIX)
ret_val = api.swift_get_objects(self.request,
NAME,
prefix=PREFIX)
self.assertEqual(len(ret_val), len(swift_objects))
for swift_object in ret_val:
@@ -1396,7 +1378,9 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_upload_object(CONTAINER_NAME, OBJECT_NAME,
ret_val = api.swift_upload_object(self.request,
CONTAINER_NAME,
OBJECT_NAME,
OBJECT_DATA)
self.assertIsNone(ret_val)
@@ -1415,7 +1399,9 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_delete_object(CONTAINER_NAME, OBJECT_NAME)
ret_val = api.swift_delete_object(self.request,
CONTAINER_NAME,
OBJECT_NAME)
self.assertIsNone(ret_val)
@@ -1436,7 +1422,9 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_get_object_data(CONTAINER_NAME, OBJECT_NAME)
ret_val = api.swift_get_object_data(self.request,
CONTAINER_NAME,
OBJECT_NAME)
self.assertEqual(ret_val, OBJECT_DATA)
@@ -1455,7 +1443,9 @@ class SwiftApiTests(test.TestCase):
self.mox.ReplayAll()
ret_val = api.swift_object_exists(CONTAINER_NAME, OBJECT_NAME)
ret_val = api.swift_object_exists(self.request,
CONTAINER_NAME,
OBJECT_NAME)
self.assertTrue(ret_val)
self.mox.VerifyAll()
@@ -1471,15 +1461,18 @@ class SwiftApiTests(test.TestCase):
swift_object = self.mox.CreateMock(cloudfiles.Object)
swift_api.get_container(CONTAINER_NAME).AndReturn(container)
api.swift_object_exists(CONTAINER_NAME, OBJECT_NAME).AndReturn(False)
api.swift_object_exists(self.request,
CONTAINER_NAME,
OBJECT_NAME).AndReturn(False)
container.get_object(OBJECT_NAME).AndReturn(swift_object)
swift_object.copy_to(CONTAINER_NAME, OBJECT_NAME)
self.mox.ReplayAll()
ret_val = api.swift_copy_object(CONTAINER_NAME, OBJECT_NAME,
CONTAINER_NAME, OBJECT_NAME)
ret_val = api.swift_copy_object(self.request, CONTAINER_NAME,
OBJECT_NAME, CONTAINER_NAME,
OBJECT_NAME)
self.assertIsNone(ret_val)
self.mox.VerifyAll()

View File

@@ -28,6 +28,7 @@ from django_openstack import urls as django_openstack_urls
urlpatterns = patterns('',
url(r'^$', 'django_openstack.tests.views.fakeView', name='splash'),
url(r'^dash/$', 'django_openstack.dash.views.instances.usage', name='dash_overview'),
url(r'^syspanel/$', 'django_openstack.syspanel.views.instances.usage', name='syspanel_overview')
)

View File

@@ -0,0 +1,148 @@
from django import http
from django.core.urlresolvers import reverse
from django.utils import unittest
from django_openstack import api
from django_openstack.tests.view_tests import base
from openstackx.api import exceptions as api_exceptions
from mox import IsA
class AuthViewTests(base.BaseViewTests):
def setUp(self):
super(AuthViewTests, self).setUp()
self.setActiveUser(None, None, None, None, None)
self.PASSWORD = 'secret'
def test_login_index(self):
res = self.client.get(reverse('auth_login'))
self.assertTemplateUsed(res, 'splash.html')
def test_login_user_logged_in(self):
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
False, self.TEST_SERVICE_CATALOG)
res = self.client.get(reverse('auth_login'))
self.assertRedirectsNoFollow(res, reverse('dash_overview'))
def test_login_admin_logged_in(self):
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
True, self.TEST_SERVICE_CATALOG)
res = self.client.get(reverse('auth_login'))
self.assertRedirectsNoFollow(res, reverse('syspanel_overview'))
def test_login(self):
TOKEN_ID = 1
form_data = {'method': 'Login',
'password': self.PASSWORD,
'username': self.TEST_USER}
self.mox.StubOutWithMock(api, 'token_create')
aToken = self.mox.CreateMock(api.Token)
aToken.id = TOKEN_ID
aToken.serviceCatalog = {}
api.token_create(IsA(http.HttpRequest), "", self.TEST_USER,
self.PASSWORD).AndReturn(aToken)
self.mox.StubOutWithMock(api, 'token_info')
tokenInfo = {'user': self.TEST_USER,
'tenant': self.TEST_TENANT,
'admin': False}
api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)
self.mox.ReplayAll()
res = self.client.post(reverse('auth_login'), form_data)
self.assertRedirectsNoFollow(res, reverse('dash_overview'))
self.mox.VerifyAll()
def test_login_invalid_credentials(self):
form_data = {'method': 'Login',
'password': self.PASSWORD,
'username': self.TEST_USER}
self.mox.StubOutWithMock(api, 'token_create')
unauthorized = api_exceptions.Unauthorized('unauth', message='unauth')
api.token_create(IsA(http.HttpRequest), "", self.TEST_USER,
self.PASSWORD).AndRaise(unauthorized)
self.mox.ReplayAll()
res = self.client.post(reverse('auth_login'), form_data)
self.assertTemplateUsed(res, 'splash.html')
self.mox.VerifyAll()
def test_login_exception(self):
form_data = {'method': 'Login',
'password': self.PASSWORD,
'username': self.TEST_USER}
self.mox.StubOutWithMock(api, 'token_create')
api_exception = api_exceptions.ApiException('apiException',
message='apiException')
api.token_create(IsA(http.HttpRequest), "", self.TEST_USER,
self.PASSWORD).AndRaise(api_exception)
self.mox.ReplayAll()
res = self.client.post(reverse('auth_login'), form_data)
self.assertTemplateUsed(res, 'splash.html')
self.mox.VerifyAll()
def test_switch_tenants_index(self):
res = self.client.get(reverse('auth_switch', args=[self.TEST_TENANT]))
self.assertTemplateUsed(res, 'switch_tenants.html')
def test_switch_tenants(self):
NEW_TENANT = 'newTenant'
TOKEN_ID = 1
self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT,
False, self.TEST_SERVICE_CATALOG)
form_data = {'method': 'LoginWithTenant',
'password': self.PASSWORD,
'tenant': NEW_TENANT,
'username': self.TEST_USER}
self.mox.StubOutWithMock(api, 'token_create')
aToken = self.mox.CreateMock(api.Token)
aToken.id = TOKEN_ID
aToken.serviceCatalog = {}
api.token_create(IsA(http.HttpRequest), NEW_TENANT, self.TEST_USER,
self.PASSWORD).AndReturn(aToken)
self.mox.StubOutWithMock(api, 'token_info')
tokenInfo = {'user': self.TEST_USER,
'tenant': NEW_TENANT,
'admin': False}
api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo)
self.mox.ReplayAll()
res = self.client.post(reverse('auth_switch', args=[NEW_TENANT]),
form_data)
self.assertRedirectsNoFollow(res, reverse('dash_overview'))
self.assertEqual(self.client.session['tenant'], NEW_TENANT)
self.mox.VerifyAll()
def test_logout(self):
KEY = 'arbitraryKeyString'
VALUE = 'arbitraryKeyValue'
self.assertNotIn(KEY, self.client.session)
self.client.session[KEY] = VALUE
res = self.client.get(reverse('auth_logout'))
self.assertRedirectsNoFollow(res, reverse('splash'))
self.assertNotIn(KEY, self.client.session)

View File

@@ -1,4 +1,5 @@
from cloudfiles.errors import ContainerNotEmpty
from django import http
from django.contrib import messages
from django.core.urlresolvers import reverse
from django_openstack import api
@@ -15,7 +16,8 @@ class ContainerViewTests(base.BaseViewTests):
def test_index(self):
self.mox.StubOutWithMock(api, 'swift_get_containers')
api.swift_get_containers().AndReturn([self.container])
api.swift_get_containers(
IsA(http.HttpRequest)).AndReturn([self.container])
self.mox.ReplayAll()
@@ -35,7 +37,8 @@ class ContainerViewTests(base.BaseViewTests):
'method': 'DeleteContainer'}
self.mox.StubOutWithMock(api, 'swift_delete_container')
api.swift_delete_container('containerName')
api.swift_delete_container(IsA(http.HttpRequest),
'containerName')
self.mox.ReplayAll()
@@ -54,7 +57,9 @@ class ContainerViewTests(base.BaseViewTests):
exception = ContainerNotEmpty('containerNotEmpty')
self.mox.StubOutWithMock(api, 'swift_delete_container')
api.swift_delete_container('containerName').AndRaise(exception)
api.swift_delete_container(
IsA(http.HttpRequest),
'containerName').AndRaise(exception)
self.mox.StubOutWithMock(messages, 'error')
@@ -81,7 +86,8 @@ class ContainerViewTests(base.BaseViewTests):
'method': 'CreateContainer'}
self.mox.StubOutWithMock(api, 'swift_create_container')
api.swift_create_container('CreateContainer')
api.swift_create_container(
IsA(http.HttpRequest), 'CreateContainer')
self.mox.StubOutWithMock(messages, 'success')
messages.success(IgnoreArg(), IsA(str))

View File

@@ -1,9 +1,10 @@
import tempfile
from django import http
from django.core.urlresolvers import reverse
from django_openstack import api
from django_openstack.tests.view_tests import base
from mox import IsA
class ObjectViewTests(base.BaseViewTests):
CONTAINER_NAME = 'containerName'
@@ -16,6 +17,7 @@ class ObjectViewTests(base.BaseViewTests):
def test_index(self):
self.mox.StubOutWithMock(api, 'swift_get_objects')
api.swift_get_objects(
IsA(http.HttpRequest),
self.CONTAINER_NAME).AndReturn(self.swift_objects)
self.mox.ReplayAll()
@@ -49,7 +51,8 @@ class ObjectViewTests(base.BaseViewTests):
'object_file': OBJECT_FILE}
self.mox.StubOutWithMock(api, 'swift_upload_object')
api.swift_upload_object(unicode(self.CONTAINER_NAME),
api.swift_upload_object(IsA(http.HttpRequest),
unicode(self.CONTAINER_NAME),
unicode(OBJECT_NAME),
OBJECT_DATA)
@@ -73,7 +76,9 @@ class ObjectViewTests(base.BaseViewTests):
'object_name': OBJECT_NAME}
self.mox.StubOutWithMock(api, 'swift_delete_object')
api.swift_delete_object(self.CONTAINER_NAME, OBJECT_NAME)
api.swift_delete_object(
IsA(http.HttpRequest),
self.CONTAINER_NAME, OBJECT_NAME)
self.mox.ReplayAll()
@@ -93,7 +98,8 @@ class ObjectViewTests(base.BaseViewTests):
OBJECT_NAME = 'objectName'
self.mox.StubOutWithMock(api, 'swift_get_object_data')
api.swift_get_object_data(unicode(self.CONTAINER_NAME),
api.swift_get_object_data(IsA(http.HttpRequest),
unicode(self.CONTAINER_NAME),
unicode(OBJECT_NAME)).AndReturn(OBJECT_DATA)
self.mox.ReplayAll()
@@ -115,7 +121,8 @@ class ObjectViewTests(base.BaseViewTests):
container.name = self.CONTAINER_NAME
self.mox.StubOutWithMock(api, 'swift_get_containers')
api.swift_get_containers().AndReturn([container])
api.swift_get_containers(
IsA(http.HttpRequest)).AndReturn([container])
self.mox.ReplayAll()
@@ -144,11 +151,15 @@ class ObjectViewTests(base.BaseViewTests):
container.name = self.CONTAINER_NAME
self.mox.StubOutWithMock(api, 'swift_get_containers')
api.swift_get_containers().AndReturn([container])
api.swift_get_containers(
IsA(http.HttpRequest)).AndReturn([container])
self.mox.StubOutWithMock(api, 'swift_copy_object')
api.swift_copy_object(ORIG_CONTAINER_NAME, ORIG_OBJECT_NAME,
NEW_CONTAINER_NAME, NEW_OBJECT_NAME)
api.swift_copy_object(IsA(http.HttpRequest),
ORIG_CONTAINER_NAME,
ORIG_OBJECT_NAME,
NEW_CONTAINER_NAME,
NEW_OBJECT_NAME)
self.mox.ReplayAll()
@@ -174,7 +185,8 @@ class ObjectViewTests(base.BaseViewTests):
}
self.mox.StubOutWithMock(api, 'swift_get_objects')
api.swift_get_objects(unicode(self.CONTAINER_NAME),
api.swift_get_objects(IsA(http.HttpRequest),
unicode(self.CONTAINER_NAME),
prefix=unicode(PREFIX)
).AndReturn(self.swift_objects)

View File

@@ -0,0 +1,11 @@
from django import http
def fakeView(request):
resp = http.HttpResponse()
resp.write('<html><body><p>'
'This is a fake httpresponse from a fake view for testing '
' purposes only'
'</p></body></html>')
return resp