summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-10 19:13:45 +0000
committerGerrit Code Review <review@openstack.org>2012-08-10 19:13:45 +0000
commit67e2bbdfa2fdc564ff6e77b6ec5b02bd6fb98a17 (patch)
treeb21799eddddd3302d8412d4501df53320a318b1f /nova/tests
parenta7abc32cfe6efe865c7a31c260bc0e145764f602 (diff)
parentd0189e777097a3adc5cf030123adfc24c67d14b4 (diff)
Merge "Moves security group functionality into extension"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_createserverext.py7
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_disk_config.py4
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_security_groups.py136
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py48
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'