summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-06-05 11:52:53 -0700
committerDan Smith <danms@us.ibm.com>2013-06-07 11:43:37 -0700
commit65f6c536fecd3c788b2e0dfa9d66ecd24ca550e1 (patch)
treeba7d2c9f6ed06d998d94c979fbf3b6214eec5331 /nova/tests
parent91ac85ce82bc6d050b1152dd7af8851b43b01ea5 (diff)
Add base mixin class for object lists
This provides a base class that provides the bulk of the common functionality that objects implementing a list of objects will need. Related to blueprint unified-object-model Change-Id: I5bc4e64cc8fe2d780251cbc43f2ee45f4e0f820a
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/objects/test_objects.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/nova/tests/objects/test_objects.py b/nova/tests/objects/test_objects.py
index e1c5f2c11..9c92230eb 100644
--- a/nova/tests/objects/test_objects.py
+++ b/nova/tests/objects/test_objects.py
@@ -452,3 +452,40 @@ class TestRemoteObject(_RemoteTest, _TestObject):
obj = MyObj2.get(ctxt)
self.assertEqual(obj.bar, 'bar')
self.assertRemotes()
+
+
+class TestObjectListBase(test.TestCase):
+ def test_list_like_operations(self):
+ class Foo(base.ObjectListBase, base.NovaObject):
+ pass
+
+ objlist = Foo()
+ objlist._context = 'foo'
+ objlist.objects = [1, 2, 3]
+ self.assertTrue(list(objlist), objlist.objects)
+ self.assertEqual(len(objlist), 3)
+ self.assertIn(2, objlist)
+ self.assertEqual(list(objlist[:1]), [1])
+ self.assertEqual(objlist[:1]._context, 'foo')
+ self.assertEqual(objlist[2], 3)
+ self.assertEqual(objlist.count(1), 1)
+ self.assertEqual(objlist.index(2), 1)
+
+ def test_serialization(self):
+ class Foo(base.ObjectListBase, base.NovaObject):
+ pass
+
+ class Bar(base.NovaObject):
+ fields = {'foo': str}
+
+ obj = Foo()
+ obj.objects = []
+ for i in 'abc':
+ bar = Bar()
+ bar.foo = i
+ obj.objects.append(bar)
+
+ obj2 = base.NovaObject.obj_from_primitive(obj.obj_to_primitive())
+ self.assertFalse(obj is obj2)
+ self.assertEqual([x.foo for x in obj],
+ [y.foo for y in obj2])