Skip to content

Commit

Permalink
Handle instances not being found in EC2 API responses.
Browse files Browse the repository at this point in the history
Resolves bug 1080406 where InstanceNotFound was raised with None
as the instance id.

Change-Id: I805a9c8893f51ab22426e606ce260a04113f26e5
  • Loading branch information
mikalstill committed Nov 20, 2012
1 parent 98032e8 commit c363984
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
4 changes: 3 additions & 1 deletion nova/api/ec2/ec2utils.py
Expand Up @@ -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)
Expand Down
12 changes: 12 additions & 0 deletions nova/tests/api/ec2/test_cloud.py
Expand Up @@ -302,6 +302,18 @@ def fake_disassociate_floating_ip(*args, **kwargs):
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,
Expand Down
9 changes: 9 additions & 0 deletions nova/tests/api/ec2/test_middleware.py
Expand Up @@ -116,6 +116,15 @@ def not_found(context):
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)
Expand Down

0 comments on commit c363984

Please sign in to comment.