Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Unified Diff: tests/fake_repos.py

Issue 6625018: Add trial_dir to manage automatic trial directory creation and deletion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: fix typo Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/trial_dir.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/fake_repos.py
diff --git a/tests/fake_repos.py b/tests/fake_repos.py
index b9ef00b67dd4fd7b6225dd08227f949e4f5a4e78..4998575842e2323f7836619b9df0229d2d245f45 100755
--- a/tests/fake_repos.py
+++ b/tests/fake_repos.py
@@ -18,10 +18,9 @@ import subprocess
import sys
import tempfile
import time
-import unittest
-
-sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+# trial_dir must be first for non-system libraries.
+from tests import trial_dir
import scm
## Utility functions
@@ -230,14 +229,6 @@ class FakeReposBase(object):
populateSvn() and populateGit() need to be implemented by the subclass.
"""
-
- # When SHOULD_LEAK is set to True, temporary directories created while the
- # tests are running aren't deleted at the end of the tests. Expect failures
- # when running more than one test due to inter-test side-effects. Helps with
- # debugging.
- SHOULD_LEAK = False
- # Override if unhappy.
- TRIAL_DIR = None
# Hostname
NB_GIT_REPOS = 1
USERS = [
@@ -245,20 +236,14 @@ class FakeReposBase(object):
('user2@example.com', 'bar'),
]
- def __init__(self, trial_dir=None, leak=None, host=None):
+ def __init__(self, host=None):
global _FAKE_LOADED
if _FAKE_LOADED:
raise Exception('You can only start one FakeRepos at a time.')
_FAKE_LOADED = True
- # Quick hack.
- if '-v' in sys.argv:
- logging.basicConfig(level=logging.DEBUG)
- elif leak is not None:
- self.SHOULD_LEAK = leak
- self.host = host or '127.0.0.1'
- if trial_dir:
- self.TRIAL_DIR = trial_dir
+ self.trial = trial_dir.TrialDir('repos')
+ self.host = host or '127.0.0.1'
# Format is [ None, tree, tree, ...]
# i.e. revisions are 1-based.
self.svn_revs = [None]
@@ -269,8 +254,6 @@ class FakeReposBase(object):
self.git_hashes = {}
self.svnserve = None
self.gitdaemon = None
- self.common_init = False
- self.repos_dir = None
self.git_pid_file = None
self.git_root = None
self.svn_checkout = None
@@ -282,28 +265,24 @@ class FakeReposBase(object):
self.svn_port = 3690
self.git_port = 9418
- def trial_dir(self):
- if not self.TRIAL_DIR:
- self.TRIAL_DIR = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), '_trial')
- return self.TRIAL_DIR
+ @property
+ def root_dir(self):
+ return self.trial.root_dir
def set_up(self):
- """All late initialization comes here.
-
- Note that it deletes all trial_dir() and not only repos_dir.
- """
+ """All late initialization comes here."""
self.cleanup_dirt()
- if not self.common_init:
- self.common_init = True
- self.repos_dir = os.path.join(self.trial_dir(), 'repos')
- self.git_root = join(self.repos_dir, 'git')
- self.svn_checkout = join(self.repos_dir, 'svn_checkout')
- self.svn_repo = join(self.repos_dir, 'svn')
- add_kill()
- rmtree(self.trial_dir())
- os.makedirs(self.repos_dir)
- atexit.register(self.tear_down)
+ if not self.root_dir:
+ try:
+ add_kill()
+ # self.root_dir is not set before this call.
+ self.trial.set_up()
+ self.git_root = join(self.root_dir, 'git')
+ self.svn_checkout = join(self.root_dir, 'svn_checkout')
+ self.svn_repo = join(self.root_dir, 'svn')
+ finally:
+ # Registers cleanup.
+ atexit.register(self.tear_down)
def cleanup_dirt(self):
"""For each dirty repository, destroy it."""
@@ -318,9 +297,9 @@ class FakeReposBase(object):
"""Kills the servers and delete the directories."""
self.tear_down_svn()
self.tear_down_git()
- if not self.SHOULD_LEAK:
- logging.debug('Removing %s' % self.trial_dir())
- rmtree(self.trial_dir())
+ # This deletes the directories.
+ self.trial.tear_down()
+ self.trial = None
def tear_down_svn(self):
if self.svnserve:
@@ -328,7 +307,7 @@ class FakeReposBase(object):
self.svnserve.kill()
self.wait_for_port_to_free(self.svn_port)
self.svnserve = None
- if not self.SHOULD_LEAK:
+ if not self.trial.SHOULD_LEAK:
logging.debug('Removing %s' % self.svn_repo)
rmtree(self.svn_repo)
logging.debug('Removing %s' % self.svn_checkout)
@@ -349,7 +328,7 @@ class FakeReposBase(object):
kill_pid(pid)
self.git_pid_file = None
self.wait_for_port_to_free(self.git_port)
- if not self.SHOULD_LEAK:
+ if not self.trial.SHOULD_LEAK:
logging.debug('Removing %s' % self.git_root)
rmtree(self.git_root)
else:
@@ -392,7 +371,7 @@ class FakeReposBase(object):
write(join(self.svn_repo, 'conf', 'passwd'), text)
# Start the daemon.
- cmd = ['svnserve', '-d', '--foreground', '-r', self.repos_dir]
+ cmd = ['svnserve', '-d', '--foreground', '-r', self.root_dir]
if self.host == '127.0.0.1':
cmd.append('--listen-host=' + self.host)
self.check_port_is_free(self.svn_port)
@@ -420,12 +399,12 @@ class FakeReposBase(object):
cmd = ['git', 'daemon',
'--export-all',
'--reuseaddr',
- '--base-path=' + self.repos_dir,
+ '--base-path=' + self.root_dir,
'--pid-file=' + self.git_pid_file.name]
if self.host == '127.0.0.1':
cmd.append('--listen=' + self.host)
self.check_port_is_free(self.git_port)
- self.gitdaemon = Popen(cmd, cwd=self.repos_dir)
+ self.gitdaemon = Popen(cmd, cwd=self.root_dir)
self.wait_for_port_to_bind(self.git_port, self.gitdaemon)
self.git_dirty = False
return True
@@ -714,37 +693,22 @@ hooks = [
})
-class FakeReposTestBase(unittest.TestCase):
+class FakeReposTestBase(trial_dir.TestCase):
"""This is vaguely inspired by twisted."""
-
- # Replace this in your subclass.
- CLASS_ROOT_DIR = None
-
# static FakeRepos instance. Lazy loaded.
FAKE_REPOS = None
# Override if necessary.
FAKE_REPOS_CLASS = FakeRepos
- def __init__(self, *args, **kwargs):
- unittest.TestCase.__init__(self, *args, **kwargs)
+ def setUp(self):
+ super(FakeReposTestBase, self).setUp()
if not FakeReposTestBase.FAKE_REPOS:
# Lazy create the global instance.
FakeReposTestBase.FAKE_REPOS = self.FAKE_REPOS_CLASS()
-
- def setUp(self):
- unittest.TestCase.setUp(self)
- self.FAKE_REPOS.set_up()
-
- # Remove left overs and start fresh.
- if not self.CLASS_ROOT_DIR:
- self.CLASS_ROOT_DIR = join(self.FAKE_REPOS.trial_dir(), 'smoke')
- self.root_dir = join(self.CLASS_ROOT_DIR, self.id())
- rmtree(self.root_dir)
- os.makedirs(self.root_dir)
-
- def tearDown(self):
- if not self.FAKE_REPOS.SHOULD_LEAK:
- rmtree(self.root_dir)
+ # No need to call self.FAKE_REPOS.setUp(), it will be called by the child
+ # class.
+ # Do not define tearDown(), since super's version does the right thing and
+ # FAKE_REPOS is kept across tests.
@property
def svn_base(self):
@@ -824,23 +788,16 @@ class FakeReposTestBase(unittest.TestCase):
def main(argv):
fake = FakeRepos()
- print 'Using %s' % fake.trial_dir()
+ print 'Using %s' % fake.root_dir
try:
fake.set_up_svn()
fake.set_up_git()
print('Fake setup, press enter to quit or Ctrl-C to keep the checkouts.')
sys.stdin.readline()
except KeyboardInterrupt:
- fake.SHOULD_LEAK = True
+ trial_dir.TrialDir.SHOULD_LEAK.leak = True
return 0
-if '-l' in sys.argv:
- # See SHOULD_LEAK definition in FakeReposBase for its purpose.
- FakeReposBase.SHOULD_LEAK = True
- print 'Leaking!'
- sys.argv.remove('-l')
-
-
if __name__ == '__main__':
sys.exit(main(sys.argv))
« no previous file with comments | « no previous file | tests/trial_dir.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698