summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Harris <rconradharris@gmail.com>2012-03-21 20:14:39 +0000
committerRick Harris <rconradharris@gmail.com>2012-03-21 20:14:39 +0000
commit521108d5b91d7a7aa2ff1e594f3dc48d0c2a7311 (patch)
tree7ced572cdcbd63082c41fcb3764a4fe3a59e189a
parent4944a612e0926cfe542e0cb146cc9fabf70256f6 (diff)
Fail-fast for invalid read_deleted values
Fixes bug 961588 Change-Id: Ib02d89485cdf4626698b959a2136841109cdc51f
-rw-r--r--nova/context.py18
-rw-r--r--nova/tests/test_context.py10
2 files changed, 25 insertions, 3 deletions
diff --git a/nova/context.py b/nova/context.py
index 78dca3ffc..160699a11 100644
--- a/nova/context.py
+++ b/nova/context.py
@@ -55,9 +55,6 @@ class RequestContext(object):
:param kwargs: Extra arguments that might be present, but we ignore
because they possibly came in from older rpc messages.
"""
- if read_deleted not in ('no', 'yes', 'only'):
- raise ValueError(_("read_deleted can only be one of 'no', "
- "'yes' or 'only', not %r") % read_deleted)
if kwargs:
LOG.warn(_('Arguments dropped when creating context: %s') %
str(kwargs))
@@ -85,6 +82,21 @@ class RequestContext(object):
if overwrite or not hasattr(local.store, 'context'):
self.update_store()
+ def _get_read_deleted(self):
+ return self._read_deleted
+
+ def _set_read_deleted(self, read_deleted):
+ if read_deleted not in ('no', 'yes', 'only'):
+ raise ValueError(_("read_deleted can only be one of 'no', "
+ "'yes' or 'only', not %r") % read_deleted)
+ self._read_deleted = read_deleted
+
+ def _del_read_deleted(self):
+ del self._read_deleted
+
+ read_deleted = property(_get_read_deleted, _set_read_deleted,
+ _del_read_deleted)
+
def update_store(self):
local.store.context = self
diff --git a/nova/tests/test_context.py b/nova/tests/test_context.py
index ea19dc1f1..977095910 100644
--- a/nova/tests/test_context.py
+++ b/nova/tests/test_context.py
@@ -38,6 +38,9 @@ class ContextTestCase(test.TestCase):
read_deleted='yes')
self.assertEquals(ctxt.read_deleted, 'yes')
+ ctxt.read_deleted = 'no'
+ self.assertEquals(ctxt.read_deleted, 'no')
+
def test_request_context_read_deleted_invalid(self):
self.assertRaises(ValueError,
context.RequestContext,
@@ -45,6 +48,13 @@ class ContextTestCase(test.TestCase):
'222',
read_deleted=True)
+ ctxt = context.RequestContext('111', '222')
+ self.assertRaises(ValueError,
+ setattr,
+ ctxt,
+ 'read_deleted',
+ True)
+
def test_extra_args_to_context_get_logged(self):
info = {}