From 8ca44bcbfa2aec0c7c84205dc08c81f711a22c5d Mon Sep 17 00:00:00 2001 From: Jason Gerard DeRose Date: Fri, 24 Oct 2008 16:02:26 -0600 Subject: Added tests.util.TempHome class for created a tempdir and setting os.environ['HOME'] to it; updated various unit tests for Env so they are run using a tempdir for home --- tests/test_ipalib/test_config.py | 32 ++++++++++++++++++++------------ tests/util.py | 16 ++++++++++++++-- 2 files changed, 34 insertions(+), 14 deletions(-) (limited to 'tests') diff --git a/tests/test_ipalib/test_config.py b/tests/test_ipalib/test_config.py index 67eedd141..01ff2f01a 100644 --- a/tests/test_ipalib/test_config.py +++ b/tests/test_ipalib/test_config.py @@ -27,7 +27,7 @@ from os import path import sys from tests.util import raises, setitem, delitem, ClassChecker from tests.util import getitem, setitem, delitem -from tests.util import TempDir +from tests.util import TempDir, TempHome from ipalib import config @@ -181,34 +181,42 @@ class test_Env(ClassChecker): _cls = config.Env + def new(self): + """ + Set os.environ['HOME'] to a tempdir. + + Returns tuple with new Env instance and the TempHome instance. + """ + home = TempHome() + return (self.cls(), home) + def test_init(self): """ Test the `ipalib.config.Env.__init__` method. """ - o = self.cls() + (o, home) = self.new() ipalib = path.dirname(path.abspath(config.__file__)) assert o.ipalib == ipalib assert o.site_packages == path.dirname(ipalib) assert o.script == path.abspath(sys.argv[0]) assert o.bin == path.dirname(path.abspath(sys.argv[0])) - assert o.home == os.environ['HOME'] - assert o.dot_ipa == path.join(os.environ['HOME'], '.ipa') + assert o.home == home.path + assert o.dot_ipa == home.join('.ipa') def bootstrap(self, **overrides): - o = self.cls() + (o, home) = self.new() o._bootstrap(**overrides) e = raises(StandardError, o._bootstrap) assert str(e) == 'Env._bootstrap() already called' - return o + return (o, home) def test_bootstrap(self): """ Test the `ipalib.config.Env._bootstrap` method. """ - dot_ipa = path.join(os.environ['HOME'], '.ipa') # Test defaults created by _bootstrap(): - o = self.cls() + (o, home) = self.new() assert 'in_tree' not in o assert 'context' not in o assert 'conf' not in o @@ -218,11 +226,11 @@ class test_Env(ClassChecker): assert o.conf == '/etc/ipa/default.conf' # Test overriding values created by _bootstrap() - o = self.bootstrap(in_tree='true', context='server') + (o, home) = self.bootstrap(in_tree='true', context='server') assert o.in_tree is True assert o.context == 'server' - assert o.conf == path.join(dot_ipa, 'server.conf') - o = self.bootstrap(conf='/my/wacky/whatever.conf') + assert o.conf == home.join('.ipa', 'server.conf') + (o, home) = self.bootstrap(conf='/my/wacky/whatever.conf') assert o.in_tree is False assert o.context == 'default' assert o.conf == '/my/wacky/whatever.conf' @@ -237,7 +245,7 @@ class test_Env(ClassChecker): override = dict( (k, u' %s ' % v) for (k, v) in kw.items() ) - o = self.cls() + (o, home) = self.new() for key in kw: assert key not in o o._bootstrap(**override) diff --git a/tests/util.py b/tests/util.py index a813903ae..1cbc4e312 100644 --- a/tests/util.py +++ b/tests/util.py @@ -42,8 +42,9 @@ class TempDir(object): path = property(__get_path) def rmtree(self): - shutil.rmtree(self.path) - self.__path = None + if self.__path is not None: + shutil.rmtree(self.path) + self.__path = None def makedirs(self, *parts): d = self.join(*parts) @@ -67,6 +68,17 @@ class TempDir(object): self.rmtree() +class TempHome(TempDir): + def __init__(self): + super(TempHome, self).__init__() + self.__home = os.environ['HOME'] + os.environ['HOME'] = self.path + + def rmtree(self): + os.environ['HOME'] = self.__home + super(TempHome, self).rmtree() + + class ExceptionNotRaised(Exception): """ Exception raised when an *expected* exception is *not* raised during a -- cgit