Index: tests/gclient_smoketest.py |
diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py |
index bd18aab95dcbd3109afa220e9c0f9219c167afdc..7f3491f066bb52fc9dedd393f610003aaccf0096 100755 |
--- a/tests/gclient_smoketest.py |
+++ b/tests/gclient_smoketest.py |
@@ -13,7 +13,6 @@ This test assumes GClientSmokeBase.URL_BASE is valid. |
import logging |
import os |
import pprint |
-import re |
import shutil |
import subprocess |
import sys |
@@ -107,20 +106,15 @@ class GClientSmokeBase(unittest.TestCase): |
(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]) |
+ def checkString(expected, result): |
+ if expected != result: |
+ while expected and result and expected[0] == result[0]: |
+ expected = expected[1:] |
+ result = result[1:] |
+ self.assertEquals(expected, result) |
+ checkString(expected[0], results[0]) |
+ checkString(expected[1], results[1]) |
self.assertEquals(expected[2], results[2]) |
def assertTree(self, tree): |
@@ -137,7 +131,7 @@ class GClientSmoke(GClientSmokeBase): |
def testCommands(self): |
"""This test is to make sure no new command was added.""" |
result = self.gclient(['help']) |
- self.assertEquals(1197, len(result[0])) |
+ self.assertEquals(3189, len(result[0])) |
self.assertEquals(0, len(result[1])) |
self.assertEquals(0, result[2]) |
@@ -158,13 +152,12 @@ class GClientSmoke(GClientSmokeBase): |
class GClientSmokeSVN(GClientSmokeBase): |
"""sync is the most important command. Hence test it more.""" |
def testSync(self): |
+ """Test pure gclient svn checkout, example of Chromium checkout""" |
self.gclient(['config', self.svn_base + 'trunk/src/']) |
# Test unversioned checkout. |
results = self.gclient(['sync', '--deps', 'mac']) |
logging.debug(results[0]) |
- out = results[0].splitlines(False) |
- self.assertEquals(17, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_svn_tree( |
(join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), |
@@ -172,19 +165,13 @@ class GClientSmokeSVN(GClientSmokeBase): |
FAKE.svn_revs[1]), |
(join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), |
) |
- tree[join('src', 'hooked1')] = 'hooked1' |
self.assertTree(tree) |
- # Manually remove hooked1 before synching to make sure it's not recreated. |
- os.remove(join(self.root_dir, 'src', 'hooked1')) |
- |
# Test incremental versioned sync: sync backward. |
results = self.gclient(['sync', '--revision', 'src@1', '--deps', 'mac', |
'--delete_unversioned_trees']) |
logging.debug(results[0]) |
- out = results[0].splitlines(False) |
- self.assertEquals(19, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_svn_tree( |
(join('trunk', 'src'), 'src', FAKE.svn_revs[1]), |
@@ -199,9 +186,7 @@ class GClientSmokeSVN(GClientSmokeBase): |
# Test incremental sync: delete-unversioned_trees isn't there. |
results = self.gclient(['sync', '--deps', 'mac']) |
logging.debug(results[0]) |
- out = results[0].splitlines(False) |
- self.assertEquals(21, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_svn_tree( |
(join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), |
@@ -214,35 +199,28 @@ class GClientSmokeSVN(GClientSmokeBase): |
join('src', 'third_party', 'prout'), |
FAKE.svn_revs[2]), |
) |
- tree[join('src', 'hooked1')] = 'hooked1' |
self.assertTree(tree) |
def testRevertAndStatus(self): |
self.gclient(['config', self.svn_base + 'trunk/src/']) |
- # Tested in testSync. |
- self.gclient(['sync', '--deps', 'mac']) |
+ results = self.gclient(['sync', '--deps', 'mac']) |
write(join(self.root_dir, 'src', 'third_party', 'foo', 'hi'), 'Hey!') |
results = self.gclient(['status']) |
out = results[0].splitlines(False) |
+ self.assertEquals(7, len(out)) |
self.assertEquals(out[0], '') |
self.assertTrue(out[1].startswith('________ running \'svn status\' in \'')) |
self.assertEquals(out[2], '? other') |
- self.assertEquals(out[3], '? hooked1') |
- self.assertEquals(out[4], '? third_party/foo') |
- self.assertEquals(out[5], '') |
- self.assertTrue(out[6].startswith('________ running \'svn status\' in \'')) |
- self.assertEquals(out[7], '? hi') |
- self.assertEquals(8, len(out)) |
+ self.assertEquals(out[3], '? third_party/foo') |
+ self.assertEquals(out[4], '') |
+ self.assertTrue(out[5].startswith('________ running \'svn status\' in \'')) |
+ self.assertEquals(out[6], '? hi') |
self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
- # Revert implies --force implies running hooks without looking at pattern |
- # matching. |
results = self.gclient(['revert']) |
- out = results[0].splitlines(False) |
- self.assertEquals(22, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_svn_tree( |
(join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), |
@@ -250,50 +228,26 @@ class GClientSmokeSVN(GClientSmokeBase): |
FAKE.svn_revs[1]), |
(join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), |
) |
- tree[join('src', 'hooked1')] = 'hooked1' |
- tree[join('src', 'hooked2')] = 'hooked2' |
self.assertTree(tree) |
results = self.gclient(['status']) |
out = results[0].splitlines(False) |
+ self.assertEquals(4, len(out)) |
self.assertEquals(out[0], '') |
self.assertTrue(out[1].startswith('________ running \'svn status\' in \'')) |
self.assertEquals(out[2], '? other') |
- self.assertEquals(out[3], '? hooked1') |
- self.assertEquals(out[4], '? hooked2') |
- self.assertEquals(out[5], '? third_party/foo') |
- self.assertEquals(6, len(out)) |
- 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(out[3], '? third_party/foo') |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
class GClientSmokeGIT(GClientSmokeBase): |
- def testSync(self): |
+ def testSyncGit(self): |
+ """Test pure gclient git checkout, example of Chromium OS checkout""" |
self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
# Test unversioned checkout. |
results = self.gclient(['sync', '--deps', 'mac']) |
- out = results[0].splitlines(False) |
- # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
- # add sync parsing to get the list of updated files. |
- self.assertEquals(13, len(out)) |
+ logging.debug(results[0]) |
self.assertTrue(results[1].startswith('Switched to a new branch \'')) |
self.assertEquals(0, results[2]) |
tree = mangle_git_tree( |
@@ -301,21 +255,14 @@ class GClientSmokeGIT(GClientSmokeBase): |
(join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]), |
(join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]), |
) |
- tree[join('src', 'hooked1')] = 'hooked1' |
- tree[join('src', 'hooked2')] = 'hooked2' |
self.assertTree(tree) |
- # Manually remove hooked1 before synching to make sure it's not recreated. |
- os.remove(join(self.root_dir, 'src', 'hooked1')) |
- |
# Test incremental versioned sync: sync backward. |
results = self.gclient(['sync', '--revision', |
'src@' + FAKE.git_hashes['repo_1'][0][0], |
'--deps', 'mac', '--delete_unversioned_trees']) |
logging.debug(results[0]) |
- out = results[0].splitlines(False) |
- self.assertEquals(20, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_git_tree( |
('src', FAKE.git_hashes['repo_1'][0][1]), |
@@ -323,14 +270,11 @@ class GClientSmokeGIT(GClientSmokeBase): |
(join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]), |
(join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]), |
) |
- tree[join('src', 'hooked2')] = 'hooked2' |
self.assertTree(tree) |
# Test incremental sync: delete-unversioned_trees isn't there. |
results = self.gclient(['sync', '--deps', 'mac']) |
logging.debug(results[0]) |
- out = results[0].splitlines(False) |
- self.assertEquals(25, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', results[1]) |
self.assertEquals(0, results[2]) |
tree = mangle_git_tree( |
('src', FAKE.git_hashes['repo_1'][1][1]), |
@@ -339,66 +283,42 @@ class GClientSmokeGIT(GClientSmokeBase): |
(join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]), |
(join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]), |
) |
- tree[join('src', 'hooked1')] = 'hooked1' |
- tree[join('src', 'hooked2')] = 'hooked2' |
self.assertTree(tree) |
def testRevertAndStatus(self): |
"""TODO(maruel): Remove this line once this test is fixed.""" |
self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
- # Tested in testSync. |
- self.gclient(['sync', '--deps', 'mac']) |
+ results = self.gclient(['sync', '--deps', 'mac']) |
write(join(self.root_dir, 'src', 'repo2', 'hi'), 'Hey!') |
results = self.gclient(['status']) |
out = results[0].splitlines(False) |
- # TODO(maruel): http://crosbug.com/3584 It should output the unversioned |
- # files. |
+ # TODO(maruel): THIS IS WRONG. |
self.assertEquals(0, len(out)) |
- # Revert implies --force implies running hooks without looking at pattern |
- # matching. |
results = self.gclient(['revert']) |
- out = results[0].splitlines(False) |
- # TODO(maruel): http://crosbug.com/3583 It just runs the hooks right now. |
- self.assertEquals(7, len(out)) |
- self.checkString('', results[1]) |
+ self.assertEquals('', 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]), |
) |
- # TODO(maruel): http://crosbug.com/3583 This file should have been removed. |
+ # TODO(maruel): THIS IS WRONG. |
tree[join('src', 'repo2', 'hi')] = 'Hey!' |
- tree[join('src', 'hooked1')] = 'hooked1' |
- tree[join('src', 'hooked2')] = 'hooked2' |
self.assertTree(tree) |
results = self.gclient(['status']) |
out = results[0].splitlines(False) |
- # TODO(maruel): http://crosbug.com/3584 It should output the unversioned |
- # files. |
+ # TODO(maruel): THIS IS WRONG. |
self.assertEquals(0, len(out)) |
- def testRunHooks(self): |
- self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
- self.gclient(['sync', '--deps', 'mac']) |
- results = self.gclient(['runhooks']) |
- logging.debug(results[0]) |
- 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]) |
+ |
+class GClientSmokeRevInfo(GClientSmokeBase): |
+ """revert is the second most important command. Hence test it more.""" |
+ def setUp(self): |
+ GClientSmokeBase.setUp(self) |
+ self.gclient(['config', self.URL_BASE]) |
if __name__ == '__main__': |