From 7e4d4096122d50d4b50cecbf4095436670cafb9d Mon Sep 17 00:00:00 2001 From: Brant Knudson Date: Thu, 21 May 2015 12:39:32 -0500 Subject: [PATCH] Revert "Remove unused fixtures" Repropose this This reverts commit e7853b8909358a78b8ae86c075ee234467a0d82f. Change-Id: I7b21bb139ccf7379d6f1b26f1ecddaa43767a334 --- keystoneclient/tests/unit/utils.py | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/keystoneclient/tests/unit/utils.py b/keystoneclient/tests/unit/utils.py index 31b13d49a..b3405fbcb 100644 --- a/keystoneclient/tests/unit/utils.py +++ b/keystoneclient/tests/unit/utils.py @@ -160,3 +160,50 @@ class TestResponse(requests.Response): @property def text(self): return self.content + + +class DisableModuleFixture(fixtures.Fixture): + """A fixture to provide support for unloading/disabling modules.""" + + def __init__(self, module, *args, **kw): + super(DisableModuleFixture, self).__init__(*args, **kw) + self.module = module + self._finders = [] + self._cleared_modules = {} + + def tearDown(self): + super(DisableModuleFixture, self).tearDown() + for finder in self._finders: + sys.meta_path.remove(finder) + sys.modules.update(self._cleared_modules) + + def clear_module(self): + cleared_modules = {} + for fullname in sys.modules.keys(): + if (fullname == self.module or + fullname.startswith(self.module + '.')): + cleared_modules[fullname] = sys.modules.pop(fullname) + return cleared_modules + + def setUp(self): + """Ensure ImportError for the specified module.""" + + super(DisableModuleFixture, self).setUp() + + # Clear 'module' references in sys.modules + self._cleared_modules.update(self.clear_module()) + + finder = NoModuleFinder(self.module) + self._finders.append(finder) + sys.meta_path.insert(0, finder) + + +class NoModuleFinder(object): + """Disallow further imports of 'module'.""" + + def __init__(self, module): + self.module = module + + def find_module(self, fullname, path): + if fullname == self.module or fullname.startswith(self.module + '.'): + raise ImportError