Fixes NotFound exceptions to show the proper instance id in the ec2 api.
This commit is contained in:
commit
12ebed39bb
@ -399,18 +399,20 @@ class Executor(wsgi.Application):
|
||||
except exception.InstanceNotFound as ex:
|
||||
LOG.info(_('InstanceNotFound raised: %s'), unicode(ex),
|
||||
context=context)
|
||||
return self._error(req, context, type(ex).__name__, ex.message)
|
||||
ec2_id = ec2utils.id_to_ec2_id(ex.kwargs['instance_id'])
|
||||
message = ex.message % {'instance_id': ec2_id}
|
||||
return self._error(req, context, type(ex).__name__, message)
|
||||
except exception.VolumeNotFound as ex:
|
||||
LOG.info(_('VolumeNotFound raised: %s'), unicode(ex),
|
||||
context=context)
|
||||
ec2_id = ec2utils.id_to_ec2_vol_id(ex.volume_id)
|
||||
message = _('Volume %s not found') % ec2_id
|
||||
ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs['volume_id'])
|
||||
message = ex.message % {'volume_id': ec2_id}
|
||||
return self._error(req, context, type(ex).__name__, message)
|
||||
except exception.SnapshotNotFound as ex:
|
||||
LOG.info(_('SnapshotNotFound raised: %s'), unicode(ex),
|
||||
context=context)
|
||||
ec2_id = ec2utils.id_to_ec2_snap_id(ex.snapshot_id)
|
||||
message = _('Snapshot %s not found') % ec2_id
|
||||
ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs['snapshot_id'])
|
||||
message = ex.message % {'snapshot_id': ec2_id}
|
||||
return self._error(req, context, type(ex).__name__, message)
|
||||
except exception.NotFound as ex:
|
||||
LOG.info(_('NotFound raised: %s'), unicode(ex), context=context)
|
||||
|
@ -146,6 +146,7 @@ class NovaException(Exception):
|
||||
message = _("An unknown exception occurred.")
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.kwargs = kwargs
|
||||
try:
|
||||
self._error_string = self.message % kwargs
|
||||
|
||||
|
19
nova/tests/api/ec2/__init__.py
Normal file
19
nova/tests/api/ec2/__init__.py
Normal file
@ -0,0 +1,19 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2011 Openstack LLC.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
|
||||
from nova.tests import *
|
@ -21,10 +21,13 @@ import webob.dec
|
||||
import webob.exc
|
||||
|
||||
from nova.api import ec2
|
||||
from nova import context
|
||||
from nova import exception
|
||||
from nova import flags
|
||||
from nova import test
|
||||
from nova import utils
|
||||
|
||||
from xml.etree.ElementTree import fromstring as xml_to_tree
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
@ -83,3 +86,45 @@ class LockoutTestCase(test.TestCase):
|
||||
utils.advance_time_seconds(FLAGS.lockout_window * 60)
|
||||
self._send_bad_attempts('test', FLAGS.lockout_attempts - 1)
|
||||
self.assertFalse(self._is_locked_out('test'))
|
||||
|
||||
|
||||
class ExecutorTestCase(test.TestCase):
|
||||
def setUp(self):
|
||||
super(ExecutorTestCase, self).setUp()
|
||||
self.executor = ec2.Executor()
|
||||
|
||||
def _execute(self, invoke):
|
||||
class Fake(object):
|
||||
pass
|
||||
fake_ec2_request = Fake()
|
||||
fake_ec2_request.invoke = invoke
|
||||
|
||||
fake_wsgi_request = Fake()
|
||||
|
||||
fake_wsgi_request.environ = {
|
||||
'nova.context': context.get_admin_context(),
|
||||
'ec2.request': fake_ec2_request,
|
||||
}
|
||||
return self.executor(fake_wsgi_request)
|
||||
|
||||
def _extract_message(self, result):
|
||||
tree = xml_to_tree(result.body)
|
||||
return tree.findall('./Errors')[0].find('Error/Message').text
|
||||
|
||||
def test_instance_not_found(self):
|
||||
def not_found(context):
|
||||
raise exception.InstanceNotFound(instance_id=5)
|
||||
result = self._execute(not_found)
|
||||
self.assertIn('i-00000005', self._extract_message(result))
|
||||
|
||||
def test_snapshot_not_found(self):
|
||||
def not_found(context):
|
||||
raise exception.SnapshotNotFound(snapshot_id=5)
|
||||
result = self._execute(not_found)
|
||||
self.assertIn('snap-00000005', self._extract_message(result))
|
||||
|
||||
def test_volume_not_found(self):
|
||||
def not_found(context):
|
||||
raise exception.VolumeNotFound(volume_id=5)
|
||||
result = self._execute(not_found)
|
||||
self.assertIn('vol-00000005', self._extract_message(result))
|
@ -85,13 +85,6 @@ class CloudTestCase(test.TestCase):
|
||||
|
||||
self.stubs.Set(rpc, 'cast', finish_cast)
|
||||
|
||||
def tearDown(self):
|
||||
networks = db.project_get_networks(self.context, self.project_id,
|
||||
associate=False)
|
||||
for network in networks:
|
||||
db.network_disassociate(self.context, network['id'])
|
||||
super(CloudTestCase, self).tearDown()
|
||||
|
||||
def _create_key(self, name):
|
||||
# NOTE(vish): create depends on pool, so just call helper directly
|
||||
return cloud._gen_key(self.context, self.context.user_id, name)
|
||||
|
Loading…
Reference in New Issue
Block a user