summaryrefslogtreecommitdiff
path: root/nova/tests/unit/objects/test_instance_info_cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/tests/unit/objects/test_instance_info_cache.py')
-rw-r--r--nova/tests/unit/objects/test_instance_info_cache.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/nova/tests/unit/objects/test_instance_info_cache.py b/nova/tests/unit/objects/test_instance_info_cache.py
index 2df596f5af..2c4d6a3263 100644
--- a/nova/tests/unit/objects/test_instance_info_cache.py
+++ b/nova/tests/unit/objects/test_instance_info_cache.py
@@ -13,8 +13,9 @@
# under the License.
import datetime
+from unittest import mock
-import mock
+from oslo_db import exception as db_exc
from oslo_utils.fixture import uuidsentinel as uuids
from oslo_utils import timeutils
@@ -82,6 +83,30 @@ class _TestInstanceInfoCacheObject(object):
self.assertEqual(timeutils.normalize_time(fake_updated_at),
timeutils.normalize_time(obj.updated_at))
+ @mock.patch.object(db, 'instance_info_cache_update')
+ def test_save_fkey_constraint_fail(self, mock_update):
+ fake_updated_at = datetime.datetime(2015, 1, 1)
+ nwinfo = network_model.NetworkInfo.hydrate([{'address': 'foo'}])
+ nwinfo_json = nwinfo.json()
+ new_info_cache = fake_info_cache.copy()
+ new_info_cache['id'] = 1
+ new_info_cache['updated_at'] = fake_updated_at
+ new_info_cache['network_info'] = nwinfo_json
+
+ # We should see InstanceNotFound raised for fkey=instance_uuid
+ mock_update.side_effect = db_exc.DBReferenceError(
+ 'table', 'constraint', 'instance_uuid', 'key_table')
+
+ obj = instance_info_cache.InstanceInfoCache(context=self.context)
+ obj.instance_uuid = uuids.info_instance
+ obj.network_info = nwinfo_json
+ self.assertRaises(exception.InstanceNotFound, obj.save)
+
+ # We should see the original exception raised for any other fkey
+ mock_update.side_effect = db_exc.DBReferenceError(
+ 'table', 'constraint', 'otherkey', 'key_table')
+ self.assertRaises(db_exc.DBReferenceError, obj.save)
+
@mock.patch.object(db, 'instance_info_cache_get',
return_value=fake_info_cache)
def test_refresh(self, mock_get):