From 65f6c536fecd3c788b2e0dfa9d66ecd24ca550e1 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Wed, 5 Jun 2013 11:52:53 -0700 Subject: 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 --- nova/tests/objects/test_objects.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'nova/tests') 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]) -- cgit