diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-10 19:13:45 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-10 19:13:45 +0000 |
| commit | 67e2bbdfa2fdc564ff6e77b6ec5b02bd6fb98a17 (patch) | |
| tree | b21799eddddd3302d8412d4501df53320a318b1f /nova/tests | |
| parent | a7abc32cfe6efe865c7a31c260bc0e145764f602 (diff) | |
| parent | d0189e777097a3adc5cf030123adfc24c67d14b4 (diff) | |
Merge "Moves security group functionality into extension"
Diffstat (limited to 'nova/tests')
4 files changed, 192 insertions, 3 deletions
diff --git a/nova/tests/api/openstack/compute/contrib/test_createserverext.py b/nova/tests/api/openstack/compute/contrib/test_createserverext.py index aaef09f8b..d7d5be5c7 100644 --- a/nova/tests/api/openstack/compute/contrib/test_createserverext.py +++ b/nova/tests/api/openstack/compute/contrib/test_createserverext.py @@ -77,6 +77,10 @@ class CreateserverextTest(test.TestCase): self.db = db def create(self, *args, **kwargs): + if 'security_group' in kwargs: + self.security_group = kwargs['security_group'] + else: + self.security_group = None if 'injected_files' in kwargs: self.injected_files = kwargs['injected_files'] else: @@ -367,6 +371,7 @@ class CreateserverextTest(test.TestCase): _run_create_inst = self._run_create_instance_with_mock_compute_api compute_api, response = _run_create_inst(request) self.assertEquals(response.status_int, 202) + self.assertEquals(compute_api.security_group, security_groups) def test_get_server_by_id_verify_security_groups_json(self): self.stubs.Set(nova.db, 'instance_get', fakes.fake_instance_get()) @@ -376,7 +381,7 @@ class CreateserverextTest(test.TestCase): self.assertEquals(response.status_int, 200) res_dict = jsonutils.loads(response.body) expected_security_group = [{"name": "test"}] - self.assertEquals(res_dict['server']['security_groups'], + self.assertEquals(res_dict['server'].get('security_groups'), expected_security_group) def test_get_server_by_id_verify_security_groups_xml(self): 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 9999d94da..a6c898f7c 100644 --- a/nova/tests/api/openstack/compute/contrib/test_disk_config.py +++ b/nova/tests/api/openstack/compute/contrib/test_disk_config.py @@ -95,6 +95,10 @@ class DiskConfigTestCase(test.TestCase): inst['name'] = 'instance-1' # this is a property inst['task_state'] = '' inst['vm_state'] = '' + # NOTE(vish): db create translates security groups into model + # objects. Translate here so tests pass + inst['security_groups'] = [{'name': group} + for group in inst['security_groups']] def fake_instance_get_for_create(context, id_, *args, **kwargs): return (inst, inst) diff --git a/nova/tests/api/openstack/compute/contrib/test_security_groups.py b/nova/tests/api/openstack/compute/contrib/test_security_groups.py index ea7d21db1..f977fc04e 100644 --- a/nova/tests/api/openstack/compute/contrib/test_security_groups.py +++ b/nova/tests/api/openstack/compute/contrib/test_security_groups.py @@ -23,9 +23,12 @@ import webob from nova.api.openstack.compute.contrib import security_groups from nova.api.openstack import wsgi +from nova.api.openstack import xmlutil +from nova import compute import nova.db from nova import exception from nova import flags +from nova.openstack.common import jsonutils from nova import test from nova.tests.api.openstack import fakes @@ -1199,3 +1202,136 @@ class TestSecurityGroupXMLSerializer(unittest.TestCase): self.assertEqual(len(groups), len(tree)) for idx, child in enumerate(tree): self._verify_security_group(groups[idx], child) + + +UUID1 = '00000000-0000-0000-0000-000000000001' +UUID2 = '00000000-0000-0000-0000-000000000002' +UUID3 = '00000000-0000-0000-0000-000000000003' + + +def fake_compute_get_all(*args, **kwargs): + return [ + fakes.stub_instance(1, uuid=UUID1, + security_groups=[{'name': 'fake-0-0'}, + {'name': 'fake-0-1'}]), + fakes.stub_instance(2, uuid=UUID2, + security_groups=[{'name': 'fake-1-0'}, + {'name': 'fake-1-1'}]) + ] + + +def fake_compute_get(*args, **kwargs): + return fakes.stub_instance(1, uuid=UUID3, + security_groups=[{'name': 'fake-2-0'}, + {'name': 'fake-2-1'}]) + + +def fake_compute_create(*args, **kwargs): + return ([fake_compute_get()], '') + + +class SecurityGroupsOutputTest(test.TestCase): + content_type = 'application/json' + + def setUp(self): + super(SecurityGroupsOutputTest, self).setUp() + fakes.stub_out_nw_api(self.stubs) + self.stubs.Set(compute.api.API, 'get', fake_compute_get) + self.stubs.Set(compute.api.API, 'get_all', fake_compute_get_all) + self.stubs.Set(compute.api.API, 'create', fake_compute_create) + + def _make_request(self, url, body=None): + req = webob.Request.blank(url) + if body: + req.method = 'POST' + req.body = self._encode_body(body) + req.content_type = self.content_type + req.headers['Accept'] = self.content_type + res = req.get_response(fakes.wsgi_app()) + return res + + def _encode_body(self, body): + return jsonutils.dumps(body) + + def _get_server(self, body): + return jsonutils.loads(body).get('server') + + def _get_servers(self, body): + return jsonutils.loads(body).get('servers') + + def _get_groups(self, server): + return server.get('security_groups') + + def test_create(self): + url = '/v2/fake/servers' + image_uuid = 'c905cedb-7281-47e4-8a62-f26bc5fc4c77' + server = dict(name='server_test', imageRef=image_uuid, flavorRef=2) + res = self._make_request(url, {'server': server}) + self.assertEqual(res.status_int, 202) + server = self._get_server(res.body) + for i, group in enumerate(self._get_groups(server)): + name = 'fake-2-%s' % i + self.assertEqual(group.get('name'), name) + + def test_show(self): + url = '/v2/fake/servers/%s' % UUID3 + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + server = self._get_server(res.body) + for i, group in enumerate(self._get_groups(server)): + name = 'fake-2-%s' % i + self.assertEqual(group.get('name'), name) + + def test_detail(self): + url = '/v2/fake/servers/detail' + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + for i, server in enumerate(self._get_servers(res.body)): + for j, group in enumerate(self._get_groups(server)): + name = 'fake-%s-%s' % (i, j) + self.assertEqual(group.get('name'), name) + + def test_no_instance_passthrough_404(self): + + def fake_compute_get(*args, **kwargs): + raise exception.InstanceNotFound() + + self.stubs.Set(compute.api.API, 'get', fake_compute_get) + url = '/v2/fake/servers/70f6db34-de8d-4fbd-aafb-4065bdfa6115' + res = self._make_request(url) + + self.assertEqual(res.status_int, 404) + + +class SecurityGroupsOutputXmlTest(SecurityGroupsOutputTest): + content_type = 'application/xml' + + class MinimalCreateServerTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('server', selector='server') + root.set('name') + root.set('id') + root.set('imageRef') + root.set('flavorRef') + return xmlutil.MasterTemplate(root, 1, + nsmap={None: xmlutil.XMLNS_V11}) + + def _encode_body(self, body): + serializer = self.MinimalCreateServerTemplate() + return serializer.serialize(body) + + def _get_server(self, body): + return etree.XML(body) + + def _get_servers(self, body): + return etree.XML(body).getchildren() + + def _get_groups(self, server): + # NOTE(vish): we are adding security groups without an extension + # namespace so we don't break people using the existing + # functionality, but that means we need to use find with + # the existing server namespace. + namespace = server.nsmap[None] + return server.find('{%s}security_groups' % namespace).getchildren() diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py index 2cb146358..e482ca812 100644 --- a/nova/tests/api/openstack/compute/test_servers.py +++ b/nova/tests/api/openstack/compute/test_servers.py @@ -116,6 +116,7 @@ class ServersControllerTest(test.TestCase): instance_update) self.ext_mgr = extensions.ExtensionManager() + self.ext_mgr.extensions = {} self.controller = servers.Controller(self.ext_mgr) self.ips_controller = ips.Controller() @@ -1410,7 +1411,9 @@ class ServerStatusTest(test.TestCase): super(ServerStatusTest, self).setUp() fakes.stub_out_nw_api(self.stubs) - self.controller = servers.Controller() + self.ext_mgr = extensions.ExtensionManager() + self.ext_mgr.extensions = {} + self.controller = servers.Controller(self.ext_mgr) def _get_with_state(self, vm_state, task_state=None): self.stubs.Set(nova.db, 'instance_get_by_uuid', @@ -1479,7 +1482,9 @@ class ServersControllerCreateTest(test.TestCase): self.instance_cache_by_id = {} self.instance_cache_by_uuid = {} - self.controller = servers.Controller() + self.ext_mgr = extensions.ExtensionManager() + self.ext_mgr.extensions = {} + self.controller = servers.Controller(self.ext_mgr) def instance_create(context, inst): inst_type = instance_types.get_instance_type_by_flavor_id(3) @@ -1743,6 +1748,45 @@ class ServersControllerCreateTest(test.TestCase): fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False) self._test_create_instance() + def _test_create_security_group(self, group): + image_uuid = 'c905cedb-7281-47e4-8a62-f26bc5fc4c77' + body = dict(server=dict( + name='server_test', imageRef=image_uuid, flavorRef=2, + metadata={'hello': 'world', 'open': 'stack'}, + security_groups=[{'name': group}], + personality={})) + req = fakes.HTTPRequest.blank('/v2/fake/servers') + req.method = 'POST' + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + server = self.controller.create(req, body).obj['server'] + + def test_create_instance_with_security_group_enabled(self): + self.ext_mgr.extensions = {'os-security-groups': 'fake'} + group = 'foo' + old_create = nova.compute.api.API.create + + def create(*args, **kwargs): + self.assertEqual(kwargs['security_group'], [group]) + return old_create(*args, **kwargs) + + self.stubs.Set(nova.compute.api.API, 'create', create) + self._test_create_security_group(group) + + def test_create_instance_with_security_group_disabled(self): + group = 'foo' + old_create = nova.compute.api.API.create + + def create(*args, **kwargs): + # NOTE(vish): if the security groups extension is not + # enabled, then security groups passed in + # are ignored. + self.assertEqual(kwargs['security_group'], ['default']) + return old_create(*args, **kwargs) + + self.stubs.Set(nova.compute.api.API, 'create', create) + self._test_create_security_group(group) + def test_create_instance_with_access_ip(self): # proper local hrefs must start with 'http://localhost/v2/' image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6' |
