Cleans up test code a bit.

Remove unused imports, unused variables, and some unneeded helper
classes.  Move view-specific testing code into the view test base class.
This commit is contained in:
Mark Gius 2011-07-22 14:52:18 -07:00
parent c1fc700285
commit b5ed7916d3
7 changed files with 103 additions and 75 deletions

View File

@ -1,60 +1,53 @@
# 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'
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'}]}
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
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,
@ -64,14 +57,10 @@ class TestCase(test.TestCase):
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, service_catalog):
def setActiveUser(self, token, username,
tenant, is_admin, service_catalog):
keystone.get_user_from_request = \
lambda x: keystone.User(token, username, tenant, is_admin, service_catalog)
lambda x: keystone.User(token, username, tenant,
is_admin, service_catalog)

View File

@ -1,6 +1,5 @@
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

View File

@ -21,14 +21,57 @@
"""
Base classes for view based unit tests.
"""
from django import http
from django import shortcuts
from django import test as django_test
from django import template as django_template
from django.conf import settings
from django_openstack import test
class Object(object):
"""Inner Object for api resource wrappers"""
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
django_test.signals.template_rendered.send(template, template=template,
context=context_instance)
return resp
class BaseViewTests(test.TestCase):
pass
def setUp(self):
super(BaseViewTests, self).setUp()
self._real_render_to_response = shortcuts.render_to_response
shortcuts.render_to_response = fake_render_to_response
def tearDown(self):
super(BaseViewTests, self).tearDown()
shortcuts.render_to_response = self._real_render_to_response
def assertRedirectsNoFollow(self, response, expected_url):
self.assertEqual(response._headers['location'],
('Location', settings.TESTSERVER + expected_url))
self.assertEqual(response.status_code, 302)

View File

@ -10,9 +10,8 @@ from mox import IgnoreArg, IsA
class ContainerViewTests(base.BaseViewTests):
def setUp(self):
super(ContainerViewTests, self).setUp()
container_inner = base.Object()
container_inner.name = 'containerName'
self.container = api.Container(container_inner)
self.container = self.mox.CreateMock(api.Container)
self.container.name = 'containerName'
def test_index(self):
self.mox.StubOutWithMock(api, 'swift_get_containers')

View File

@ -1,6 +1,4 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
import logging
from django import http
from django.contrib import messages
from django.core.urlresolvers import reverse
@ -28,17 +26,17 @@ class ImageViewTests(base.BaseViewTests):
self.images = (self.visibleImage, self.invisibleImage)
flavor_inner = base.Object()
flavor_inner.id = 1
flavor_inner.name = 'm1.massive'
flavor_inner.vcpus = 1000
flavor_inner.disk = 1024
flavor_inner.ram = 10000
self.flavors = (api.Flavor(flavor_inner),)
flavor = self.mox.CreateMock(api.Flavor)
flavor.id = 1
flavor.name = 'm1.massive'
flavor.vcpus = 1000
flavor.disk = 1024
flavor.ram = 10000
self.flavors = (flavor,)
keypair_inner = base.Object()
keypair_inner.key_name = 'keyName'
self.keypairs = (api.KeyPair(keypair_inner),)
keypair = self.mox.CreateMock(api.KeyPair)
keypair.key_name = 'keyName'
self.keypairs = (keypair,)
def test_index(self):
self.mox.StubOutWithMock(api, 'token_get_tenant')

View File

@ -14,10 +14,10 @@ from mox import IsA, IgnoreArg
class InstanceViewTests(base.BaseViewTests):
def setUp(self):
super(InstanceViewTests, self).setUp()
server_inner = base.Object()
server_inner.id = 1
server_inner.name = 'serverName'
self.servers = (api.Server(server_inner, None),)
server = self.mox.CreateMock(api.Server)
server.id = 1
server.name = 'serverName'
self.servers = (server,)
def test_index(self):
self.mox.StubOutWithMock(api, 'server_list')

View File

@ -10,9 +10,9 @@ import openstackx.api.exceptions as api_exceptions
class KeyPairViewTests(base.BaseViewTests):
def setUp(self):
super(KeyPairViewTests, self).setUp()
keypair_inner = base.Object()
keypair_inner.key_name = 'keyName'
self.keypairs = (api.KeyPair(keypair_inner),)
keypair = self.mox.CreateMock(api.KeyPair)
keypair.key_name = 'keyName'
self.keypairs = (keypair,)
def test_index(self):
self.mox.StubOutWithMock(api, 'keypair_list')