summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oslo_context/fixture.py12
-rw-r--r--oslo_context/tests/test_fixture.py16
2 files changed, 27 insertions, 1 deletions
diff --git a/oslo_context/fixture.py b/oslo_context/fixture.py
index 51822e8..a7bb0ff 100644
--- a/oslo_context/fixture.py
+++ b/oslo_context/fixture.py
@@ -16,10 +16,20 @@ from oslo_context import context
class ClearRequestContext(fixtures.Fixture):
- """Clears any cached RequestContext at the end of a test case."""
+ """Clears any cached RequestContext
+
+ This resets RequestContext at the beginning and end of tests that
+ use this fixture to ensure that we have a clean slate for running
+ tests, and that we leave a clean slate for other tests that might
+ run later in the same process.
+ """
def setUp(self):
super(ClearRequestContext, self).setUp()
+ # we need to clear both when we start, and when we finish,
+ # because there might be other tests running that don't handle
+ # this correctly.
+ self._remove_cached_context()
self.addCleanup(self._remove_cached_context)
def _remove_cached_context(self):
diff --git a/oslo_context/tests/test_fixture.py b/oslo_context/tests/test_fixture.py
index 7a5b3cc..e566b52 100644
--- a/oslo_context/tests/test_fixture.py
+++ b/oslo_context/tests/test_fixture.py
@@ -28,3 +28,19 @@ class ClearRequestContextTest(test_base.BaseTestCase):
self.assertIs(context.get_current(), ctx)
fixture.ClearRequestContext()._remove_cached_context()
self.assertIsNone(context.get_current())
+
+ def test_store_current_resets_correctly(self):
+ # By default a new context is stored.
+ ctx = context.RequestContext()
+
+ # the use of the fixture should put us in a reset state, not
+ # doing so is a bug because when this fixture is consumed by
+ # other test suites there is no guaruntee that all tests use
+ # this fixture.
+ self.useFixture(fixture.ClearRequestContext())
+ self.assertIsNone(context.get_current())
+
+ ctx = context.RequestContext()
+ self.assertIs(context.get_current(), ctx)
+ fixture.ClearRequestContext()._remove_cached_context()
+ self.assertIsNone(context.get_current())