From f546f62397979312dd891509c31feadf149b8c59 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 10 Aug 2012 09:25:10 -0700 Subject: Make sure ec2 mapping raises proper exceptions The get commands in the db layer were constructing InstanceNotFound, VolumeNotFound, and SnapshotNotFound with imporoper kwargs. This fixes them to raise properly and adds a test to verify that the exception formatting succeeded. Fixes bug 1035375 Change-Id: I05a5bb57c047ca2b2f086c70ad12a640f51b2d3a --- nova/db/api.py | 4 ++-- nova/db/sqlalchemy/api.py | 16 ++++++++-------- nova/tests/test_db_api.py | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/nova/db/api.py b/nova/db/api.py index e6ebecbdf..01f9044c3 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -1900,9 +1900,9 @@ def get_ec2_instance_id_by_uuid(context, instance_id): return IMPL.get_ec2_instance_id_by_uuid(context, instance_id) -def get_instance_uuid_by_ec2_id(context, instance_id): +def get_instance_uuid_by_ec2_id(context, ec2_id): """Get uuid through ec2 id from instance_id_mappings table""" - return IMPL.get_instance_uuid_by_ec2_id(context, instance_id) + return IMPL.get_instance_uuid_by_ec2_id(context, ec2_id) def ec2_instance_create(context, instance_ec2_id): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 2993aaaf3..13c8bffa0 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -3223,7 +3223,7 @@ def get_ec2_volume_id_by_uuid(context, volume_id, session=None): first() if not result: - raise exception.VolumeNotFound(uuid=volume_id) + raise exception.VolumeNotFound(volume_id=volume_id) return result['id'] @@ -3235,7 +3235,7 @@ def get_volume_uuid_by_ec2_id(context, ec2_id, session=None): first() if not result: - raise exception.VolumeNotFound(ec2_id=ec2_id) + raise exception.VolumeNotFound(volume_id=ec2_id) return result['uuid'] @@ -3260,7 +3260,7 @@ def get_ec2_snapshot_id_by_uuid(context, snapshot_id, session=None): first() if not result: - raise exception.SnapshotNotFound(uuid=snapshot_id) + raise exception.SnapshotNotFound(snapshot_id=snapshot_id) return result['id'] @@ -3272,7 +3272,7 @@ def get_snapshot_uuid_by_ec2_id(context, ec2_id, session=None): first() if not result: - raise exception.SnapshotNotFound(ec2_id=ec2_id) + raise exception.SnapshotNotFound(snapshot_id=ec2_id) return result['uuid'] @@ -5163,20 +5163,20 @@ def get_ec2_instance_id_by_uuid(context, instance_id, session=None): first() if not result: - raise exception.InstanceNotFound(uuid=instance_id) + raise exception.InstanceNotFound(instance_id=instance_id) return result['id'] @require_context -def get_instance_uuid_by_ec2_id(context, instance_id, session=None): +def get_instance_uuid_by_ec2_id(context, ec2_id, session=None): result = _ec2_instance_get_query(context, session=session).\ - filter_by(id=instance_id).\ + filter_by(id=ec2_id).\ first() if not result: - raise exception.InstanceNotFound(id=instance_id) + raise exception.InstanceNotFound(instance_id=ec2_id) return result['uuid'] diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index b2b1cf9e2..89cbe18c6 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -45,6 +45,21 @@ class DbApiTestCase(test.TestCase): args.update(kwargs) return db.instance_create(self.context, args) + def test_ec2_ids_not_found_are_printable(self): + + def check_exc_format(method): + try: + method(self.context, 'fake') + except Exception as exc: + self.assertTrue('fake' in unicode(exc)) + + check_exc_format(db.get_ec2_volume_id_by_uuid) + check_exc_format(db.get_volume_uuid_by_ec2_id) + check_exc_format(db.get_ec2_snapshot_id_by_uuid) + check_exc_format(db.get_snapshot_uuid_by_ec2_id) + check_exc_format(db.get_ec2_instance_id_by_uuid) + check_exc_format(db.get_instance_uuid_by_ec2_id) + def test_instance_get_all_by_filters(self): self.create_instances_with_args() self.create_instances_with_args() -- cgit