summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/exception.py6
-rw-r--r--nova/tests/test_exception.py29
2 files changed, 35 insertions, 0 deletions
diff --git a/nova/exception.py b/nova/exception.py
index cfc237120..1f32b0671 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -161,6 +161,12 @@ class NovaException(Exception):
super(NovaException, self).__init__(message)
+ def format_message(self):
+ if self.__class__.__name__.endswith('_Remote'):
+ return self.args[0]
+ else:
+ return unicode(self)
+
class EC2APIError(NovaException):
message = _("Unknown")
diff --git a/nova/tests/test_exception.py b/nova/tests/test_exception.py
index 6f5a9909e..040b56b13 100644
--- a/nova/tests/test_exception.py
+++ b/nova/tests/test_exception.py
@@ -140,3 +140,32 @@ class NovaExceptionTestCase(test.TestCase):
kwargs = {}
self.assertEquals(exception._cleanse_dict(kwargs), {})
+
+ def test_format_message_local(self):
+ class FakeNovaException(exception.NovaException):
+ message = "some message"
+
+ exc = FakeNovaException()
+ self.assertEquals(unicode(exc), exc.format_message())
+
+ def test_format_message_remote(self):
+ class FakeNovaException_Remote(exception.NovaException):
+ message = "some message"
+
+ def __unicode__(self):
+ return u"print the whole trace"
+
+ exc = FakeNovaException_Remote()
+ self.assertEquals(unicode(exc), u"print the whole trace")
+ self.assertEquals(exc.format_message(), "some message")
+
+ def test_format_message_remote_error(self):
+ class FakeNovaException_Remote(exception.NovaException):
+ message = "some message %(somearg)s"
+
+ def __unicode__(self):
+ return u"print the whole trace"
+
+ self.flags(fatal_exception_format_errors=False)
+ exc = FakeNovaException_Remote(lame_arg='lame')
+ self.assertEquals(exc.format_message(), "some message %(somearg)s")