OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 results = self.gclient(cmd) | 202 results = self.gclient(cmd) |
203 self.check(('', '', 0), results) | 203 self.check(('', '', 0), results) |
204 self.checkString(expected, open(p, 'rU').read()) | 204 self.checkString(expected, open(p, 'rU').read()) |
205 | 205 |
206 test(['config', self.svn_base + 'trunk/src/'], | 206 test(['config', self.svn_base + 'trunk/src/'], |
207 ('solutions = [\n' | 207 ('solutions = [\n' |
208 ' {\n' | 208 ' {\n' |
209 ' "name" : "src",\n' | 209 ' "name" : "src",\n' |
210 ' "url" : "%strunk/src",\n' | 210 ' "url" : "%strunk/src",\n' |
211 ' "deps_file" : "DEPS",\n' | 211 ' "deps_file" : "DEPS",\n' |
212 ' "managed" : True,\n' | 212 ' "managed" : False,\n' |
213 ' "custom_deps" : {},\n' | 213 ' "custom_deps" : {},\n' |
214 ' },\n' | 214 ' },\n' |
215 ']\n' | 215 ']\n' |
216 'cache_dir = None\n') % self.svn_base) | 216 'cache_dir = None\n') % self.svn_base) |
217 | 217 |
218 test(['config', self.git_base + 'repo_1', '--name', 'src'], | 218 test(['config', self.git_base + 'repo_1', '--name', 'src'], |
219 ('solutions = [\n' | 219 ('solutions = [\n' |
220 ' {\n' | 220 ' {\n' |
221 ' "name" : "src",\n' | 221 ' "name" : "src",\n' |
222 ' "url" : "%srepo_1",\n' | 222 ' "url" : "%srepo_1",\n' |
223 ' "deps_file" : "DEPS",\n' | 223 ' "deps_file" : "DEPS",\n' |
224 ' "managed" : True,\n' | 224 ' "managed" : False,\n' |
225 ' "custom_deps" : {},\n' | 225 ' "custom_deps" : {},\n' |
226 ' },\n' | 226 ' },\n' |
227 ']\n' | 227 ']\n' |
228 'cache_dir = None\n') % self.git_base) | 228 'cache_dir = None\n') % self.git_base) |
229 | 229 |
230 test(['config', 'foo', '--deps', 'blah'], | 230 test(['config', 'foo', '--deps', 'blah'], |
231 'solutions = [\n' | 231 'solutions = [\n' |
232 ' {\n' | 232 ' {\n' |
233 ' "name" : "foo",\n' | 233 ' "name" : "foo",\n' |
234 ' "url" : "foo",\n' | 234 ' "url" : "foo",\n' |
235 ' "deps_file" : "blah",\n' | 235 ' "deps_file" : "blah",\n' |
236 ' "managed" : True,\n' | 236 ' "managed" : False,\n' |
237 ' "custom_deps" : {},\n' | 237 ' "custom_deps" : {},\n' |
238 ' },\n' | 238 ' },\n' |
239 ']\n' | 239 ']\n' |
240 'cache_dir = None\n') | 240 'cache_dir = None\n') |
241 | 241 |
242 test(['config', '--spec', '["blah blah"]'], '["blah blah"]') | 242 test(['config', '--spec', '["blah blah"]'], '["blah blah"]') |
243 | 243 |
244 os.remove(p) | 244 os.remove(p) |
245 results = self.gclient(['config', 'foo', 'faa', 'fuu']) | 245 results = self.gclient(['config', 'foo', 'faa', 'fuu']) |
246 err = ('Usage: gclient.py config [options] [url]\n\n' | 246 err = ('Usage: gclient.py config [options] [url]\n\n' |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 os.mkdir(src) | 280 os.mkdir(src) |
281 res = self.gclient(['status', '--jobs', '1'], src) | 281 res = self.gclient(['status', '--jobs', '1'], src) |
282 self.checkBlock(res[0], [('running', deps), ('running', src)]) | 282 self.checkBlock(res[0], [('running', deps), ('running', src)]) |
283 | 283 |
284 | 284 |
285 class GClientSmokeGIT(GClientSmokeBase): | 285 class GClientSmokeGIT(GClientSmokeBase): |
286 def setUp(self): | 286 def setUp(self): |
287 super(GClientSmokeGIT, self).setUp() | 287 super(GClientSmokeGIT, self).setUp() |
288 self.enabled = self.FAKE_REPOS.set_up_git() | 288 self.enabled = self.FAKE_REPOS.set_up_git() |
289 | 289 |
290 def testSync(self): | 290 def testSyncManaged(self): |
291 if not self.enabled: | 291 if not self.enabled: |
292 return | 292 return |
293 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 293 self.gclient([ |
| 294 'config', self.git_base + 'repo_1', '--name', 'src', '--managed']) |
294 # Test unversioned checkout. | 295 # Test unversioned checkout. |
295 self.parseGclient( | 296 self.parseGclient( |
296 ['sync', '--deps', 'mac', '--jobs', '1'], | 297 ['sync', '--deps', 'mac', '--jobs', '8'], |
297 ['running', 'running']) | 298 ['running', 'running']) |
298 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must | 299 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must |
299 # add sync parsing to get the list of updated files. | 300 # add sync parsing to get the list of updated files. |
300 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 301 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
301 ('repo_2@1', 'src/repo2'), | 302 ('repo_2@1', 'src/repo2'), |
302 ('repo_3@2', 'src/repo2/repo_renamed')) | 303 ('repo_3@2', 'src/repo2/repo_renamed')) |
303 tree['src/git_hooked1'] = 'git_hooked1' | 304 tree['src/git_hooked1'] = 'git_hooked1' |
304 tree['src/git_hooked2'] = 'git_hooked2' | 305 tree['src/git_hooked2'] = 'git_hooked2' |
305 self.assertTree(tree) | 306 self.assertTree(tree) |
306 | 307 |
307 # Manually remove git_hooked1 before synching to make sure it's not | 308 # Manually remove git_hooked1 before synching to make sure it's not |
308 # recreated. | 309 # recreated. |
309 os.remove(join(self.root_dir, 'src', 'git_hooked1')) | 310 os.remove(join(self.root_dir, 'src', 'git_hooked1')) |
310 | 311 |
311 # Test incremental versioned sync: sync backward. | 312 # Test incremental versioned sync: sync backward. |
312 self.parseGclient( | 313 self.parseGclient( |
313 ['sync', '--jobs', '1', '--revision', | 314 ['sync', '--jobs', '1', '--revision', |
314 'src@' + self.githash('repo_1', 1), | 315 'src@' + self.githash('repo_1', 1), '--jobs', '1', |
315 '--deps', 'mac', '--delete_unversioned_trees'], | 316 '--deps', 'mac', '--delete_unversioned_trees'], |
316 ['deleting']) | 317 ['deleting']) |
317 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 318 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
318 ('repo_2@2', 'src/repo2'), | 319 ('repo_2@2', 'src/repo2'), |
319 ('repo_3@1', 'src/repo2/repo3'), | 320 ('repo_3@1', 'src/repo2/repo3'), |
320 ('repo_4@2', 'src/repo4')) | 321 ('repo_4@2', 'src/repo4')) |
321 tree['src/git_hooked2'] = 'git_hooked2' | 322 tree['src/git_hooked2'] = 'git_hooked2' |
322 self.assertTree(tree) | 323 self.assertTree(tree) |
323 # Test incremental sync: delete-unversioned_trees isn't there. | 324 # Test incremental sync: delete-unversioned_trees isn't there. |
324 self.parseGclient( | 325 self.parseGclient( |
325 ['sync', '--deps', 'mac', '--jobs', '1'], | 326 ['sync', '--deps', 'mac', '--jobs', '8'], |
326 ['running', 'running']) | 327 ['running', 'running']) |
327 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 328 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
328 ('repo_2@1', 'src/repo2'), | 329 ('repo_2@1', 'src/repo2'), |
329 ('repo_3@1', 'src/repo2/repo3'), | 330 ('repo_3@1', 'src/repo2/repo3'), |
330 ('repo_3@2', 'src/repo2/repo_renamed'), | 331 ('repo_3@2', 'src/repo2/repo_renamed'), |
331 ('repo_4@2', 'src/repo4')) | 332 ('repo_4@2', 'src/repo4')) |
332 tree['src/git_hooked1'] = 'git_hooked1' | 333 tree['src/git_hooked1'] = 'git_hooked1' |
333 tree['src/git_hooked2'] = 'git_hooked2' | 334 tree['src/git_hooked2'] = 'git_hooked2' |
334 self.assertTree(tree) | 335 self.assertTree(tree) |
335 | 336 |
(...skipping 23 matching lines...) Expand all Loading... |
359 self.parseGclient( | 360 self.parseGclient( |
360 ['sync', '--deps', 'mac', '--jobs', '1', | 361 ['sync', '--deps', 'mac', '--jobs', '1', |
361 '--revision', self.githash('repo_1', 1)], | 362 '--revision', self.githash('repo_1', 1)], |
362 []) | 363 []) |
363 tree = self.mangle_git_tree(('repo_1@1', 'src'), | 364 tree = self.mangle_git_tree(('repo_1@1', 'src'), |
364 ('repo_2@2', 'src/repo2'), | 365 ('repo_2@2', 'src/repo2'), |
365 ('repo_3@1', 'src/repo2/repo3'), | 366 ('repo_3@1', 'src/repo2/repo3'), |
366 ('repo_4@2', 'src/repo4')) | 367 ('repo_4@2', 'src/repo4')) |
367 self.assertTree(tree) | 368 self.assertTree(tree) |
368 | 369 |
369 def testSyncJobs(self): | |
370 if not self.enabled: | |
371 return | |
372 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | |
373 # Test unversioned checkout. | |
374 self.parseGclient( | |
375 ['sync', '--deps', 'mac', '--jobs', '8'], | |
376 ['running', 'running'], | |
377 untangle=True) | |
378 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must | |
379 # add sync parsing to get the list of updated files. | |
380 tree = self.mangle_git_tree(('repo_1@2', 'src'), | |
381 ('repo_2@1', 'src/repo2'), | |
382 ('repo_3@2', 'src/repo2/repo_renamed')) | |
383 tree['src/git_hooked1'] = 'git_hooked1' | |
384 tree['src/git_hooked2'] = 'git_hooked2' | |
385 self.assertTree(tree) | |
386 | |
387 # Manually remove git_hooked1 before synching to make sure it's not | |
388 # recreated. | |
389 os.remove(join(self.root_dir, 'src', 'git_hooked1')) | |
390 | |
391 # Test incremental versioned sync: sync backward. | |
392 # Use --jobs 1 otherwise the order is not deterministic. | |
393 self.parseGclient( | |
394 ['sync', '--revision', 'src@' + self.githash('repo_1', 1), | |
395 '--deps', 'mac', '--delete_unversioned_trees', '--jobs', '1'], | |
396 ['deleting'], | |
397 untangle=True) | |
398 tree = self.mangle_git_tree(('repo_1@1', 'src'), | |
399 ('repo_2@2', 'src/repo2'), | |
400 ('repo_3@1', 'src/repo2/repo3'), | |
401 ('repo_4@2', 'src/repo4')) | |
402 tree['src/git_hooked2'] = 'git_hooked2' | |
403 self.assertTree(tree) | |
404 # Test incremental sync: delete-unversioned_trees isn't there. | |
405 self.parseGclient( | |
406 ['sync', '--deps', 'mac', '--jobs', '8'], | |
407 ['running', 'running'], | |
408 untangle=True) | |
409 tree = self.mangle_git_tree(('repo_1@2', 'src'), | |
410 ('repo_2@1', 'src/repo2'), | |
411 ('repo_3@1', 'src/repo2/repo3'), | |
412 ('repo_3@2', 'src/repo2/repo_renamed'), | |
413 ('repo_4@2', 'src/repo4')) | |
414 tree['src/git_hooked1'] = 'git_hooked1' | |
415 tree['src/git_hooked2'] = 'git_hooked2' | |
416 self.assertTree(tree) | |
417 | |
418 def testRunHooks(self): | 370 def testRunHooks(self): |
419 if not self.enabled: | 371 if not self.enabled: |
420 return | 372 return |
421 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) | 373 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) |
422 self.gclient(['sync', '--deps', 'mac']) | 374 self.gclient(['sync', '--deps', 'mac']) |
423 tree = self.mangle_git_tree(('repo_1@2', 'src'), | 375 tree = self.mangle_git_tree(('repo_1@2', 'src'), |
424 ('repo_2@1', 'src/repo2'), | 376 ('repo_2@1', 'src/repo2'), |
425 ('repo_3@2', 'src/repo2/repo_renamed')) | 377 ('repo_3@2', 'src/repo2/repo_renamed')) |
426 tree['src/git_hooked1'] = 'git_hooked1' | 378 tree['src/git_hooked1'] = 'git_hooked1' |
427 tree['src/git_hooked2'] = 'git_hooked2' | 379 tree['src/git_hooked2'] = 'git_hooked2' |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 | 840 |
889 if '-c' in sys.argv: | 841 if '-c' in sys.argv: |
890 COVERAGE = True | 842 COVERAGE = True |
891 sys.argv.remove('-c') | 843 sys.argv.remove('-c') |
892 if os.path.exists('.coverage'): | 844 if os.path.exists('.coverage'): |
893 os.remove('.coverage') | 845 os.remove('.coverage') |
894 os.environ['COVERAGE_FILE'] = os.path.join( | 846 os.environ['COVERAGE_FILE'] = os.path.join( |
895 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 847 os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
896 '.coverage') | 848 '.coverage') |
897 unittest.main() | 849 unittest.main() |
OLD | NEW |