diff --git a/watcher/tests/objects/test_objects.py b/watcher/tests/objects/test_objects.py index 6ca7142d3..51e8a61ed 100644 --- a/watcher/tests/objects/test_objects.py +++ b/watcher/tests/objects/test_objects.py @@ -20,8 +20,6 @@ import netaddr from oslo_utils import timeutils import six -from watcher.common import context as watcher_context -from watcher.common import exception from watcher.objects import base from watcher.objects import utils from watcher.tests import base as test_base @@ -202,279 +200,6 @@ class TestUtils(test_base.TestCase): base.obj_to_primitive(mylist)) -class _TestObject(object): - def test_hydration_type_error(self): - primitive = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'watcher', - 'watcher_object.version': '1.5', - 'watcher_object.data': {'foo': 'a'}} - self.assertRaises(ValueError, MyObj.obj_from_primitive, primitive) - - def test_hydration(self): - primitive = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'watcher', - 'watcher_object.version': '1.5', - 'watcher_object.data': {'foo': 1}} - obj = MyObj.obj_from_primitive(primitive) - self.assertEqual(1, obj.foo) - - def test_hydration_bad_ns(self): - primitive = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'foo', - 'watcher_object.version': '1.5', - 'watcher_object.data': {'foo': 1}} - self.assertRaises(exception.UnsupportedObjectError, - MyObj.obj_from_primitive, primitive) - - def test_dehydration(self): - expected = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'watcher', - 'watcher_object.version': '1.5', - 'watcher_object.data': {'foo': 1}} - obj = MyObj(self.context) - obj.foo = 1 - obj.obj_reset_changes() - self.assertEqual(expected, obj.obj_to_primitive()) - - def test_get_updates(self): - obj = MyObj(self.context) - self.assertEqual({}, obj.obj_get_changes()) - obj.foo = 123 - self.assertEqual({'foo': 123}, obj.obj_get_changes()) - obj.bar = 'test' - self.assertEqual({'foo': 123, 'bar': 'test'}, obj.obj_get_changes()) - obj.obj_reset_changes() - self.assertEqual({}, obj.obj_get_changes()) - - def test_object_property(self): - obj = MyObj(self.context, foo=1) - self.assertEqual(1, obj.foo) - - def test_object_property_type_error(self): - obj = MyObj(self.context) - - def fail(): - obj.foo = 'a' - self.assertRaises(ValueError, fail) - - def test_object_dict_syntax(self): - obj = MyObj(self.context) - obj.foo = 123 - obj.bar = 'bar' - self.assertEqual(123, obj['foo']) - self.assertEqual([('bar', 'bar'), ('foo', 123)], - sorted(obj.items(), key=lambda x: x[0])) - self.assertEqual([('bar', 'bar'), ('foo', 123)], - sorted(list(obj.items()), key=lambda x: x[0])) - - def test_load(self): - obj = MyObj(self.context) - self.assertEqual('loaded!', obj.bar) - - def test_load_in_base(self): - class Foo(base.WatcherObject): - fields = {'foobar': int} - obj = Foo(self.context) - # NOTE(danms): Can't use assertRaisesRegexp() because of py26 - raised = False - try: - obj.foobar - except NotImplementedError as ex: - raised = True - self.assertTrue(raised) - self.assertTrue('foobar' in str(ex)) - - def test_loaded_in_primitive(self): - obj = MyObj(self.context) - obj.foo = 1 - obj.obj_reset_changes() - self.assertEqual('loaded!', obj.bar) - expected = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'watcher', - 'watcher_object.version': '1.0', - 'watcher_object.changes': ['bar'], - 'watcher_object.data': {'foo': 1, - 'bar': 'loaded!'}} - self.assertEqual(expected, obj.obj_to_primitive()) - - def test_changes_in_primitive(self): - obj = MyObj(self.context) - obj.foo = 123 - self.assertEqual(set(['foo']), obj.obj_what_changed()) - primitive = obj.obj_to_primitive() - self.assertTrue('watcher_object.changes' in primitive) - obj2 = MyObj.obj_from_primitive(primitive) - self.assertEqual(set(['foo']), obj2.obj_what_changed()) - obj2.obj_reset_changes() - self.assertEqual(set(), obj2.obj_what_changed()) - - def test_unknown_objtype(self): - self.assertRaises(exception.UnsupportedObjectError, - base.WatcherObject.obj_class_from_name, 'foo', '1.0') - - def test_with_alternate_context(self): - context1 = watcher_context.RequestContext('foo', 'foo') - context2 = watcher_context.RequestContext('bar', - project_id='alternate') - obj = MyObj.query(context1) - obj.update_test(context2) - self.assertEqual('alternate-context', obj.bar) - self.assertRemotes() - - def test_orphaned_object(self): - obj = MyObj.query(self.context) - obj._context = None - self.assertRaises(exception.OrphanedObjectError, - obj.update_test) - self.assertRemotes() - - def test_changed_1(self): - obj = MyObj.query(self.context) - obj.foo = 123 - self.assertEqual(set(['foo']), obj.obj_what_changed()) - obj.update_test(self.context) - self.assertEqual(set(['foo', 'bar']), obj.obj_what_changed()) - self.assertEqual(123, obj.foo) - self.assertRemotes() - - def test_changed_2(self): - obj = MyObj.query(self.context) - obj.foo = 123 - self.assertEqual(set(['foo']), obj.obj_what_changed()) - obj.save() - self.assertEqual(set([]), obj.obj_what_changed()) - self.assertEqual(123, obj.foo) - self.assertRemotes() - - def test_changed_3(self): - obj = MyObj.query(self.context) - obj.foo = 123 - self.assertEqual(set(['foo']), obj.obj_what_changed()) - obj.refresh() - self.assertEqual(set([]), obj.obj_what_changed()) - self.assertEqual(321, obj.foo) - self.assertEqual('refreshed', obj.bar) - self.assertRemotes() - - def test_changed_4(self): - obj = MyObj.query(self.context) - obj.bar = 'something' - self.assertEqual(set(['bar']), obj.obj_what_changed()) - obj.modify_save_modify(self.context) - self.assertEqual(set(['foo']), obj.obj_what_changed()) - self.assertEqual(42, obj.foo) - self.assertEqual('meow', obj.bar) - self.assertRemotes() - - def test_static_result(self): - obj = MyObj.query(self.context) - self.assertEqual('bar', obj.bar) - result = obj.marco() - self.assertEqual('polo', result) - self.assertRemotes() - - def test_updates(self): - obj = MyObj.query(self.context) - self.assertEqual(1, obj.foo) - obj.update_test() - self.assertEqual('updated', obj.bar) - self.assertRemotes() - - def test_base_attributes(self): - dt = datetime.datetime(1955, 11, 5) - obj = MyObj(self.context) - obj.created_at = dt - obj.updated_at = dt - expected = {'watcher_object.name': 'MyObj', - 'watcher_object.namespace': 'watcher', - 'watcher_object.version': '1.0', - 'watcher_object.changes': - ['created_at', 'updated_at'], - 'watcher_object.data': - {'created_at': timeutils.isotime(dt), - 'updated_at': timeutils.isotime(dt), - } - } - actual = obj.obj_to_primitive() - # watcher_object.changes is built from a set and order is undefined - self.assertEqual(sorted(expected['watcher_object.changes']), - sorted(actual['watcher_object.changes'])) - del expected['watcher_object.changes'], \ - actual['watcher_object.changes'] - self.assertEqual(expected, actual) - - def test_contains(self): - obj = MyObj(self.context) - self.assertFalse('foo' in obj) - obj.foo = 1 - self.assertTrue('foo' in obj) - self.assertFalse('does_not_exist' in obj) - - def test_obj_attr_is_set(self): - obj = MyObj(self.context, foo=1) - self.assertTrue(obj.obj_attr_is_set('foo')) - self.assertFalse(obj.obj_attr_is_set('bar')) - self.assertRaises(AttributeError, obj.obj_attr_is_set, 'bang') - - def test_get(self): - obj = MyObj(self.context, foo=1) - # Foo has value, should not get the default - self.assertEqual(obj.get('foo', 2), 1) - # Foo has value, should return the value without error - self.assertEqual(obj.get('foo'), 1) - # Bar is not loaded, so we should get the default - self.assertEqual(obj.get('bar', 'not-loaded'), 'not-loaded') - # Bar without a default should lazy-load - self.assertEqual(obj.get('bar'), 'loaded!') - # Bar now has a default, but loaded value should be returned - self.assertEqual(obj.get('bar', 'not-loaded'), 'loaded!') - # Invalid attribute should raise AttributeError - self.assertRaises(AttributeError, obj.get, 'nothing') - # ...even with a default - self.assertRaises(AttributeError, obj.get, 'nothing', 3) - - def test_object_inheritance(self): - base_fields = base.WatcherObject.fields.keys() - myobj_fields = ['foo', 'bar', 'missing'] + base_fields - myobj3_fields = ['new_field'] - self.assertTrue(issubclass(DummySubclassedObject, MyObj)) - self.assertEqual(len(myobj_fields), len(MyObj.fields)) - self.assertEqual(set(myobj_fields), set(MyObj.fields.keys())) - self.assertEqual(len(myobj_fields) + len(myobj3_fields), - len(DummySubclassedObject.fields)) - self.assertEqual(set(myobj_fields) | set(myobj3_fields), - set(DummySubclassedObject.fields.keys())) - - def test_get_changes(self): - obj = MyObj(self.context) - self.assertEqual({}, obj.obj_get_changes()) - obj.foo = 123 - self.assertEqual({'foo': 123}, obj.obj_get_changes()) - obj.bar = 'test' - self.assertEqual({'foo': 123, 'bar': 'test'}, obj.obj_get_changes()) - obj.obj_reset_changes() - self.assertEqual({}, obj.obj_get_changes()) - - def test_obj_fields(self): - class TestObj(base.WatcherObject): - fields = {'foo': int} - obj_extra_fields = ['bar'] - - @property - def bar(self): - return 'this is bar' - - obj = TestObj(self.context) - self.assertEqual(set(['created_at', 'updated_at', 'foo', 'bar']), - set(obj.obj_fields)) - - def test_obj_constructor(self): - obj = MyObj(self.context, foo=123, bar='abc') - self.assertEqual(123, obj.foo) - self.assertEqual('abc', obj.bar) - self.assertEqual(set(['foo', 'bar']), obj.obj_what_changed()) - - class TestObjectListBase(test_base.TestCase): def test_list_like_operations(self):