make sure proper exceptions are raised for ec2 id conversion and add tests
This commit is contained in:
parent
5f2bfe56cf
commit
3b0b69ddc0
@ -972,7 +972,7 @@ class ImageCommands(object):
|
||||
try:
|
||||
internal_id = ec2utils.ec2_id_to_id(old_image_id)
|
||||
image = self.image_service.show(context, internal_id)
|
||||
except exception.NotFound:
|
||||
except (exception.InvalidEc2Id, exception.ImageNotFound):
|
||||
image = self.image_service.show_by_name(context, old_image_id)
|
||||
return image['id']
|
||||
|
||||
|
@ -906,7 +906,7 @@ class CloudController(object):
|
||||
try:
|
||||
internal_id = ec2utils.ec2_id_to_id(ec2_id)
|
||||
return self.image_service.show(context, internal_id)
|
||||
except ValueError:
|
||||
except (exception.InvalidEc2Id, exception.ImageNotFound):
|
||||
try:
|
||||
return self.image_service.show_by_name(context, ec2_id)
|
||||
except exception.NotFound:
|
||||
|
@ -21,7 +21,10 @@ from nova import exception
|
||||
|
||||
def ec2_id_to_id(ec2_id):
|
||||
"""Convert an ec2 ID (i-[base 16 number]) to an instance id (int)"""
|
||||
return int(ec2_id.split('-')[-1], 16)
|
||||
try:
|
||||
return int(ec2_id.split('-')[-1], 16)
|
||||
except ValueError:
|
||||
raise exception.InvalidEc2Id(ec2_id=ec2_id)
|
||||
|
||||
|
||||
def id_to_ec2_id(instance_id, template='i-%08x'):
|
||||
|
@ -244,6 +244,10 @@ class InstanceUnacceptable(Invalid):
|
||||
message = _("Instance %(instance_id)s is unacceptable") + ": %(reason)s"
|
||||
|
||||
|
||||
class InvalidEc2Id(Invalid):
|
||||
message = _("Ec2 id %(ec2_id)s is unacceptable.")
|
||||
|
||||
|
||||
class NotFound(NovaException):
|
||||
message = _("Resource could not be found.")
|
||||
|
||||
|
@ -28,10 +28,12 @@ import StringIO
|
||||
import webob
|
||||
|
||||
from nova import context
|
||||
from nova import exception
|
||||
from nova import test
|
||||
from nova.api import ec2
|
||||
from nova.api.ec2 import cloud
|
||||
from nova.api.ec2 import apirequest
|
||||
from nova.api.ec2 import cloud
|
||||
from nova.api.ec2 import ec2utils
|
||||
from nova.auth import manager
|
||||
|
||||
|
||||
@ -101,6 +103,21 @@ class XmlConversionTestCase(test.TestCase):
|
||||
self.assertEqual(conv('-0'), 0)
|
||||
|
||||
|
||||
class Ec2utilsTestCase(test.TestCase):
|
||||
def test_ec2_id_to_id(self):
|
||||
self.assertEqual(ec2utils.ec2_id_to_id('i-0000001e'), 30)
|
||||
self.assertEqual(ec2utils.ec2_id_to_id('ami-1d'), 29)
|
||||
|
||||
def test_bad_ec2_id(self):
|
||||
self.assertRaises(exception.InvalidEc2Id,
|
||||
ec2utils.ec2_id_to_id,
|
||||
'badone')
|
||||
|
||||
def test_id_to_ec2_id(self):
|
||||
self.assertEqual(ec2utils.id_to_ec2_id(30), 'i-0000001e')
|
||||
self.assertEqual(ec2utils.id_to_ec2_id(29, 'ami-%08x'), 'ami-0000001d')
|
||||
|
||||
|
||||
class ApiEc2TestCase(test.TestCase):
|
||||
"""Unit test for the cloud controller on an EC2 API"""
|
||||
def setUp(self):
|
||||
|
@ -17,9 +17,9 @@
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
from nova import exception
|
||||
from nova import test
|
||||
from nova import utils
|
||||
from nova import exception
|
||||
|
||||
|
||||
class ExecuteTestCase(test.TestCase):
|
||||
|
Loading…
x
Reference in New Issue
Block a user