ensure we reset contexts when fixture is used
Previously using the ClearRequestContext fixture only reset contexts on fixture teardown. If *all* tests in a test suite use this fixture, this is fine. However if any tests do not, it means you might start with a carry over context from previous tests. Using this fixture means you really wanted a clean slate, so fix it so that you get a clean state when you get started as well as when you finish. Change-Id: I5e6f7bc2866fe66f269c7d5e1f36c711151489c2 Closes-Bug: #1428728
This commit is contained in:
parent
205479f254
commit
1c4757a9fb
@ -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):
|
||||
|
@ -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())
|
||||
|
Loading…
Reference in New Issue
Block a user