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

Side by Side Diff: tests/gclient_smoketest.py

Issue 8174014: Stop modifiying requirements out of thread and generate it instead. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix the lack of constant ordering in GClientSmokeBoth.testMultiSolutionsJobs Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gclient_utils.py ('k') | tests/gclient_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Smoke tests for gclient.py. 6 """Smoke tests for gclient.py.
7 7
8 Shell out 'gclient' and run basic conformance tests. 8 Shell out 'gclient' and run basic conformance tests.
9 9
10 This test assumes GClientSmokeBase.URL_BASE is valid. 10 This test assumes GClientSmokeBase.URL_BASE is valid.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 cmd = cmd_base + cmd 46 cmd = cmd_base + cmd
47 process = subprocess.Popen(cmd, cwd=cwd, env=self.env, 47 process = subprocess.Popen(cmd, cwd=cwd, env=self.env,
48 stdout=subprocess.PIPE, stderr=subprocess.PIPE, 48 stdout=subprocess.PIPE, stderr=subprocess.PIPE,
49 shell=sys.platform.startswith('win')) 49 shell=sys.platform.startswith('win'))
50 (stdout, stderr) = process.communicate() 50 (stdout, stderr) = process.communicate()
51 logging.debug("XXX: %s\n%s\nXXX" % (' '.join(cmd), stdout)) 51 logging.debug("XXX: %s\n%s\nXXX" % (' '.join(cmd), stdout))
52 logging.debug("YYY: %s\n%s\nYYY" % (' '.join(cmd), stderr)) 52 logging.debug("YYY: %s\n%s\nYYY" % (' '.join(cmd), stderr))
53 return (stdout.replace('\r\n', '\n'), stderr.replace('\r\n', '\n'), 53 return (stdout.replace('\r\n', '\n'), stderr.replace('\r\n', '\n'),
54 process.returncode) 54 process.returncode)
55 55
56 def untangle(self, stdout):
57 tasks = {}
58 remaining = []
59 for line in stdout.splitlines(False):
60 m = re.match(r'^(\d)+>(.*)$', line)
61 if not m:
62 remaining.append(line)
63 else:
64 self.assertEquals([], remaining)
65 tasks.setdefault(int(m.group(1)), []).append(m.group(2))
66 out = []
67 for key in sorted(tasks.iterkeys()):
68 out.extend(tasks[key])
69 out.extend(remaining)
70 return '\n'.join(out)
71
56 def parseGclient(self, cmd, items, expected_stderr='', untangle=False): 72 def parseGclient(self, cmd, items, expected_stderr='', untangle=False):
57 """Parse gclient's output to make it easier to test. 73 """Parse gclient's output to make it easier to test.
58 If untangle is True, tries to sort out the output from parallel checkout.""" 74 If untangle is True, tries to sort out the output from parallel checkout."""
59 (stdout, stderr, returncode) = self.gclient(cmd) 75 (stdout, stderr, returncode) = self.gclient(cmd)
60 if untangle: 76 if untangle:
61 tasks = {} 77 stdout = self.untangle(stdout)
62 remaining = []
63 for line in stdout.splitlines(False):
64 m = re.match(r'^(\d)+>(.*)$', line)
65 if not m:
66 remaining.append(line)
67 else:
68 self.assertEquals([], remaining)
69 tasks.setdefault(int(m.group(1)), []).append(m.group(2))
70 out = []
71 for key in sorted(tasks.iterkeys()):
72 out.extend(tasks[key])
73 out.extend(remaining)
74 stdout = '\n'.join(out)
75 self.checkString(expected_stderr, stderr) 78 self.checkString(expected_stderr, stderr)
76 self.assertEquals(0, returncode) 79 self.assertEquals(0, returncode)
77 return self.checkBlock(stdout, items) 80 return self.checkBlock(stdout, items)
78 81
79 def splitBlock(self, stdout): 82 def splitBlock(self, stdout):
80 """Split gclient's output into logical execution blocks. 83 """Split gclient's output into logical execution blocks.
81 ___ running 'foo' at '/bar' 84 ___ running 'foo' at '/bar'
82 (...) 85 (...)
83 ___ running 'baz' at '/bar' 86 ___ running 'baz' at '/bar'
84 (...) 87 (...)
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 self.checkString(join('third_party', 'fpp'), out[0][2]) 606 self.checkString(join('third_party', 'fpp'), out[0][2])
604 self.checkString(join('third_party', 'prout'), out[0][3]) 607 self.checkString(join('third_party', 'prout'), out[0][3])
605 self.checkString('hi', out[1][1]) 608 self.checkString('hi', out[1][1])
606 self.assertEquals(4, len(out[0])) 609 self.assertEquals(4, len(out[0]))
607 self.assertEquals(2, len(out[1])) 610 self.assertEquals(2, len(out[1]))
608 611
609 # So verify it works with --verbose. 612 # So verify it works with --verbose.
610 out = self.parseGclient( 613 out = self.parseGclient(
611 ['status', '--deps', 'mac', '--verbose', '--jobs', '1'], 614 ['status', '--deps', 'mac', '--verbose', '--jobs', '1'],
612 [['running', join(self.root_dir, 'src')], 615 [['running', join(self.root_dir, 'src')],
616 ['running', join(self.root_dir, 'src', 'other')],
613 ['running', join(self.root_dir, 'src', 'third_party', 'fpp')], 617 ['running', join(self.root_dir, 'src', 'third_party', 'fpp')],
614 ['running', join(self.root_dir, 'src', 'other')],
615 ['running', join(self.root_dir, 'src', 'third_party', 'prout')]]) 618 ['running', join(self.root_dir, 'src', 'third_party', 'prout')]])
616 out = self.svnBlockCleanup(out) 619 out = self.svnBlockCleanup(out)
617 self.checkString('other', out[0][1]) 620 self.checkString('other', out[0][1])
618 self.checkString(join('third_party', 'fpp'), out[0][2]) 621 self.checkString(join('third_party', 'fpp'), out[0][2])
619 self.checkString(join('third_party', 'prout'), out[0][3]) 622 self.checkString(join('third_party', 'prout'), out[0][3])
620 self.checkString('hi', out[2][1]) 623 self.checkString('hi', out[1][1])
621 self.assertEquals(4, len(out[0])) 624 self.assertEquals(4, len(out[0]))
622 self.assertEquals(1, len(out[1])) 625 self.assertEquals(2, len(out[1]))
623 self.assertEquals(2, len(out[2])) 626 self.assertEquals(1, len(out[2]))
624 self.assertEquals(1, len(out[3])) 627 self.assertEquals(1, len(out[3]))
625 self.assertEquals(4, len(out)) 628 self.assertEquals(4, len(out))
626 629
627 # Revert implies --force implies running hooks without looking at pattern 630 # Revert implies --force implies running hooks without looking at pattern
628 # matching. 631 # matching.
629 # TODO(maruel): In general, gclient revert output is wrong. It should output 632 # TODO(maruel): In general, gclient revert output is wrong. It should output
630 # the file list after some ___ running 'svn status' 633 # the file list after some ___ running 'svn status'
631 results = self.gclient(['revert', '--deps', 'mac', '--jobs', '1']) 634 results = self.gclient(['revert', '--deps', 'mac', '--jobs', '1'])
632 out = self.splitBlock(results[0]) 635 out = self.splitBlock(results[0])
633 self.assertEquals(7, len(out)) 636 self.assertEquals(7, len(out))
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 ('trunk/third_party/foo@1', 'src/third_party/foo'), 1044 ('trunk/third_party/foo@1', 'src/third_party/foo'),
1042 ('trunk/other@2', 'src/other'))) 1045 ('trunk/other@2', 'src/other')))
1043 tree['src/file/other/DEPS'] = ( 1046 tree['src/file/other/DEPS'] = (
1044 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) 1047 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
1045 tree['src/git_hooked1'] = 'git_hooked1' 1048 tree['src/git_hooked1'] = 'git_hooked1'
1046 tree['src/git_hooked2'] = 'git_hooked2' 1049 tree['src/git_hooked2'] = 'git_hooked2'
1047 tree['src/svn_hooked1'] = 'svn_hooked1' 1050 tree['src/svn_hooked1'] = 'svn_hooked1'
1048 self.assertTree(tree) 1051 self.assertTree(tree)
1049 1052
1050 def testMultiSolutionsJobs(self): 1053 def testMultiSolutionsJobs(self):
1051 print >> sys.stderr, (
1052 'Warning: testMultiSolutionsJobs is temporarily disabled')
1053 return
1054 # unreachable code
1055 # pylint: disable=W0101
1056 if not self.enabled: 1054 if not self.enabled:
1057 return 1055 return
1058 self.gclient(['config', '--spec', 1056 self.gclient(['config', '--spec',
1059 'solutions=[' 1057 'solutions=['
1060 '{"name": "src",' 1058 '{"name": "src",'
1061 ' "url": "' + self.svn_base + 'trunk/src/"},' 1059 ' "url": "' + self.svn_base + 'trunk/src/"},'
1062 '{"name": "src-git",' 1060 '{"name": "src-git",'
1063 '"url": "' + self.git_base + 'repo_1"}]']) 1061 '"url": "' + self.git_base + 'repo_1"}]'])
1064 self.parseGclient(['sync', '--deps', 'mac', '--jobs', '8'], 1062 # There is no guarantee that the ordering will be consistent.
1065 ['running', 'running', 'running', 1063 (stdout, stderr, returncode) = self.gclient(
1066 # This is due to the way svn update is called for a single 1064 ['sync', '--deps', 'mac', '--jobs', '8'])
1067 # file when File() is used in a DEPS file. 1065 stdout = self.untangle(stdout)
1068 ('running', self.root_dir + '/src/file/other'), 1066 self.checkString('', stderr)
1069 'running', 'running', 'running', 'running', 'running', 'running', 1067 self.assertEquals(0, returncode)
1070 'running', 'running'], 1068 results = self.splitBlock(stdout)
1071 untangle=True) 1069 self.assertEquals(12, len(results))
M-A Ruel 2011/10/11 02:29:36 This verifies that all 12 steps went on and the tr
1072 tree = self.mangle_git_tree(('repo_1@2', 'src-git'), 1070 tree = self.mangle_git_tree(('repo_1@2', 'src-git'),
1073 ('repo_2@1', 'src/repo2'), 1071 ('repo_2@1', 'src/repo2'),
1074 ('repo_3@2', 'src/repo2/repo_renamed')) 1072 ('repo_3@2', 'src/repo2/repo_renamed'))
1075 tree.update(self.mangle_svn_tree( 1073 tree.update(self.mangle_svn_tree(
1076 ('trunk/src@2', 'src'), 1074 ('trunk/src@2', 'src'),
1077 ('trunk/third_party/foo@1', 'src/third_party/foo'), 1075 ('trunk/third_party/foo@1', 'src/third_party/foo'),
1078 ('trunk/other@2', 'src/other'))) 1076 ('trunk/other@2', 'src/other')))
1079 tree['src/file/other/DEPS'] = ( 1077 tree['src/file/other/DEPS'] = (
1080 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS']) 1078 self.FAKE_REPOS.svn_revs[2]['trunk/other/DEPS'])
1081 tree['src/git_hooked1'] = 'git_hooked1' 1079 tree['src/git_hooked1'] = 'git_hooked1'
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 1277
1280 if '-c' in sys.argv: 1278 if '-c' in sys.argv:
1281 COVERAGE = True 1279 COVERAGE = True
1282 sys.argv.remove('-c') 1280 sys.argv.remove('-c')
1283 if os.path.exists('.coverage'): 1281 if os.path.exists('.coverage'):
1284 os.remove('.coverage') 1282 os.remove('.coverage')
1285 os.environ['COVERAGE_FILE'] = os.path.join( 1283 os.environ['COVERAGE_FILE'] = os.path.join(
1286 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 1284 os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
1287 '.coverage') 1285 '.coverage')
1288 unittest.main() 1286 unittest.main()
OLDNEW
« no previous file with comments | « gclient_utils.py ('k') | tests/gclient_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698