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

Unified Diff: tests/gclient_smoketest.py

Issue 2352002: Make FakeRepos more reusable. Make it work with 'coverage'. (Closed)
Patch Set: Created 10 years, 7 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/gclient_smoketest.py
diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py
index 2895a5ff62c301167208082b6099caaf840ee13c..93fec66021b2d069be86750f3b24732dc7bcc635 100755
--- a/tests/gclient_smoketest.py
+++ b/tests/gclient_smoketest.py
@@ -12,126 +12,40 @@ This test assumes GClientSmokeBase.URL_BASE is valid.
import logging
import os
-import pprint
import re
-import shutil
import subprocess
import sys
import unittest
-from fake_repos import rmtree, write, FakeRepos
-
-join = os.path.join
-
-SHOULD_LEAK = False
-UNITTEST_DIR = os.path.abspath(os.path.dirname(__file__))
-GCLIENT_PATH = join(os.path.dirname(UNITTEST_DIR), 'gclient')
-# all tests outputs goes there.
-TRIAL_DIR = join(UNITTEST_DIR, '_trial')
-# In case you want to use another machine to create the fake repos, e.g.
-# not on Windows.
-HOST = '127.0.0.1'
-FAKE = None
-
-
-def read_tree(tree_root):
- """Returns a dict of all the files in a tree."""
- tree = {}
- for root, dirs, files in os.walk(tree_root):
- for d in filter(lambda x: x.startswith('.'), dirs):
- dirs.remove(d)
- for f in [join(root, f) for f in files if not f.startswith('.')]:
- tree[f[len(tree_root) + 1:]] = open(join(root, f), 'rb').read()
- return tree
-
-
-def dict_diff(dict1, dict2):
- diff = {}
- for k, v in dict1.iteritems():
- if k not in dict2:
- diff[k] = v
- elif v != dict2[k]:
- diff[k] = (v, dict2[k])
- for k, v in dict2.iteritems():
- if k not in dict1:
- diff[k] = v
- return diff
-
-
-def mangle_svn_tree(*args):
- result = {}
- for old_root, new_root, tree in args:
- for k, v in tree.iteritems():
- if not k.startswith(old_root):
- continue
- result[join(new_root, k[len(old_root) + 1:])] = v
- return result
-
-
-def mangle_git_tree(*args):
- result = {}
- for new_root, tree in args:
- for k, v in tree.iteritems():
- result[join(new_root, k)] = v
- return result
-
-
-class GClientSmokeBase(unittest.TestCase):
- # This subversion repository contains a test repository.
- ROOT_DIR = join(TRIAL_DIR, 'smoke')
+from fake_repos import join, mangle_svn_tree, mangle_git_tree, write
+from fake_repos import FakeReposTestBase
+GCLIENT_PATH = join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+ 'gclient')
+COVERAGE = False
+
+
+class GClientSmokeBase(FakeReposTestBase):
def setUp(self):
- # Vaguely inspired by twisted.
+ FakeReposTestBase.setUp(self)
# Make sure it doesn't try to auto update when testing!
self.env = os.environ.copy()
self.env['DEPOT_TOOLS_UPDATE'] = '0'
- # Remove left overs
- self.root_dir = join(self.ROOT_DIR, self.id())
- rmtree(self.root_dir)
- if not os.path.exists(self.ROOT_DIR):
- os.mkdir(self.ROOT_DIR)
- os.mkdir(self.root_dir)
- self.svn_base = 'svn://%s/svn/' % HOST
- self.git_base = 'git://%s/git/' % HOST
-
- def tearDown(self):
- if not SHOULD_LEAK:
- rmtree(self.root_dir)
def gclient(self, cmd, cwd=None):
if not cwd:
cwd = self.root_dir
- process = subprocess.Popen([GCLIENT_PATH] + cmd, cwd=cwd, env=self.env,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
- shell=sys.platform.startswith('win'))
+ if COVERAGE:
+ # Don't use the wrapper script.
+ cmd_base = ['coverage', 'run', '-a', GCLIENT_PATH + '.py']
+ else:
+ cmd_base = [GCLIENT_PATH]
+ process = subprocess.Popen(cmd_base + cmd, cwd=cwd, env=self.env,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ shell=sys.platform.startswith('win'))
(stdout, stderr) = process.communicate()
return (stdout, stderr, process.returncode)
- def checkString(self, expected, result):
- if expected != result:
- # Strip the begining
- while expected and result and expected[0] == result[0]:
- expected = expected[1:]
- result = result[1:]
- # The exception trace makes it hard to read so dump it too.
- if '\n' in result:
- print result
- self.assertEquals(expected, result)
-
- def check(self, expected, results):
- self.checkString(expected[0], results[0])
- self.checkString(expected[1], results[1])
- self.assertEquals(expected[2], results[2])
-
- def assertTree(self, tree):
- actual = read_tree(self.root_dir)
- diff = dict_diff(tree, actual)
- if diff:
- logging.debug('Actual %s\n%s' % (self.root_dir, pprint.pformat(actual)))
- logging.debug('Expected\n%s' % pprint.pformat(tree))
- logging.debug('Diff\n%s' % pprint.pformat(diff))
- self.assertEquals(tree, actual)
-
class GClientSmoke(GClientSmokeBase):
def testHelp(self):
@@ -208,6 +122,10 @@ class GClientSmoke(GClientSmokeBase):
class GClientSmokeSVN(GClientSmokeBase):
+ def setUp(self):
+ GClientSmokeBase.setUp(self)
+ self.FAKE_REPOS.setUpSVN()
+
def testSync(self):
# TODO(maruel): safesync, multiple solutions, invalid@revisions,
# multiple revisions.
@@ -220,10 +138,11 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_svn_tree(
- (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
+ (join('trunk', 'src'), 'src', self.FAKE_REPOS.svn_revs[-1]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
- FAKE.svn_revs[1]),
- (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[1]),
+ (join('trunk', 'other'), join('src', 'other'),
+ self.FAKE_REPOS.svn_revs[2]),
)
tree[join('src', 'hooked1')] = 'hooked1'
self.assertTree(tree)
@@ -240,13 +159,14 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_svn_tree(
- (join('trunk', 'src'), 'src', FAKE.svn_revs[1]),
+ (join('trunk', 'src'), 'src', self.FAKE_REPOS.svn_revs[1]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'),
- FAKE.svn_revs[2]),
- (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
+ (join('trunk', 'other'), join('src', 'other'),
+ self.FAKE_REPOS.svn_revs[2]),
(join('trunk', 'third_party', 'foo'),
join('src', 'third_party', 'prout'),
- FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
)
self.assertTree(tree)
# Test incremental sync: delete-unversioned_trees isn't there.
@@ -257,15 +177,16 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_svn_tree(
- (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
+ (join('trunk', 'src'), 'src', self.FAKE_REPOS.svn_revs[-1]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'),
- FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
- FAKE.svn_revs[1]),
- (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[1]),
+ (join('trunk', 'other'), join('src', 'other'),
+ self.FAKE_REPOS.svn_revs[2]),
(join('trunk', 'third_party', 'foo'),
join('src', 'third_party', 'prout'),
- FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
)
tree[join('src', 'hooked1')] = 'hooked1'
self.assertTree(tree)
@@ -298,10 +219,11 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_svn_tree(
- (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
+ (join('trunk', 'src'), 'src', self.FAKE_REPOS.svn_revs[-1]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
- FAKE.svn_revs[1]),
- (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[1]),
+ (join('trunk', 'other'), join('src', 'other'),
+ self.FAKE_REPOS.svn_revs[2]),
)
tree[join('src', 'hooked1')] = 'hooked1'
tree[join('src', 'hooked2')] = 'hooked2'
@@ -347,13 +269,14 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_svn_tree(
- (join('trunk', 'src'), 'src', FAKE.svn_revs[1]),
+ (join('trunk', 'src'), 'src', self.FAKE_REPOS.svn_revs[1]),
(join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'),
- FAKE.svn_revs[2]),
- (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
+ (join('trunk', 'other'), join('src', 'other'),
+ self.FAKE_REPOS.svn_revs[2]),
(join('trunk', 'third_party', 'prout'),
join('src', 'third_party', 'prout'),
- FAKE.svn_revs[2]),
+ self.FAKE_REPOS.svn_revs[2]),
)
self.assertTree(tree)
@@ -386,24 +309,6 @@ class GClientSmokeSVN(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
- def testRunHooks(self):
- self.gclient(['config', self.svn_base + 'trunk/src/'])
- self.gclient(['sync', '--deps', 'mac'])
- results = self.gclient(['runhooks'])
- out = results[0].splitlines(False)
- self.assertEquals(4, len(out))
- self.assertEquals(out[0], '')
- self.assertTrue(re.match(r'^________ running \'.*?python -c '
- r'open\(\'src/hooked1\', \'w\'\)\.write\(\'hooked1\'\)\' in \'.*',
- out[1]))
- self.assertEquals(out[2], '')
- # runhooks runs all hooks even if not matching by design.
- self.assertTrue(re.match(r'^________ running \'.*?python -c '
- r'open\(\'src/hooked2\', \'w\'\)\.write\(\'hooked2\'\)\' in \'.*',
- out[3]))
- self.checkString('', results[1])
- self.assertEquals(0, results[2])
-
def testRunHooksDepsOs(self):
self.gclient(['config', self.svn_base + 'trunk/src/'])
self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
@@ -423,6 +328,10 @@ class GClientSmokeSVN(GClientSmokeBase):
class GClientSmokeGIT(GClientSmokeBase):
+ def setUp(self):
+ GClientSmokeBase.setUp(self)
+ self.FAKE_REPOS.setUpGIT()
+
def testSync(self):
# TODO(maruel): safesync, multiple solutions, invalid@revisions,
# multiple revisions.
@@ -436,9 +345,10 @@ class GClientSmokeGIT(GClientSmokeBase):
self.assertTrue(results[1].startswith('Switched to a new branch \''))
self.assertEquals(0, results[2])
tree = mangle_git_tree(
- ('src', FAKE.git_hashes['repo_1'][1][1]),
- (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]),
- (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
+ ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
+ (join('src', 'repo2'), self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
+ (join('src', 'repo2', 'repo_renamed'),
+ self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
)
tree[join('src', 'hooked1')] = 'hooked1'
tree[join('src', 'hooked2')] = 'hooked2'
@@ -449,7 +359,7 @@ class GClientSmokeGIT(GClientSmokeBase):
# Test incremental versioned sync: sync backward.
results = self.gclient(['sync', '--revision',
- 'src@' + FAKE.git_hashes['repo_1'][0][0],
+ 'src@' + self.FAKE_REPOS.git_hashes['repo_1'][0][0],
'--deps', 'mac', '--delete_unversioned_trees'])
logging.debug(results[0])
out = results[0].splitlines(False)
@@ -457,10 +367,11 @@ class GClientSmokeGIT(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_git_tree(
- ('src', FAKE.git_hashes['repo_1'][0][1]),
- (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]),
- (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]),
- (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]),
+ ('src', self.FAKE_REPOS.git_hashes['repo_1'][0][1]),
+ (join('src', 'repo2'), self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
+ (join('src', 'repo2', 'repo3'),
+ self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
+ (join('src', 'repo4'), self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
)
tree[join('src', 'hooked2')] = 'hooked2'
self.assertTree(tree)
@@ -472,11 +383,13 @@ class GClientSmokeGIT(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_git_tree(
- ('src', FAKE.git_hashes['repo_1'][1][1]),
- (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]),
- (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]),
- (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
- (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]),
+ ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
+ (join('src', 'repo2'), self.FAKE_REPOS.git_hashes['repo_2'][1][1]),
+ (join('src', 'repo2', 'repo3'),
+ self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
+ (join('src', 'repo2', 'repo_renamed'),
+ self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
+ (join('src', 'repo4'), self.FAKE_REPOS.git_hashes['repo_4'][1][1]),
)
tree[join('src', 'hooked1')] = 'hooked1'
tree[join('src', 'hooked2')] = 'hooked2'
@@ -504,9 +417,10 @@ class GClientSmokeGIT(GClientSmokeBase):
self.checkString('', results[1])
self.assertEquals(0, results[2])
tree = mangle_git_tree(
- ('src', FAKE.git_hashes['repo_1'][1][1]),
- (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]),
- (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
+ ('src', self.FAKE_REPOS.git_hashes['repo_1'][1][1]),
+ (join('src', 'repo2'), self.FAKE_REPOS.git_hashes['repo_2'][0][1]),
+ (join('src', 'repo2', 'repo_renamed'),
+ self.FAKE_REPOS.git_hashes['repo_3'][1][1]),
)
# TODO(maruel): http://crosbug.com/3583 This file should have been removed.
tree[join('src', 'repo2', 'hi')] = 'Hey!'
@@ -549,22 +463,20 @@ class GClientSmokeGIT(GClientSmokeBase):
'src/repo2/repo_renamed: %(base)srepo_3@%(hash3)s\n' %
{
'base': self.git_base,
- 'hash1': FAKE.git_hashes['repo_1'][1][0],
- 'hash2': FAKE.git_hashes['repo_2'][0][0],
- 'hash3': FAKE.git_hashes['repo_3'][1][0],
+ 'hash1': self.FAKE_REPOS.git_hashes['repo_1'][1][0],
+ 'hash2': self.FAKE_REPOS.git_hashes['repo_2'][0][0],
+ 'hash3': self.FAKE_REPOS.git_hashes['repo_3'][1][0],
})
self.check((out, '', 0), results)
if __name__ == '__main__':
- if '-v' in sys.argv:
- logging.basicConfig(level=logging.DEBUG)
- if '-l' in sys.argv:
- SHOULD_LEAK = True
- sys.argv.remove('-l')
- FAKE = FakeRepos(TRIAL_DIR, SHOULD_LEAK, True)
- try:
- FAKE.setUp()
- unittest.main()
- finally:
- FAKE.tearDown()
+ if '-c' in sys.argv:
+ COVERAGE = True
+ sys.argv.remove('-c')
+ if os.path.exists('.coverage'):
+ os.remove('.coverage')
+ os.environ['COVERAGE_FILE'] = os.path.join(
+ os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+ '.coverage')
+ unittest.main()
« 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