OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 """Work around svn status difference between svn 1.5 and svn 1.6 | 135 """Work around svn status difference between svn 1.5 and svn 1.6 |
136 I don't know why but on Windows they are reversed. So sorts the items.""" | 136 I don't know why but on Windows they are reversed. So sorts the items.""" |
137 for i in xrange(len(out)): | 137 for i in xrange(len(out)): |
138 if len(out[i]) < 2: | 138 if len(out[i]) < 2: |
139 continue | 139 continue |
140 out[i] = [out[i][0]] + sorted([x[1:].strip() for x in out[i][1:]]) | 140 out[i] = [out[i][0]] + sorted([x[1:].strip() for x in out[i][1:]]) |
141 return out | 141 return out |
142 | 142 |
143 | 143 |
144 class GClientSmoke(GClientSmokeBase): | 144 class GClientSmoke(GClientSmokeBase): |
145 """Doesn't require neither svnserve nor git-daemon.""" | 145 """Doesn't require either svnserve nor git-daemon.""" |
| 146 @property |
| 147 def svn_base(self): |
| 148 return 'svn://random.server/svn/' |
| 149 |
| 150 @property |
| 151 def git_base(self): |
| 152 return 'git://random.server/git/' |
| 153 |
146 def testHelp(self): | 154 def testHelp(self): |
147 """testHelp: make sure no new command was added.""" | 155 """testHelp: make sure no new command was added.""" |
148 result = self.gclient(['help']) | 156 result = self.gclient(['help']) |
149 # Roughly, not too short, not too long. | 157 # Roughly, not too short, not too long. |
150 self.assertTrue(1000 < len(result[0]) and len(result[0]) < 2000) | 158 self.assertTrue(1000 < len(result[0]) and len(result[0]) < 2000) |
151 self.assertEquals(0, len(result[1])) | 159 self.assertEquals(0, len(result[1])) |
152 self.assertEquals(0, result[2]) | 160 self.assertEquals(0, result[2]) |
153 | 161 |
154 def testUnknown(self): | 162 def testUnknown(self): |
155 result = self.gclient(['foo']) | 163 result = self.gclient(['foo']) |
(...skipping 18 matching lines...) Expand all Loading... |
174 def testConfig(self): | 182 def testConfig(self): |
175 p = join(self.root_dir, '.gclient') | 183 p = join(self.root_dir, '.gclient') |
176 def test(cmd, expected): | 184 def test(cmd, expected): |
177 if os.path.exists(p): | 185 if os.path.exists(p): |
178 os.remove(p) | 186 os.remove(p) |
179 results = self.gclient(cmd) | 187 results = self.gclient(cmd) |
180 self.check(('', '', 0), results) | 188 self.check(('', '', 0), results) |
181 self.checkString(expected, open(p, 'rU').read()) | 189 self.checkString(expected, open(p, 'rU').read()) |
182 | 190 |
183 test(['config', self.svn_base + 'trunk/src/'], | 191 test(['config', self.svn_base + 'trunk/src/'], |
184 'solutions = [\n' | 192 ('solutions = [\n' |
185 ' { "name" : "src",\n' | 193 ' { "name" : "src",\n' |
186 ' "url" : "svn://127.0.0.1/svn/trunk/src",\n' | 194 ' "url" : "%strunk/src",\n' |
187 ' "custom_deps" : {\n' | 195 ' "custom_deps" : {\n' |
188 ' },\n' | 196 ' },\n' |
189 ' "safesync_url": "",\n' | 197 ' "safesync_url": "",\n' |
190 ' },\n' | 198 ' },\n' |
191 ']\n') | 199 ']\n') % self.svn_base) |
192 | 200 |
193 test(['config', self.git_base + 'repo_1', '--name', 'src'], | 201 test(['config', self.git_base + 'repo_1', '--name', 'src'], |
194 'solutions = [\n' | 202 ('solutions = [\n' |
195 ' { "name" : "src",\n' | 203 ' { "name" : "src",\n' |
196 ' "url" : "git://127.0.0.1/git/repo_1",\n' | 204 ' "url" : "%srepo_1",\n' |
197 ' "custom_deps" : {\n' | 205 ' "custom_deps" : {\n' |
198 ' },\n' | 206 ' },\n' |
199 ' "safesync_url": "",\n' | 207 ' "safesync_url": "",\n' |
200 ' },\n' | 208 ' },\n' |
201 ']\n') | 209 ']\n') % self.git_base) |
202 | 210 |
203 test(['config', 'foo', 'faa'], | 211 test(['config', 'foo', 'faa'], |
204 'solutions = [\n' | 212 'solutions = [\n' |
205 ' { "name" : "foo",\n' | 213 ' { "name" : "foo",\n' |
206 ' "url" : "foo",\n' | 214 ' "url" : "foo",\n' |
207 ' "custom_deps" : {\n' | 215 ' "custom_deps" : {\n' |
208 ' },\n' | 216 ' },\n' |
209 ' "safesync_url": "faa",\n' | 217 ' "safesync_url": "faa",\n' |
210 ' },\n' | 218 ' },\n' |
211 ']\n') | 219 ']\n') |
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1068 | 1076 |
1069 class GClientSmokeFromCheckout(GClientSmokeBase): | 1077 class GClientSmokeFromCheckout(GClientSmokeBase): |
1070 # WebKit abuses this. It has a .gclient and a DEPS from a checkout. | 1078 # WebKit abuses this. It has a .gclient and a DEPS from a checkout. |
1071 def setUp(self): | 1079 def setUp(self): |
1072 super(GClientSmokeFromCheckout, self).setUp() | 1080 super(GClientSmokeFromCheckout, self).setUp() |
1073 self.enabled = self.FAKE_REPOS.set_up_svn() | 1081 self.enabled = self.FAKE_REPOS.set_up_svn() |
1074 os.rmdir(self.root_dir) | 1082 os.rmdir(self.root_dir) |
1075 if self.enabled: | 1083 if self.enabled: |
1076 usr, pwd = self.FAKE_REPOS.USERS[0] | 1084 usr, pwd = self.FAKE_REPOS.USERS[0] |
1077 check_call( | 1085 check_call( |
1078 ['svn', 'checkout', 'svn://127.0.0.1/svn/trunk/webkit', | 1086 ['svn', 'checkout', self.svn_base + '/trunk/webkit', |
1079 self.root_dir, '-q', | 1087 self.root_dir, '-q', |
1080 '--non-interactive', '--no-auth-cache', | 1088 '--non-interactive', '--no-auth-cache', |
1081 '--username', usr, '--password', pwd]) | 1089 '--username', usr, '--password', pwd]) |
1082 | 1090 |
1083 def testSync(self): | 1091 def testSync(self): |
1084 if not self.enabled: | 1092 if not self.enabled: |
1085 return | 1093 return |
1086 self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'], | 1094 self.parseGclient(['sync', '--deps', 'mac', '--jobs', '1'], |
1087 ['running', 'running']) | 1095 ['running', 'running']) |
1088 tree = self.mangle_svn_tree( | 1096 tree = self.mangle_svn_tree( |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1130 ('trunk/webkit@2', ''), | 1138 ('trunk/webkit@2', ''), |
1131 ('trunk/third_party/foo@1', 'foo/bar')) | 1139 ('trunk/third_party/foo@1', 'foo/bar')) |
1132 self.assertTree(tree) | 1140 self.assertTree(tree) |
1133 | 1141 |
1134 def testRevInfo(self): | 1142 def testRevInfo(self): |
1135 if not self.enabled: | 1143 if not self.enabled: |
1136 return | 1144 return |
1137 self.gclient(['sync', '--deps', 'mac']) | 1145 self.gclient(['sync', '--deps', 'mac']) |
1138 results = self.gclient(['revinfo', '--deps', 'mac']) | 1146 results = self.gclient(['revinfo', '--deps', 'mac']) |
1139 expected = ( | 1147 expected = ( |
1140 './: None\nfoo/bar: svn://127.0.0.1/svn/trunk/third_party/foo@1\n', | 1148 './: None\nfoo/bar: %strunk/third_party/foo@1\n' % self.svn_base, |
1141 '', 0) | 1149 '', 0) |
1142 self.check(expected, results) | 1150 self.check(expected, results) |
1143 # TODO(maruel): To be added after the refactor. | 1151 # TODO(maruel): To be added after the refactor. |
1144 #results = self.gclient(['revinfo', '--snapshot']) | 1152 #results = self.gclient(['revinfo', '--snapshot']) |
1145 #expected = ( | 1153 #expected = ( |
1146 # './: None\nfoo/bar: svn://127.0.0.1/svn/trunk/third_party/foo@1\n', | 1154 # './: None\nfoo/bar: %strunk/third_party/foo@1\n' % self.svn_base, |
1147 # '', 0) | 1155 # '', 0) |
1148 #self.check(expected, results) | 1156 #self.check(expected, results) |
1149 | 1157 |
1150 def testRest(self): | 1158 def testRest(self): |
1151 if not self.enabled: | 1159 if not self.enabled: |
1152 return | 1160 return |
1153 self.gclient(['sync']) | 1161 self.gclient(['sync']) |
1154 # TODO(maruel): This is incorrect, it should run on ./ too. | 1162 # TODO(maruel): This is incorrect, it should run on ./ too. |
1155 self.parseGclient( | 1163 self.parseGclient( |
1156 ['cleanup', '--deps', 'mac', '--verbose', '--jobs', '1'], | 1164 ['cleanup', '--deps', 'mac', '--verbose', '--jobs', '1'], |
1157 [('running', join(self.root_dir, 'foo', 'bar'))]) | 1165 [('running', join(self.root_dir, 'foo', 'bar'))]) |
1158 self.parseGclient( | 1166 self.parseGclient( |
1159 ['diff', '--deps', 'mac', '--verbose', '--jobs', '1'], | 1167 ['diff', '--deps', 'mac', '--verbose', '--jobs', '1'], |
1160 [('running', join(self.root_dir, 'foo', 'bar'))]) | 1168 [('running', join(self.root_dir, 'foo', 'bar'))]) |
1161 | 1169 |
1162 | 1170 |
1163 if __name__ == '__main__': | 1171 if __name__ == '__main__': |
1164 if '-v' in sys.argv: | 1172 if '-v' in sys.argv: |
1165 logging.basicConfig(level=logging.DEBUG) | 1173 logging.basicConfig(level=logging.DEBUG) |
1166 | 1174 |
1167 if '-c' in sys.argv: | 1175 if '-c' in sys.argv: |
1168 COVERAGE = True | 1176 COVERAGE = True |
1169 sys.argv.remove('-c') | 1177 sys.argv.remove('-c') |
1170 if os.path.exists('.coverage'): | 1178 if os.path.exists('.coverage'): |
1171 os.remove('.coverage') | 1179 os.remove('.coverage') |
1172 os.environ['COVERAGE_FILE'] = os.path.join( | 1180 os.environ['COVERAGE_FILE'] = os.path.join( |
1173 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 1181 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
1174 '.coverage') | 1182 '.coverage') |
1175 unittest.main() | 1183 unittest.main() |
OLD | NEW |