summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-06-17 19:03:03 -0700
committerDan Smith <danms@us.ibm.com>2013-06-24 15:47:53 -0700
commiteec6ddcfaf2af215a0e041ab1b7bbcce8ebb5aad (patch)
treef7f2344fce4f126f912a2436e7c7c629c20af7ba /nova/tests
parent1792c03d81a5a72fbf881e26be235fb77236b1c2 (diff)
Add Instance.security_groups
This makes Instance load the security_groups list when it is present in the database object. It also refactors the way info_cache is saved, so that it can more easily apply to security_groups as well. Related to blueprint unified-object-model Fixes bug 1192003 Change-Id: Ifb028e17ffef7c14557e6389a650d66ce8e9b25c
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/fakes.py5
-rw-r--r--nova/tests/compute/test_compute.py9
-rw-r--r--nova/tests/objects/test_instance.py37
3 files changed, 48 insertions, 3 deletions
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index f05561ff2..a4edf9e89 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -488,7 +488,10 @@ def stub_instance(id, user_id=None, project_id=None, host=None,
key_data = ''
if security_groups is None:
- security_groups = [{"id": 1, "name": "test"}]
+ security_groups = [{"id": 1, "name": "test", "description": "Foo:",
+ "project_id": "project", "user_id": "user",
+ "created_at": None, "updated_at": None,
+ "deleted_at": None, "deleted": False}]
# ReservationID isn't sent back, hack it in there.
server_name = name or "server%s" % id
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 7953f8b63..cb9498b1a 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -262,6 +262,7 @@ class BaseTestCase(test.TestCase):
inst['created_at'] = timeutils.utcnow()
inst['updated_at'] = timeutils.utcnow()
inst['launched_at'] = timeutils.utcnow()
+ inst['security_groups'] = []
inst.update(params)
_create_service_entries(self.context.elevated(),
{'fake_zone': [inst['host']]})
@@ -275,7 +276,10 @@ class BaseTestCase(test.TestCase):
def _fake_db_create(_ctxt, inst):
for k, v in inst.items():
- setattr(instance, k, v)
+ if k == 'security_groups':
+ setattr(instance, k, v or None)
+ else:
+ setattr(instance, k, v)
return instance
self.stubs.Set(db, 'instance_create', _fake_db_create)
@@ -4851,7 +4855,8 @@ class ComputeTestCase(BaseTestCase):
inst = dict(fakes.stub_instance(1),
deleted_at=None, created_at=None, updated_at=None,
deleted=0, info_cache={'instance_uuid': 'fake-uuid',
- 'network_info': None})
+ 'network_info': None},
+ security_groups=None)
startup_instances = [inst, inst, inst]
def _do_mock_calls(defer_iptables_apply):
diff --git a/nova/tests/objects/test_instance.py b/nova/tests/objects/test_instance.py
index 09ce70355..f5128e73f 100644
--- a/nova/tests/objects/test_instance.py
+++ b/nova/tests/objects/test_instance.py
@@ -20,6 +20,7 @@ from nova import context
from nova import db
from nova.objects import base
from nova.objects import instance
+from nova.objects import security_group
from nova.openstack.common import timeutils
from nova.tests.api.openstack import fakes
from nova.tests.objects import test_objects
@@ -41,6 +42,7 @@ class _TestInstanceObject(object):
tzinfo=iso8601.iso8601.Utc(), microsecond=0))
fake_instance['deleted'] = False
fake_instance['info_cache']['instance_uuid'] = fake_instance['uuid']
+ fake_instance['security_groups'] = None
return fake_instance
def test_datetime_deserialization(self):
@@ -213,6 +215,40 @@ class _TestInstanceObject(object):
inst.info_cache.network_info = 'bar'
inst.save()
+ def test_with_security_groups(self):
+ ctxt = context.get_admin_context()
+ fake_inst = dict(self.fake_instance)
+ fake_uuid = fake_inst['uuid']
+ fake_inst['security_groups'] = [
+ {'id': 1, 'name': 'secgroup1', 'description': 'fake-desc',
+ 'user_id': 'fake-user', 'project_id': 'fake_project',
+ 'created_at': None, 'updated_at': None, 'deleted_at': None,
+ 'deleted': False},
+ {'id': 2, 'name': 'secgroup2', 'description': 'fake-desc',
+ 'user_id': 'fake-user', 'project_id': 'fake_project',
+ 'created_at': None, 'updated_at': None, 'deleted_at': None,
+ 'deleted': False},
+ ]
+ self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
+ self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
+ self.mox.StubOutWithMock(db, 'security_group_update')
+ db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(fake_inst)
+ db.security_group_update(ctxt, 1, {'description': 'changed'}
+ ).AndReturn(fake_inst['security_groups'][0])
+ self.mox.ReplayAll()
+ inst = instance.Instance.get_by_uuid(ctxt, fake_uuid)
+ self.assertEqual(len(inst.security_groups), 2)
+ for index, group in enumerate(fake_inst['security_groups']):
+ for key in group:
+ self.assertEqual(group[key],
+ inst.security_groups[index][key])
+ self.assertTrue(isinstance(inst.security_groups[index],
+ security_group.SecurityGroup))
+ self.assertEqual(inst.security_groups.obj_what_changed(), set())
+ inst.security_groups[0].description = 'changed'
+ inst.save()
+ self.assertEqual(inst.security_groups.obj_what_changed(), set())
+
def test_iteritems_with_extra_attrs(self):
self.stubs.Set(instance.Instance, 'name', 'foo')
inst = instance.Instance()
@@ -248,6 +284,7 @@ class _TestInstanceListObject(object):
tzinfo=iso8601.iso8601.Utc(), microsecond=0))
fake_instance['info_cache'] = {'network_info': 'foo',
'instance_uuid': fake_instance['uuid']}
+ fake_instance['security_groups'] = []
fake_instance['deleted'] = 0
if updates:
fake_instance.update(updates)