Refactor Isolated Env to use in unit tests
Refactor the setup of the Environment and base test directories to allow the same settings to be applied to the unit tests. Change-Id: I554b4aa4f07fe4230c11d3ae62a77acbd66e7d84
This commit is contained in:
parent
d64f004bdb
commit
817bdf3059
@ -57,12 +57,58 @@ def _hash_test_id(test_id):
|
||||
return num % 10000
|
||||
|
||||
|
||||
class GerritHelpers(object):
|
||||
|
||||
class DirHelpers(object):
|
||||
def _dir(self, base, *args):
|
||||
"""Creates directory name from base name and other parameters."""
|
||||
return os.path.join(getattr(self, base + '_dir'), *args)
|
||||
|
||||
|
||||
class IsoEnvDir(DirHelpers, fixtures.Fixture):
|
||||
"""Created isolated env and associated directories"""
|
||||
|
||||
def __init__(self, base_dir=None):
|
||||
super(IsoEnvDir, self).setUp()
|
||||
|
||||
# set up directories for isolation
|
||||
if base_dir:
|
||||
self.base_dir = base_dir
|
||||
self.temp_dir = self._dir('base', 'tmp')
|
||||
if not os.path.exists(self.temp_dir):
|
||||
os.mkdir(self.temp_dir)
|
||||
self.addCleanup(shutil.rmtree, self.temp_dir)
|
||||
else:
|
||||
self.temp_dir = self.useFixture(fixtures.TempDir()).path
|
||||
|
||||
self.work_dir = self._dir('temp', 'work')
|
||||
self.home_dir = self._dir('temp', 'home')
|
||||
self.xdg_config_dir = self._dir('home', '.xdgconfig')
|
||||
for path in [self.home_dir, self.xdg_config_dir, self.work_dir]:
|
||||
if not os.path.exists(path):
|
||||
os.mkdir(path)
|
||||
|
||||
# ensure user proxy conf doesn't interfere with tests
|
||||
self.useFixture(fixtures.EnvironmentVariable('no_proxy', '*'))
|
||||
self.useFixture(fixtures.EnvironmentVariable('NO_PROXY', '*'))
|
||||
|
||||
# isolate tests from user and system git configuration
|
||||
self.useFixture(fixtures.EnvironmentVariable('HOME', self.home_dir))
|
||||
self.useFixture(
|
||||
fixtures.EnvironmentVariable('XDG_CONFIG_HOME',
|
||||
self.xdg_config_dir))
|
||||
self.useFixture(
|
||||
fixtures.EnvironmentVariable('GIT_CONFIG_NOSYSTEM', "1"))
|
||||
self.useFixture(
|
||||
fixtures.EnvironmentVariable('EMAIL', "you@example.com"))
|
||||
self.useFixture(
|
||||
fixtures.EnvironmentVariable('GIT_AUTHOR_NAME',
|
||||
"gitreview tester"))
|
||||
self.useFixture(
|
||||
fixtures.EnvironmentVariable('GIT_COMMITTER_NAME',
|
||||
"gitreview tester"))
|
||||
|
||||
|
||||
class GerritHelpers(DirHelpers):
|
||||
|
||||
def init_dirs(self):
|
||||
self.primary_dir = os.path.abspath(os.path.curdir)
|
||||
self.gerrit_dir = self._dir('primary', '.gerrit')
|
||||
@ -199,23 +245,8 @@ class BaseGitReviewTestCase(testtools.TestCase, GerritHelpers):
|
||||
self._run_gerrit_cli('create-project', '--empty-commit',
|
||||
'--name', 'test/test_project')
|
||||
|
||||
# ensure user proxy conf doesn't interfere with tests
|
||||
os.environ['no_proxy'] = os.environ['NO_PROXY'] = '*'
|
||||
|
||||
# isolate tests from user and system git configuration
|
||||
self.home_dir = self._dir('site', 'tmp', 'home')
|
||||
self.xdg_config_dir = self._dir('home', '.xdgconfig')
|
||||
os.environ['HOME'] = self.home_dir
|
||||
os.environ['XDG_CONFIG_HOME'] = self.xdg_config_dir
|
||||
os.environ['GIT_CONFIG_NOSYSTEM'] = "1"
|
||||
os.environ['EMAIL'] = "you@example.com"
|
||||
os.environ['GIT_AUTHOR_NAME'] = "gitreview tester"
|
||||
os.environ['GIT_COMMITTER_NAME'] = "gitreview tester"
|
||||
if not os.path.exists(self.home_dir):
|
||||
os.mkdir(self.home_dir)
|
||||
if not os.path.exists(self.xdg_config_dir):
|
||||
os.mkdir(self.xdg_config_dir)
|
||||
self.addCleanup(shutil.rmtree, self.home_dir)
|
||||
# setup isolated area to work under
|
||||
self.useFixture(IsoEnvDir(self.site_dir))
|
||||
|
||||
# prepare repository for the testing
|
||||
self._run_git('clone', self.project_uri)
|
||||
|
@ -24,6 +24,7 @@ import mock
|
||||
import testtools
|
||||
|
||||
from git_review import cmd
|
||||
from git_review.tests import IsoEnvDir
|
||||
from git_review.tests import utils
|
||||
|
||||
# Use of io.StringIO in python =< 2.7 requires all strings handled to be
|
||||
@ -76,17 +77,20 @@ class GitReviewConsole(testtools.TestCase, fixtures.TestWithFixtures):
|
||||
}]
|
||||
|
||||
def setUp(self):
|
||||
# will set up isolated env dir
|
||||
super(GitReviewConsole, self).setUp()
|
||||
|
||||
# ensure all tests get a separate git dir to work in to avoid
|
||||
# local git config from interfering
|
||||
self.tempdir = self.useFixture(fixtures.TempDir())
|
||||
iso_env = self.useFixture(IsoEnvDir())
|
||||
|
||||
self._run_git = functools.partial(utils.run_git,
|
||||
chdir=self.tempdir.path)
|
||||
chdir=iso_env.work_dir)
|
||||
|
||||
self.run_cmd_patcher = mock.patch('git_review.cmd.run_command_status')
|
||||
run_cmd_partial = functools.partial(
|
||||
cmd.run_command_status, GIT_WORK_TREE=self.tempdir.path,
|
||||
GIT_DIR=os.path.join(self.tempdir.path, '.git'))
|
||||
cmd.run_command_status, GIT_WORK_TREE=iso_env.work_dir,
|
||||
GIT_DIR=os.path.join(iso_env.work_dir, '.git'))
|
||||
self.run_cmd_mock = self.run_cmd_patcher.start()
|
||||
self.run_cmd_mock.side_effect = run_cmd_partial
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user