From 010be1cae9b3dcc9d64423e75e509c27ad66365b Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Fri, 8 Mar 2013 13:06:04 +1300 Subject: [PATCH] Add tests to validate REST path to action mapping. The Routes mapping performs some brittle regexp manipulation to build the parameter mapping on the path, so its nice to validate that it is doing what is expected. Supports bug #1131759 Change-Id: I251178c2bd9cb03fcedc2da7ea31378b62ae309f --- heat/tests/test_api_openstack_v1.py | 212 ++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) diff --git a/heat/tests/test_api_openstack_v1.py b/heat/tests/test_api_openstack_v1.py index ffac4e9c..fb313d25 100644 --- a/heat/tests/test_api_openstack_v1.py +++ b/heat/tests/test_api_openstack_v1.py @@ -27,6 +27,7 @@ import heat.openstack.common.rpc.common as rpc_common from heat.common.wsgi import Request from heat.common import urlfetch +import heat.api.openstack.v1 as api_v1 import heat.api.openstack.v1.stacks as stacks import heat.api.openstack.v1.resources as resources import heat.api.openstack.v1.events as events @@ -1609,3 +1610,214 @@ class EventControllerTest(ControllerTest, unittest.TestCase): stack_id=stack_identity.stack_id, resource_name=res_name, event_id=event_id) self.m.VerifyAll() + + +class RoutesTest(unittest.TestCase): + + def assertRoute(self, mapper, path, method, action, controller, params={}): + route = mapper.match(path, {'REQUEST_METHOD': method}) + self.assertIsNotNone(route) + self.assertEqual(action, route['action']) + self.assertEqual( + controller, route['controller'].controller.__class__.__name__) + del(route['action']) + del(route['controller']) + self.assertEqual(params, route) + + def setUp(self): + self.m = api_v1.API({}).map + + def test_template_handling(self): + self.assertRoute( + self.m, + '/aaaa/resource_types', + 'GET', + 'list_resource_types', + 'StackController', + { + 'tenant_id': 'aaaa' + }) + self.assertRoute( + self.m, + '/aaaa/validate', + 'POST', + 'validate_template', + 'StackController', + { + 'tenant_id': 'aaaa' + }) + + def test_stack_collection(self): + self.assertRoute( + self.m, + '/aaaa/stacks', + 'GET', + 'index', + 'StackController', + { + 'tenant_id': 'aaaa' + }) + self.assertRoute( + self.m, + '/aaaa/stacks', + 'POST', + 'create', + 'StackController', + { + 'tenant_id': 'aaaa' + }) + + def test_stack_data(self): + self.assertRoute( + self.m, + '/aaaa/stacks/teststack', + 'GET', + 'lookup', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/resources', + 'GET', + 'lookup', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'path': 'resources' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/events', + 'GET', + 'lookup', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'path': 'events' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb', + 'GET', + 'show', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/template', + 'GET', + 'template', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + }) + + def test_stack_update_delete(self): + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb', + 'PUT', + 'update', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb', + 'DELETE', + 'delete', + 'StackController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + }) + + def test_resources(self): + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/resources', + 'GET', + 'index', + 'ResourceController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/resources/cccc', + 'GET', + 'show', + 'ResourceController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + 'resource_name': 'cccc' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/resources/cccc/metadata', + 'GET', + 'metadata', + 'ResourceController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + 'resource_name': 'cccc' + }) + + def test_events(self): + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/events', + 'GET', + 'index', + 'EventController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/resources/cccc/events', + 'GET', + 'index', + 'EventController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + 'resource_name': 'cccc' + }) + self.assertRoute( + self.m, + '/aaaa/stacks/teststack/bbbb/resources/cccc/events/dddd', + 'GET', + 'show', + 'EventController', + { + 'tenant_id': 'aaaa', + 'stack_name': 'teststack', + 'stack_id': 'bbbb', + 'resource_name': 'cccc', + 'event_id': 'dddd' + }) -- 2.45.2