From ed1e6d792c5b37576640acd3e174c8a733c96b61 Mon Sep 17 00:00:00 2001 From: "Kevin L. Mitchell" Date: Thu, 19 Jan 2012 16:20:04 -0600 Subject: Remove deprecated extension code. The recent extensions refactoring (blueprint extension-refactor) deprecated ActionExtension and RequestExtension, replacing them with ControllerExtension. This patch completes the deprecation by removing those classes and all related support infrastructure, including ExtensionMiddleware and LazySerializationMiddleware. (The classes remain, as deprecated do-nothing stubs, for compatibility with existing api-paste.ini files.) Change-Id: I8272ac3cf432813d749db67b2e1ad1a72abbb784 --- .../compute/contrib/test_admin_actions.py | 4 +- .../openstack/compute/contrib/test_disk_config.py | 5 +- .../compute/contrib/test_floating_ip_pools.py | 4 +- .../compute/contrib/test_server_action_list.py | 4 +- .../compute/contrib/test_server_diagnostics.py | 4 +- .../api/openstack/compute/extensions/foxinsocks.py | 91 ++++---- .../tests/api/openstack/compute/test_extensions.py | 94 +++----- nova/tests/api/openstack/compute/test_limits.py | 3 +- nova/tests/api/openstack/fakes.py | 19 +- nova/tests/api/openstack/test_common.py | 37 ++-- nova/tests/api/openstack/test_wsgi.py | 243 --------------------- nova/tests/api/openstack/test_xmlutil.py | 72 ------ nova/tests/api/openstack/volume/test_snapshots.py | 8 +- nova/tests/api/openstack/volume/test_types.py | 12 +- nova/tests/api/openstack/volume/test_volumes.py | 47 +--- nova/tests/integrated/test_extensions.py | 2 - 16 files changed, 120 insertions(+), 529 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py index 0ffb4fdd1..3878ce676 100644 --- a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py +++ b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py @@ -123,9 +123,7 @@ class CreateBackupTests(test.TestCase): self.backup_stubs = fakes.stub_out_compute_api_backup(self.stubs) self.flags(allow_admin_api=True) - router = compute_api.APIRouter() - ext_middleware = extensions.ExtensionMiddleware(router) - self.app = wsgi.LazySerializationMiddleware(ext_middleware) + self.app = compute_api.APIRouter() self.uuid = utils.gen_uuid() diff --git a/nova/tests/api/openstack/compute/contrib/test_disk_config.py b/nova/tests/api/openstack/compute/contrib/test_disk_config.py index b897c5e71..87b21beb1 100644 --- a/nova/tests/api/openstack/compute/contrib/test_disk_config.py +++ b/nova/tests/api/openstack/compute/contrib/test_disk_config.py @@ -120,10 +120,7 @@ class DiskConfigTestCase(test.TestCase): self.stubs.Set(nova.db, 'instance_create', fake_instance_create) - app = compute.APIRouter() - app = extensions.ExtensionMiddleware(app) - app = wsgi.LazySerializationMiddleware(app) - self.app = app + self.app = compute.APIRouter() def assertDiskConfig(self, dict_, value): self.assert_(API_DISK_CONFIG in dict_) diff --git a/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py b/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py index ffe84a1ba..1f0f0a424 100644 --- a/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py +++ b/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py @@ -56,12 +56,12 @@ class FloatingIpPoolTest(test.TestCase): class FloatingIpPoolSerializerTest(test.TestCase): def test_index_serializer(self): - serializer = floating_ip_pools.FloatingIPPoolsSerializer() + serializer = floating_ip_pools.FloatingIPPoolsTemplate() text = serializer.serialize(dict( floating_ip_pools=[ dict(name='nova'), dict(name='other') - ]), 'index') + ])) tree = etree.fromstring(text) diff --git a/nova/tests/api/openstack/compute/contrib/test_server_action_list.py b/nova/tests/api/openstack/compute/contrib/test_server_action_list.py index aa5a7275c..ffd4f744d 100644 --- a/nova/tests/api/openstack/compute/contrib/test_server_action_list.py +++ b/nova/tests/api/openstack/compute/contrib/test_server_action_list.py @@ -54,13 +54,11 @@ class ServerActionsTest(test.TestCase): self.compute_api = nova.compute.API() self.router = compute.APIRouter() - ext_middleware = extensions.ExtensionMiddleware(self.router) - self.app = wsgi.LazySerializationMiddleware(ext_middleware) def test_get_actions(self): uuid = nova.utils.gen_uuid() req = fakes.HTTPRequest.blank('/fake/servers/%s/actions' % uuid) - res = req.get_response(self.app) + res = req.get_response(self.router) output = json.loads(res.body) expected = {'actions': [ {'action': 'rebuild', 'error': None, 'created_at': str(dt)}, diff --git a/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py b/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py index 69aabdc26..688940e3d 100644 --- a/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py +++ b/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py @@ -48,13 +48,11 @@ class ServerDiagnosticsTest(test.TestCase): self.compute_api = nova.compute.API() self.router = compute.APIRouter() - ext_middleware = extensions.ExtensionMiddleware(self.router) - self.app = wsgi.LazySerializationMiddleware(ext_middleware) def test_get_diagnostics(self): uuid = nova.utils.gen_uuid() req = fakes.HTTPRequest.blank('/fake/servers/%s/diagnostics' % uuid) - res = req.get_response(self.app) + res = req.get_response(self.router) output = json.loads(res.body) self.assertEqual(output, {'data': 'Some diagnostic info'}) diff --git a/nova/tests/api/openstack/compute/extensions/foxinsocks.py b/nova/tests/api/openstack/compute/extensions/foxinsocks.py index 302fe7ddf..cf901472c 100644 --- a/nova/tests/api/openstack/compute/extensions/foxinsocks.py +++ b/nova/tests/api/openstack/compute/extensions/foxinsocks.py @@ -18,6 +18,7 @@ import webob.exc from nova.api.openstack import extensions +from nova.api.openstack import wsgi class FoxInSocksController(object): @@ -26,6 +27,39 @@ class FoxInSocksController(object): return "Try to say this Mr. Knox, sir..." +class FoxInSocksServerControllerExtension(wsgi.Controller): + @wsgi.action('add_tweedle') + def _add_tweedle(self, req, id, body): + + return "Tweedle Beetle Added." + + @wsgi.action('delete_tweedle') + def _delete_tweedle(self, req, id, body): + + return "Tweedle Beetle Deleted." + + @wsgi.action('fail') + def _fail(self, req, id, body): + + raise webob.exc.HTTPBadRequest(explanation='Tweedle fail') + + +class FoxInSocksFlavorGooseControllerExtension(wsgi.Controller): + @wsgi.extends + def show(self, req, resp_obj, id): + #NOTE: This only handles JSON responses. + # You can use content type header to test for XML. + resp_obj.obj['flavor']['googoose'] = req.GET.get('chewing') + + +class FoxInSocksFlavorBandsControllerExtension(wsgi.Controller): + @wsgi.extends + def show(self, req, resp_obj, id): + #NOTE: This only handles JSON responses. + # You can use content type header to test for XML. + resp_obj.obj['big_bands'] = 'Pig Bands!' + + class Foxinsocks(extensions.ExtensionDescriptor): """The Fox In Socks Extension""" @@ -44,50 +78,17 @@ class Foxinsocks(extensions.ExtensionDescriptor): resources.append(resource) return resources - def get_actions(self): - actions = [] - actions.append(extensions.ActionExtension('servers', 'add_tweedle', - self._add_tweedle)) - actions.append(extensions.ActionExtension('servers', 'delete_tweedle', - self._delete_tweedle)) - actions.append(extensions.ActionExtension('servers', 'fail', - self._fail)) - return actions - - def get_request_extensions(self): - request_exts = [] - - def _goose_handler(req, res, body): - #NOTE: This only handles JSON responses. - # You can use content type header to test for XML. - body['flavor']['googoose'] = req.GET.get('chewing') - return res - - req_ext1 = extensions.RequestExtension('GET', - '/v2/:(project_id)/flavors/:(id)', - _goose_handler) - request_exts.append(req_ext1) - - def _bands_handler(req, res, body): - #NOTE: This only handles JSON responses. - # You can use content type header to test for XML. - body['big_bands'] = 'Pig Bands!' - return res - - req_ext2 = extensions.RequestExtension('GET', - '/v2/:(project_id)/flavors/:(id)', - _bands_handler) - request_exts.append(req_ext2) - return request_exts - - def _add_tweedle(self, input_dict, req, id): - - return "Tweedle Beetle Added." - - def _delete_tweedle(self, input_dict, req, id): + def get_controller_extensions(self): + extension_list = [] - return "Tweedle Beetle Deleted." + extension_set = [ + (FoxInSocksServerControllerExtension, 'servers'), + (FoxInSocksFlavorGooseControllerExtension, 'flavors'), + (FoxInSocksFlavorBandsControllerExtension, 'flavors'), + ] + for klass, collection in extension_set: + controller = klass() + ext = extensions.ControllerExtension(self, collection, controller) + extension_list.append(ext) - def _fail(self, input_dict, req, id): - - raise webob.exc.HTTPBadRequest(explanation='Tweedle fail') + return extension_list diff --git a/nova/tests/api/openstack/compute/test_extensions.py b/nova/tests/api/openstack/compute/test_extensions.py index 02356bc44..61cfea04f 100644 --- a/nova/tests/api/openstack/compute/test_extensions.py +++ b/nova/tests/api/openstack/compute/test_extensions.py @@ -144,7 +144,6 @@ class ExtensionTestCase(test.TestCase): if fox not in ext_list: ext_list.append(fox) self.flags(osapi_compute_extension=ext_list) - compute_extensions.ExtensionManager.reset() class ExtensionControllerTest(ExtensionTestCase): @@ -189,10 +188,8 @@ class ExtensionControllerTest(ExtensionTestCase): def test_list_extensions_json(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/extensions") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) # Make sure we have all the extensions. @@ -218,10 +215,8 @@ class ExtensionControllerTest(ExtensionTestCase): def test_get_extension_json(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/extensions/FOXNSOX") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) data = json.loads(response.body) @@ -235,18 +230,15 @@ class ExtensionControllerTest(ExtensionTestCase): def test_get_non_existing_extension_json(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) request = webob.Request.blank("/fake/extensions/4") - response = request.get_response(ext_midware) + response = request.get_response(app) self.assertEqual(404, response.status_int) def test_list_extensions_xml(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/extensions") request.accept = "application/xml" - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) print response.body @@ -270,11 +262,9 @@ class ExtensionControllerTest(ExtensionTestCase): def test_get_extension_xml(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/extensions/FOXNSOX") request.accept = "application/xml" - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) xml = response.body print xml @@ -297,10 +287,8 @@ class ResourceExtensionTest(ExtensionTestCase): def test_no_extension_present(self): manager = StubExtensionManager(None) app = compute.APIRouter(manager) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/blah") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(404, response.status_int) def test_get_resources(self): @@ -308,10 +296,8 @@ class ResourceExtensionTest(ExtensionTestCase): StubController(response_body)) manager = StubExtensionManager(res_ext) app = compute.APIRouter(manager) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/tweedles") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) self.assertEqual(response_body, response.body) @@ -320,10 +306,8 @@ class ResourceExtensionTest(ExtensionTestCase): StubController(response_body)) manager = StubExtensionManager(res_ext) app = compute.APIRouter(manager) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/tweedles") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) self.assertEqual(response_body, response.body) @@ -332,11 +316,9 @@ class ResourceExtensionTest(ExtensionTestCase): StubController(response_body)) manager = StubExtensionManager(res_ext) app = compute.APIRouter(manager) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/tweedles") request.method = "POST" - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) body = json.loads(response.body) @@ -353,10 +335,8 @@ class ResourceExtensionTest(ExtensionTestCase): StubController(response_body)) manager = StubExtensionManager(res_ext) app = compute.APIRouter(manager) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/tweedles/1") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(404, response.status_int) self.assertEqual('application/json', response.content_type) body = json.loads(response.body) @@ -393,10 +373,8 @@ class ExtensionManagerTest(ExtensionTestCase): def test_get_resources(self): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank("/fake/foxnsocks") - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) self.assertEqual(response_body, response.body) @@ -404,8 +382,7 @@ class ExtensionManagerTest(ExtensionTestCase): # Don't need the serialization middleware here because we're # not testing any serialization app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ext_mgr = ext_midware.ext_mgr + ext_mgr = compute_extensions.ExtensionManager() ext_mgr.register(InvalidExtension()) self.assertTrue('FOXNSOX' in ext_mgr.extensions) self.assertTrue('THIRD' not in ext_mgr.extensions) @@ -413,8 +390,7 @@ class ExtensionManagerTest(ExtensionTestCase): def test_admin_extensions(self): self.flags(allow_admin_api=True) app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ext_mgr = ext_midware.ext_mgr + ext_mgr = compute_extensions.ExtensionManager() ext_mgr.register(AdminExtension()) self.assertTrue('FOXNSOX' in ext_mgr.extensions) self.assertTrue('ADMIN' in ext_mgr.extensions) @@ -422,8 +398,7 @@ class ExtensionManagerTest(ExtensionTestCase): def test_admin_extensions_no_admin_api(self): self.flags(allow_admin_api=False) app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ext_mgr = ext_midware.ext_mgr + ext_mgr = compute_extensions.ExtensionManager() ext_mgr.register(AdminExtension()) self.assertTrue('FOXNSOX' in ext_mgr.extensions) self.assertTrue('ADMIN' not in ext_mgr.extensions) @@ -433,13 +408,11 @@ class ActionExtensionTest(ExtensionTestCase): def _send_server_action_request(self, url, body): app = compute.APIRouter() - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) request = webob.Request.blank(url) request.method = 'POST' request.content_type = 'application/json' request.body = json.dumps(body) - response = request.get_response(ser_midware) + response = request.get_response(app) return response def test_extended_action(self): @@ -494,35 +467,30 @@ class ActionExtensionTest(ExtensionTestCase): class RequestExtensionTest(ExtensionTestCase): def test_get_resources_with_stub_mgr(self): + class GooGoose(wsgi.Controller): + @wsgi.extends + def show(self, req, resp_obj, id): + # only handle JSON responses + resp_obj.obj['flavor']['googoose'] = req.GET.get('chewing') - def _req_handler(req, res, body): - # only handle JSON responses - body['flavor']['googoose'] = req.GET.get('chewing') - return res + req_ext = base_extensions.ControllerExtension( + StubControllerExtension(), 'flavors', GooGoose()) - req_ext = base_extensions.RequestExtension('GET', - '/v2/fake/flavors/:(id)', - _req_handler) - - manager = StubExtensionManager(None, None, req_ext) - app = fakes.wsgi_app(serialization=base_wsgi.Middleware) - ext_midware = compute_extensions.ExtensionMiddleware(app, manager) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) + manager = StubExtensionManager(None, None, None, req_ext) + app = fakes.wsgi_app(ext_mgr=manager) request = webob.Request.blank("/v2/fake/flavors/1?chewing=bluegoo") request.environ['api.version'] = '2' - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) response_data = json.loads(response.body) self.assertEqual('bluegoo', response_data['flavor']['googoose']) def test_get_resources_with_mgr(self): - app = fakes.wsgi_app(serialization=base_wsgi.Middleware) - ext_midware = compute_extensions.ExtensionMiddleware(app) - ser_midware = wsgi.LazySerializationMiddleware(ext_midware) + app = fakes.wsgi_app() request = webob.Request.blank("/v2/fake/flavors/1?chewing=newblue") request.environ['api.version'] = '2' - response = request.get_response(ser_midware) + response = request.get_response(app) self.assertEqual(200, response.status_int) response_data = json.loads(response.body) print response_data @@ -611,7 +579,7 @@ class ControllerExtensionTest(ExtensionTestCase): class ExtensionsXMLSerializerTest(test.TestCase): def test_serialize_extension(self): - serializer = base_extensions.ExtensionsXMLSerializer() + serializer = base_extensions.ExtensionTemplate() data = {'extension': { 'name': 'ext1', 'namespace': 'http://docs.rack.com/servers/api/ext/pie/v1.0', @@ -625,7 +593,7 @@ class ExtensionsXMLSerializerTest(test.TestCase): 'type': 'application/vnd.sun.wadl+xml', 'href': 'http://docs.rack.com/servers/api/ext/cs.wadl'}]}} - xml = serializer.serialize(data, 'show') + xml = serializer.serialize(data) print xml root = etree.XML(xml) ext_dict = data['extension'] @@ -644,7 +612,7 @@ class ExtensionsXMLSerializerTest(test.TestCase): xmlutil.validate_schema(root, 'extension') def test_serialize_extensions(self): - serializer = base_extensions.ExtensionsXMLSerializer() + serializer = base_extensions.ExtensionsTemplate() data = {"extensions": [{ "name": "Public Image Extension", "namespace": "http://foo.com/api/ext/pie/v1.0", @@ -670,7 +638,7 @@ class ExtensionsXMLSerializerTest(test.TestCase): "type": "application/vnd.sun.wadl+xml", "href": "http://foo.com/api/ext/cs-cbs.wadl"}]}]} - xml = serializer.serialize(data, 'index') + xml = serializer.serialize(data) print xml root = etree.XML(xml) ext_elems = root.findall('{0}extension'.format(NS)) diff --git a/nova/tests/api/openstack/compute/test_limits.py b/nova/tests/api/openstack/compute/test_limits.py index 20ec0d1a0..e6b5b58ae 100644 --- a/nova/tests/api/openstack/compute/test_limits.py +++ b/nova/tests/api/openstack/compute/test_limits.py @@ -81,8 +81,7 @@ class LimitsControllerTest(BaseLimitTestSuite): def setUp(self): """Run before each test.""" BaseLimitTestSuite.setUp(self) - self.controller = wsgi.LazySerializationMiddleware( - limits.create_resource()) + self.controller = limits.create_resource() self.maxDiff = None def _get_index_request(self, accept_header="application/json"): diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index d3289623e..103f3678c 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -50,7 +50,7 @@ class Context(object): class FakeRouter(wsgi.Router): - def __init__(self): + def __init__(self, ext_mgr=None): pass @webob.dec.wsgify @@ -74,10 +74,9 @@ def fake_wsgi(self, req): def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None, - serialization=os_wsgi.LazySerializationMiddleware, - use_no_auth=False): + use_no_auth=False, ext_mgr=None): if not inner_app_v2: - inner_app_v2 = compute.APIRouter() + inner_app_v2 = compute.APIRouter(ext_mgr) if fake_auth: if fake_auth_context is not None: @@ -85,19 +84,13 @@ def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None, else: ctxt = context.RequestContext('fake', 'fake', auth_token=True) api_v2 = openstack_api.FaultWrapper(api_auth.InjectContext(ctxt, - limits.RateLimitingMiddleware( - serialization( - extensions.ExtensionMiddleware(inner_app_v2))))) + limits.RateLimitingMiddleware(inner_app_v2))) elif use_no_auth: api_v2 = openstack_api.FaultWrapper(auth.NoAuthMiddleware( - limits.RateLimitingMiddleware( - serialization( - extensions.ExtensionMiddleware(inner_app_v2))))) + limits.RateLimitingMiddleware(inner_app_v2))) else: api_v2 = openstack_api.FaultWrapper(auth.AuthMiddleware( - limits.RateLimitingMiddleware( - serialization( - extensions.ExtensionMiddleware(inner_app_v2))))) + limits.RateLimitingMiddleware(inner_app_v2))) mapper = urlmap.URLMap() mapper['/v2'] = api_v2 diff --git a/nova/tests/api/openstack/test_common.py b/nova/tests/api/openstack/test_common.py index cd85208b9..e8f967976 100644 --- a/nova/tests/api/openstack/test_common.py +++ b/nova/tests/api/openstack/test_common.py @@ -372,7 +372,7 @@ class MetadataXMLDeserializationTest(test.TestCase): class MetadataXMLSerializationTest(test.TestCase): def test_xml_declaration(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { 'one': 'two', @@ -380,20 +380,20 @@ class MetadataXMLSerializationTest(test.TestCase): }, } - output = serializer.serialize(fixture, 'index') + output = serializer.serialize(fixture) print output has_dec = output.startswith("") self.assertTrue(has_dec) def test_index(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { 'one': 'two', 'three': 'four', }, } - output = serializer.serialize(fixture, 'index') + output = serializer.serialize(fixture) print output root = etree.XML(output) xmlutil.validate_schema(root, 'metadata') @@ -406,13 +406,13 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(str(metadata_elem.text).strip(), str(meta_value)) def test_index_null(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { None: None, }, } - output = serializer.serialize(fixture, 'index') + output = serializer.serialize(fixture) print output root = etree.XML(output) xmlutil.validate_schema(root, 'metadata') @@ -425,13 +425,13 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(str(metadata_elem.text).strip(), str(meta_value)) def test_index_unicode(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { u'three': u'Jos\xe9', }, } - output = serializer.serialize(fixture, 'index') + output = serializer.serialize(fixture) print output root = etree.XML(output) xmlutil.validate_schema(root, 'metadata') @@ -444,13 +444,13 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(metadata_elem.text.strip(), meta_value) def test_show(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetaItemTemplate() fixture = { 'meta': { 'one': 'two', }, } - output = serializer.serialize(fixture, 'show') + output = serializer.serialize(fixture) print output root = etree.XML(output) meta_dict = fixture['meta'] @@ -459,14 +459,14 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(root.text.strip(), meta_value) def test_update_all(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { 'key6': 'value6', 'key4': 'value4', }, } - output = serializer.serialize(fixture, 'update_all') + output = serializer.serialize(fixture) print output root = etree.XML(output) xmlutil.validate_schema(root, 'metadata') @@ -479,13 +479,13 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(str(metadata_elem.text).strip(), str(meta_value)) def test_update_item(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetaItemTemplate() fixture = { 'meta': { 'one': 'two', }, } - output = serializer.serialize(fixture, 'update') + output = serializer.serialize(fixture) print output root = etree.XML(output) meta_dict = fixture['meta'] @@ -494,7 +494,7 @@ class MetadataXMLSerializationTest(test.TestCase): self.assertEqual(root.text.strip(), meta_value) def test_create(self): - serializer = common.MetadataXMLSerializer() + serializer = common.MetadataTemplate() fixture = { 'metadata': { 'key9': 'value9', @@ -502,7 +502,7 @@ class MetadataXMLSerializationTest(test.TestCase): 'key1': 'value1', }, } - output = serializer.serialize(fixture, 'create') + output = serializer.serialize(fixture) print output root = etree.XML(output) xmlutil.validate_schema(root, 'metadata') @@ -524,8 +524,3 @@ class MetadataXMLSerializationTest(test.TestCase): """.replace(" ", "").replace("\n", "")) self.assertEqual(expected.toxml(), actual.toxml()) - - def test_delete(self): - serializer = common.MetadataXMLSerializer() - output = serializer.serialize(None, 'delete') - self.assertEqual(output, '') diff --git a/nova/tests/api/openstack/test_wsgi.py b/nova/tests/api/openstack/test_wsgi.py index a0bbb6b9d..90d048443 100644 --- a/nova/tests/api/openstack/test_wsgi.py +++ b/nova/tests/api/openstack/test_wsgi.py @@ -98,29 +98,6 @@ class ActionDispatcherTest(test.TestCase): self.assertEqual(serializer.dispatch({}, action='update'), 'trousers') -class ResponseHeadersSerializerTest(test.TestCase): - def test_default(self): - serializer = wsgi.ResponseHeadersSerializer() - context = nova.context.get_admin_context() - req = webob.Request.blank('/', environ={'nova.context': context}) - response = webob.Response(request=req) - serializer.serialize(response, {'v': '123'}, 'asdf') - self.assertEqual(response.status_int, 200) - - def test_custom(self): - class Serializer(wsgi.ResponseHeadersSerializer): - def update(self, response, data): - response.status_int = 404 - response.headers['X-Custom-Header'] = data['v'] - serializer = Serializer() - context = nova.context.get_admin_context() - req = webob.Request.blank('/', environ={'nova.context': context}) - response = webob.Response(request=req) - serializer.serialize(response, {'v': '123'}, 'update') - self.assertEqual(response.status_int, 404) - self.assertEqual(response.headers['X-Custom-Header'], '123') - - class DictSerializerTest(test.TestCase): def test_dispatch_default(self): serializer = wsgi.DictSerializer() @@ -207,226 +184,6 @@ class XMLDeserializerTest(test.TestCase): self.assertEqual(deserializer.deserialize(xml), as_dict) -class RequestHeadersDeserializerTest(test.TestCase): - def test_default(self): - deserializer = wsgi.RequestHeadersDeserializer() - req = wsgi.Request.blank('/') - self.assertEqual(deserializer.deserialize(req, 'asdf'), {}) - - def test_custom(self): - class Deserializer(wsgi.RequestHeadersDeserializer): - def update(self, request): - return {'a': request.headers['X-Custom-Header']} - deserializer = Deserializer() - req = wsgi.Request.blank('/') - req.headers['X-Custom-Header'] = 'b' - self.assertEqual(deserializer.deserialize(req, 'update'), {'a': 'b'}) - - -class ResponseHeadersSerializerTest(test.TestCase): - def test_request_id(self): - serializer = wsgi.ResponseHeadersSerializer() - - context = nova.context.get_admin_context() - req = webob.Request.blank('/', environ={'nova.context': context}) - res = webob.Response(request=req) - serializer.serialize(res, {}, 'foo') - h1 = res.headers.get('X-Compute-Request-Id') - self.assertTrue(h1) - - context = nova.context.get_admin_context() - req = webob.Request.blank('/', environ={'nova.context': context}) - res = webob.Response(request=req) - serializer.serialize(res, {}, 'foo') - h2 = res.headers.get('X-Compute-Request-Id') - self.assertTrue(h2) - - self.assertNotEqual(h1, h2) - - -class JSONSerializer(object): - def serialize(self, data, action='default'): - return 'pew_json' - - -class XMLSerializer(object): - def serialize(self, data, action='default'): - return 'pew_xml' - - -class HeadersSerializer(object): - def serialize(self, response, data, action): - response.status_int = 404 - - -class ResponseSerializerTest(test.TestCase): - def setUp(self): - self.body_serializers = { - 'application/json': JSONSerializer(), - 'application/xml': XMLSerializer(), - } - - self.serializer = wsgi.ResponseSerializer(self.body_serializers, - HeadersSerializer()) - - def tearDown(self): - pass - - def test_get_serializer(self): - ctype = 'application/json' - self.assertEqual(self.serializer.get_body_serializer(ctype), - self.body_serializers[ctype]) - - def test_get_serializer_unknown_content_type(self): - self.assertRaises(exception.InvalidContentType, - self.serializer.get_body_serializer, - 'application/unknown') - - def test_serialize_response_json(self): - for content_type in ('application/json', - 'application/vnd.openstack.compute+json'): - request = wsgi.Request.blank('/') - response = self.serializer.serialize(request, {}, content_type) - self.assertEqual(response.headers['Content-Type'], content_type) - self.assertEqual(response.body, 'pew_json') - self.assertEqual(response.status_int, 404) - - def test_serialize_response_xml(self): - for content_type in ('application/xml', - 'application/vnd.openstack.compute+xml'): - request = wsgi.Request.blank('/') - response = self.serializer.serialize(request, {}, content_type) - self.assertEqual(response.headers['Content-Type'], content_type) - self.assertEqual(response.body, 'pew_xml') - self.assertEqual(response.status_int, 404) - - def test_serialize_response_None(self): - request = wsgi.Request.blank('/') - response = self.serializer.serialize(request, None, 'application/json') - self.assertEqual(response.headers['Content-Type'], 'application/json') - self.assertEqual(response.body, '') - self.assertEqual(response.status_int, 404) - - def test_serialize_response_dict_to_unknown_content_type(self): - request = wsgi.Request.blank('/') - self.assertRaises(exception.InvalidContentType, - self.serializer.serialize, - request, {}, 'application/unknown') - - -class LazySerializationTest(test.TestCase): - def setUp(self): - self.body_serializers = { - 'application/json': JSONSerializer(), - 'application/xml': XMLSerializer(), - } - - self.serializer = wsgi.ResponseSerializer(self.body_serializers, - HeadersSerializer()) - - def tearDown(self): - pass - - def test_serialize_response_json(self): - for content_type in ('application/json', - 'application/vnd.openstack.compute+json'): - request = wsgi.Request.blank('/') - request.environ['nova.lazy_serialize'] = True - response = self.serializer.serialize(request, {}, content_type) - self.assertEqual(response.headers['Content-Type'], content_type) - self.assertEqual(response.status_int, 404) - body = json.loads(response.body) - self.assertEqual(body, {}) - serializer = request.environ['nova.serializer'] - self.assertEqual(serializer.serialize(body), 'pew_json') - - def test_serialize_response_xml(self): - for content_type in ('application/xml', - 'application/vnd.openstack.compute+xml'): - request = wsgi.Request.blank('/') - request.environ['nova.lazy_serialize'] = True - response = self.serializer.serialize(request, {}, content_type) - self.assertEqual(response.headers['Content-Type'], content_type) - self.assertEqual(response.status_int, 404) - body = json.loads(response.body) - self.assertEqual(body, {}) - serializer = request.environ['nova.serializer'] - self.assertEqual(serializer.serialize(body), 'pew_xml') - - def test_serialize_response_None(self): - request = wsgi.Request.blank('/') - request.environ['nova.lazy_serialize'] = True - response = self.serializer.serialize(request, None, 'application/json') - self.assertEqual(response.headers['Content-Type'], 'application/json') - self.assertEqual(response.status_int, 404) - self.assertEqual(response.body, '') - - -class RequestDeserializerTest(test.TestCase): - def setUp(self): - class JSONDeserializer(object): - def deserialize(self, data, action='default'): - return 'pew_json' - - class XMLDeserializer(object): - def deserialize(self, data, action='default'): - return 'pew_xml' - - self.body_deserializers = { - 'application/json': JSONDeserializer(), - 'application/xml': XMLDeserializer(), - } - - self.deserializer = wsgi.RequestDeserializer(self.body_deserializers) - - def tearDown(self): - pass - - def test_get_deserializer(self): - ctype = 'application/json' - expected = self.deserializer.get_body_deserializer(ctype) - self.assertEqual(expected, self.body_deserializers[ctype]) - - def test_get_deserializer_unknown_content_type(self): - self.assertRaises(exception.InvalidContentType, - self.deserializer.get_body_deserializer, - 'application/unknown') - - def test_get_expected_content_type(self): - ctype = 'application/json' - request = wsgi.Request.blank('/') - request.headers['Accept'] = ctype - self.assertEqual(self.deserializer.get_expected_content_type(request), - ctype) - - def test_get_action_args(self): - env = { - 'wsgiorg.routing_args': [None, { - 'controller': None, - 'format': None, - 'action': 'update', - 'id': 12, - }], - } - - expected = {'action': 'update', 'id': 12} - - self.assertEqual(self.deserializer.get_action_args(env), expected) - - def test_deserialize(self): - def fake_get_routing_args(request): - return {'action': 'create'} - self.deserializer.get_action_args = fake_get_routing_args - - request = wsgi.Request.blank('/') - request.headers['Accept'] = 'application/xml' - - deserialized = self.deserializer.deserialize(request) - expected = ('create', {}, 'application/xml') - - self.assertEqual(expected, deserialized) - - class ResourceTest(test.TestCase): def test_resource_call(self): class Controller(object): diff --git a/nova/tests/api/openstack/test_xmlutil.py b/nova/tests/api/openstack/test_xmlutil.py index de15cfe1f..87e374c95 100644 --- a/nova/tests/api/openstack/test_xmlutil.py +++ b/nova/tests/api/openstack/test_xmlutil.py @@ -712,78 +712,6 @@ class TemplateBuilderTest(test.TestCase): self.assertEqual(tmpl1, tmpl2) -class SerializerTest(xmlutil.XMLTemplateSerializer): - def test(self): - root = xmlutil.TemplateElement('servers') - a = xmlutil.SubTemplateElement(root, 'a', selector='servers') - a.text = xmlutil.Selector('a') - return xmlutil.MasterTemplate(root, 1, nsmap={None: "asdf"}) - - -class XMLTemplateSerializerTest(test.TestCase): - def setUp(self): - self.tmpl_serializer = SerializerTest() - self.data = dict(servers=dict(a=(2, 3))) - self.data_multi = dict(servers=[dict(a=(2, 3)), dict(a=(3, 4))]) - super(XMLTemplateSerializerTest, self).setUp() - - def test_get_template(self): - # First, check what happens when we fall back on the default - # option - self.assertEqual(self.tmpl_serializer.get_template(), None) - self.assertEqual(self.tmpl_serializer.get_template('nosuch'), None) - - # Now, check that we get back a template - tmpl = self.tmpl_serializer.get_template('test') - self.assertNotEqual(tmpl, None) - self.assertEqual(tmpl.root.tag, 'servers') - - def test_serialize_default(self): - expected_xml = '(2,3)' - result = self.tmpl_serializer.serialize(self.data) - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - def test_serialize_multi_default(self): - expected_xml = ('(2,3)' - '(3,4)') - result = self.tmpl_serializer.serialize(self.data_multi) - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - def test_serialize_explicit(self): - expected_xml = ("" - '(2,3)') - tmpl = self.tmpl_serializer.get_template('test') - result = self.tmpl_serializer.serialize(self.data, template=tmpl) - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - def test_serialize_multi_explicit(self): - expected_xml = ("" - '(2,3)' - '(3,4)') - tmpl = self.tmpl_serializer.get_template('test') - result = self.tmpl_serializer.serialize(self.data_multi, template=tmpl) - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - def test_serialize(self): - expected_xml = ("" - '(2,3)') - result = self.tmpl_serializer.serialize(self.data, 'test') - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - def test_serialize_multi(self): - expected_xml = ("" - '(2,3)' - '(3,4)') - result = self.tmpl_serializer.serialize(self.data_multi, 'test') - result = result.replace('\n', '').replace(' ', '') - self.assertEqual(result, expected_xml) - - class MiscellaneousXMLUtilTests(test.TestCase): def test_make_flat_dict(self): expected_xml = ("\n" diff --git a/nova/tests/api/openstack/volume/test_snapshots.py b/nova/tests/api/openstack/volume/test_snapshots.py index 06543ae5f..0d2220727 100644 --- a/nova/tests/api/openstack/volume/test_snapshots.py +++ b/nova/tests/api/openstack/volume/test_snapshots.py @@ -251,7 +251,7 @@ class SnapshotSerializerTest(test.TestCase): self.assertEqual(str(snap[attr]), tree.get(attr)) def test_snapshot_show_create_serializer(self): - serializer = snapshots.SnapshotSerializer() + serializer = snapshots.SnapshotTemplate() raw_snapshot = dict( id='snap_id', status='snap_status', @@ -261,7 +261,7 @@ class SnapshotSerializerTest(test.TestCase): displayDescription='snap_desc', volumeId='vol_id', ) - text = serializer.serialize(dict(snapshot=raw_snapshot), 'show') + text = serializer.serialize(dict(snapshot=raw_snapshot)) print text tree = etree.fromstring(text) @@ -269,7 +269,7 @@ class SnapshotSerializerTest(test.TestCase): self._verify_snapshot(raw_snapshot, tree) def test_snapshot_index_detail_serializer(self): - serializer = snapshots.SnapshotSerializer() + serializer = snapshots.SnapshotsTemplate() raw_snapshots = [dict( id='snap1_id', status='snap1_status', @@ -288,7 +288,7 @@ class SnapshotSerializerTest(test.TestCase): displayDescription='snap2_desc', volumeId='vol2_id', )] - text = serializer.serialize(dict(snapshots=raw_snapshots), 'index') + text = serializer.serialize(dict(snapshots=raw_snapshots)) print text tree = etree.fromstring(text) diff --git a/nova/tests/api/openstack/volume/test_types.py b/nova/tests/api/openstack/volume/test_types.py index 34d861bed..a6253c7af 100644 --- a/nova/tests/api/openstack/volume/test_types.py +++ b/nova/tests/api/openstack/volume/test_types.py @@ -123,10 +123,6 @@ class VolumeTypesApiTest(test.TestCase): class VolumeTypesSerializerTest(test.TestCase): - def setUp(self): - super(VolumeTypesSerializerTest, self).setUp() - self.serializer = types.VolumeTypesSerializer() - def _verify_volume_type(self, vtype, tree): self.assertEqual('volume_type', tree.tag) self.assertEqual(vtype['name'], tree.get('name')) @@ -142,9 +138,11 @@ class VolumeTypesSerializerTest(test.TestCase): self.assertEqual(len(seen), 0) def test_index_serializer(self): + serializer = types.VolumeTypesTemplate() + # Just getting some input data vtypes = return_volume_types_get_all_types(None) - text = self.serializer.serialize(vtypes, 'index') + text = serializer.serialize(vtypes) print text tree = etree.fromstring(text) @@ -157,8 +155,10 @@ class VolumeTypesSerializerTest(test.TestCase): self._verify_volume_type(vtypes[name], child) def test_voltype_serializer(self): + serializer = types.VolumeTypeTemplate() + vtype = stub_volume_type(1) - text = self.serializer.serialize(dict(volume_type=vtype)) + text = serializer.serialize(dict(volume_type=vtype)) print text tree = etree.fromstring(text) diff --git a/nova/tests/api/openstack/volume/test_volumes.py b/nova/tests/api/openstack/volume/test_volumes.py index 8e936fd56..51ad2c536 100644 --- a/nova/tests/api/openstack/volume/test_volumes.py +++ b/nova/tests/api/openstack/volume/test_volumes.py @@ -134,47 +134,8 @@ class VolumeSerializerTest(test.TestCase): not_seen.remove(gr_child.tag) self.assertEqual(0, len(not_seen)) - def test_attach_show_create_serializer(self): - serializer = volumes.VolumeAttachmentSerializer() - raw_attach = dict( - id='vol_id', - volumeId='vol_id', - serverId='instance_uuid', - device='/foo') - text = serializer.serialize(dict(volumeAttachment=raw_attach), 'show') - - print text - tree = etree.fromstring(text) - - self.assertEqual('volumeAttachment', tree.tag) - self._verify_volume_attachment(raw_attach, tree) - - def test_attach_index_serializer(self): - serializer = volumes.VolumeAttachmentSerializer() - raw_attaches = [dict( - id='vol_id1', - volumeId='vol_id1', - serverId='instance1_uuid', - device='/foo1'), - dict( - id='vol_id2', - volumeId='vol_id2', - serverId='instance2_uuid', - device='/foo2')] - text = serializer.serialize(dict(volumeAttachments=raw_attaches), - 'index') - - print text - tree = etree.fromstring(text) - - self.assertEqual('volumeAttachments', tree.tag) - self.assertEqual(len(raw_attaches), len(tree)) - for idx, child in enumerate(tree): - self.assertEqual('volumeAttachment', child.tag) - self._verify_volume_attachment(raw_attaches[idx], child) - def test_volume_show_create_serializer(self): - serializer = volumes.VolumeSerializer() + serializer = volumes.VolumeTemplate() raw_volume = dict( id='vol_id', status='vol_status', @@ -195,7 +156,7 @@ class VolumeSerializerTest(test.TestCase): baz='quux', ), ) - text = serializer.serialize(dict(volume=raw_volume), 'show') + text = serializer.serialize(dict(volume=raw_volume)) print text tree = etree.fromstring(text) @@ -203,7 +164,7 @@ class VolumeSerializerTest(test.TestCase): self._verify_volume(raw_volume, tree) def test_volume_index_detail_serializer(self): - serializer = volumes.VolumeSerializer() + serializer = volumes.VolumesTemplate() raw_volumes = [dict( id='vol1_id', status='vol1_status', @@ -244,7 +205,7 @@ class VolumeSerializerTest(test.TestCase): bar='vol2_bar', ), )] - text = serializer.serialize(dict(volumes=raw_volumes), 'index') + text = serializer.serialize(dict(volumes=raw_volumes)) print text tree = etree.fromstring(text) diff --git a/nova/tests/integrated/test_extensions.py b/nova/tests/integrated/test_extensions.py index e30419ed9..64e29dbf8 100644 --- a/nova/tests/integrated/test_extensions.py +++ b/nova/tests/integrated/test_extensions.py @@ -27,8 +27,6 @@ LOG = logging.getLogger('nova.tests.integrated') class ExtensionsTest(integrated_helpers._IntegratedTestBase): def _get_flags(self): - extensions.ExtensionManager.reset() - f = super(ExtensionsTest, self)._get_flags() f['osapi_compute_extension'] = FLAGS.osapi_compute_extension[:] f['osapi_compute_extension'].append( -- cgit