summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-11-21 18:23:54 +0000
committerGerrit Code Review <review@openstack.org>2012-11-21 18:23:54 +0000
commit5582d203b77741a005687a87673d9fce11b5ee09 (patch)
tree94db2b92daae343a37298b023769e12985b7511a
parent2622f40af702ddaa76fd6fa8519f6f2438f85da8 (diff)
parentc3639847011566f39a7bd08e29bab4a72847a333 (diff)
Merge "Handle instances not being found in EC2 API responses."
-rw-r--r--nova/api/ec2/ec2utils.py4
-rw-r--r--nova/tests/api/ec2/test_cloud.py12
-rw-r--r--nova/tests/api/ec2/test_middleware.py9
3 files changed, 24 insertions, 1 deletions
diff --git a/nova/api/ec2/ec2utils.py b/nova/api/ec2/ec2utils.py
index d5beb017f..1c2ceea6f 100644
--- a/nova/api/ec2/ec2utils.py
+++ b/nova/api/ec2/ec2utils.py
@@ -127,7 +127,9 @@ def id_to_ec2_id(instance_id, template='i-%08x'):
def id_to_ec2_inst_id(instance_id):
"""Get or create an ec2 instance ID (i-[base 16 number]) from uuid."""
- if uuidutils.is_uuid_like(instance_id):
+ if instance_id is None:
+ return None
+ elif uuidutils.is_uuid_like(instance_id):
ctxt = context.get_admin_context()
int_id = get_int_id_from_instance_uuid(ctxt, instance_id)
return id_to_ec2_id(int_id)
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index fdd8fc90d..64cdb0610 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -302,6 +302,18 @@ class CloudTestCase(test.TestCase):
self.cloud.disassociate_address,
self.context, public_ip=address)
+ def test_disassociate_unassociated_address(self):
+ address = "10.10.10.10"
+ db.floating_ip_create(self.context,
+ {'address': address,
+ 'pool': 'nova'})
+ self.cloud.allocate_address(self.context)
+ self.cloud.describe_addresses(self.context)
+ self.assertRaises(exception.InstanceNotFound,
+ self.cloud.disassociate_address,
+ self.context, public_ip=address)
+ db.floating_ip_destroy(self.context, address)
+
def test_describe_security_groups(self):
"""Makes sure describe_security_groups works and filters results."""
sec = db.security_group_create(self.context,
diff --git a/nova/tests/api/ec2/test_middleware.py b/nova/tests/api/ec2/test_middleware.py
index 77999e053..f50689028 100644
--- a/nova/tests/api/ec2/test_middleware.py
+++ b/nova/tests/api/ec2/test_middleware.py
@@ -116,6 +116,15 @@ class ExecutorTestCase(test.TestCase):
result = self._execute(not_found)
self.assertIn('i-00000005', self._extract_message(result))
+ def test_instance_not_found_none(self):
+ def not_found(context):
+ raise exception.InstanceNotFound(instance_id=None)
+
+ # NOTE(mikal): we want no exception to be raised here, which was what
+ # was happening in bug/1080406
+ result = self._execute(not_found)
+ self.assertIn('None', self._extract_message(result))
+
def test_snapshot_not_found(self):
def not_found(context):
raise exception.SnapshotNotFound(snapshot_id=5)