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

Unified Diff: tests/trial_dir.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 | « tests/fake_repos.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/trial_dir.py
diff --git a/tests/trial_dir.py b/tests/trial_dir.py
new file mode 100755
index 0000000000000000000000000000000000000000..d75c5d71b987683ceeb63514d0f490d5adf979f8
--- /dev/null
+++ b/tests/trial_dir.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+# Copyright (c) 2010 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+import atexit
+import logging
+import os
+import sys
+import tempfile
+import unittest
+
+import gclient_utils
+
+
+class TrialDir(object):
+ """Manages a temporary directory.
+
+ On first object creation, TrialDir.TRIAL_ROOT will be set to a new temporary
+ directory created in /tmp or the equivalent. It will be deleted on process
+ exit unless TrialDir.SHOULD_LEAK is set to True.
+ """
+ # 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
+
+ # Main root directory.
+ TRIAL_ROOT = None
+
+ def __init__(self, subdir, leak=False):
+ self.leak = self.SHOULD_LEAK or leak
+ self.subdir = subdir
+ self.root_dir = None
+
+ def set_up(self):
+ """All late initialization comes here."""
+ # You can override self.TRIAL_ROOT.
+ if not self.TRIAL_ROOT:
+ # Was not yet initialized.
+ TrialDir.TRIAL_ROOT = os.path.realpath(tempfile.mkdtemp(prefix='trial'))
+ atexit.register(self._clean)
+ self.root_dir = os.path.join(TrialDir.TRIAL_ROOT, self.subdir)
+ gclient_utils.RemoveDirectory(self.root_dir)
+ os.makedirs(self.root_dir)
+
+ def tear_down(self):
+ """Cleans the trial subdirectory for this instance."""
+ if not self.leak:
+ logging.debug('Removing %s' % self.root_dir)
+ gclient_utils.RemoveDirectory(self.root_dir)
+ else:
+ logging.error('Leaking %s' % self.root_dir)
+ self.root_dir = None
+
+ @staticmethod
+ def _clean():
+ """Cleans the root trial directory."""
+ if not TrialDir.SHOULD_LEAK:
+ logging.debug('Removing %s' % TrialDir.TRIAL_ROOT)
+ gclient_utils.RemoveDirectory(TrialDir.TRIAL_ROOT)
+ else:
+ logging.error('Leaking %s' % TrialDir.TRIAL_ROOT)
+
+
+class TestCase(unittest.TestCase):
+ """Base unittest class that cleans off a trial directory in tearDown()."""
+ def setUp(self):
+ # Create a specific directory just for the test.
+ self.trial = TrialDir(self.id())
+ self.trial.set_up()
+
+ def tearDown(self):
+ self.trial.tear_down()
+
+ @property
+ def root_dir(self):
+ return self.trial.root_dir
+
+
+if '-l' in sys.argv:
+ # See SHOULD_LEAK definition in TrialDir for its purpose.
+ TrialDir.SHOULD_LEAK = True
+ print 'Leaking!'
+ sys.argv.remove('-l')
« no previous file with comments | « tests/fake_repos.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698