| 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. | 
| 11 """ | 11 """ | 
| 12 | 12 | 
| 13 import logging | 13 import logging | 
| 14 import os | 14 import os | 
| 15 import re | 15 import re | 
| 16 import subprocess | 16 import subprocess | 
| 17 import sys | 17 import sys | 
| 18 import unittest | 18 import unittest | 
| 19 | 19 | 
| 20 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 20 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 
| 21 sys.path.insert(0, ROOT_DIR) | 21 sys.path.insert(0, ROOT_DIR) | 
| 22 | 22 | 
| 23 from testing_support.fake_repos import join, write | 23 from testing_support.fake_repos import join, write | 
| 24 from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive | 24 from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive | 
|  | 25 # TODO(borenet): Uncomment these includes once | 
|  | 26 # gclient_scm.SCMWrapper._DeleteOrMove is enabled. | 
|  | 27 #from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive, \ | 
|  | 28 #                                       FakeRepoSkiaDEPS | 
| 25 | 29 | 
| 26 import gclient_utils | 30 | 
|  | 31 #import gclient_utils | 
|  | 32 #import scm as gclient_scm | 
| 27 | 33 | 
| 28 import subprocess2 | 34 import subprocess2 | 
| 29 | 35 | 
| 30 GCLIENT_PATH = os.path.join(ROOT_DIR, 'gclient') | 36 GCLIENT_PATH = os.path.join(ROOT_DIR, 'gclient') | 
| 31 COVERAGE = False | 37 COVERAGE = False | 
| 32 | 38 | 
| 33 | 39 | 
| 34 class GClientSmokeBase(FakeReposTestBase): | 40 class GClientSmokeBase(FakeReposTestBase): | 
| 35   def setUp(self): | 41   def setUp(self): | 
| 36     super(GClientSmokeBase, self).setUp() | 42     super(GClientSmokeBase, self).setUp() | 
| (...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 756       return | 762       return | 
| 757     self.gclient(['config', self.svn_base + 'trunk/src/']) | 763     self.gclient(['config', self.svn_base + 'trunk/src/']) | 
| 758     self.gclient(['sync']) | 764     self.gclient(['sync']) | 
| 759     # Cripple the checkout. | 765     # Cripple the checkout. | 
| 760     os.remove(join(self.root_dir, '.gclient_entries')) | 766     os.remove(join(self.root_dir, '.gclient_entries')) | 
| 761     src = join(self.root_dir, 'src') | 767     src = join(self.root_dir, 'src') | 
| 762     res = self.gclient(['sync', '--jobs', '1'], src) | 768     res = self.gclient(['sync', '--jobs', '1'], src) | 
| 763     self.checkBlock(res[0], | 769     self.checkBlock(res[0], | 
| 764                     ['running', 'running', 'running']) | 770                     ['running', 'running', 'running']) | 
| 765 | 771 | 
| 766   def testUnversionedRepository(self): | 772   # TODO(borenet): Uncomment this test once | 
| 767     # Check that gclient automatically deletes crippled SVN repositories. | 773   # gclient_scm.SCMWrapper._DeleteOrMove is enabled. | 
| 768     if not self.enabled: | 774 #   def testUnversionedRepository(self): | 
| 769       return | 775 #     # Check that gclient automatically deletes crippled SVN repositories. | 
| 770     self.gclient(['config', self.svn_base + 'trunk/src/']) | 776 #     if not self.enabled: | 
| 771     cmd = ['sync', '--jobs', '1', '--delete_unversioned_trees', '--reset'] | 777 #       return | 
| 772     self.assertEquals(0, self.gclient(cmd)[-1]) | 778 #     self.gclient(['config', self.svn_base + 'trunk/src/']) | 
| 773     third_party = join(self.root_dir, 'src', 'third_party') | 779 #     cmd = ['sync', '--jobs', '1', '--delete_unversioned_trees', '--reset'] | 
| 774     subprocess2.check_call(['svn', 'propset', '-q', 'svn:ignore', 'foo', '.'], | 780 #     self.assertEquals(0, self.gclient(cmd)[-1]) | 
| 775                            cwd=third_party) | 781 #     third_party = join(self.root_dir, 'src', 'third_party') | 
| 776 | 782 #     subprocess2.check_call(['svn', 'propset', '-q', 'svn:ignore', 'foo', '.'], | 
| 777     # Cripple src/third_party/foo and make sure gclient still succeeds. | 783 #                            cwd=third_party) | 
| 778     gclient_utils.rmtree(join(third_party, 'foo', '.svn')) | 784 # | 
| 779     self.assertEquals(0, self.gclient(cmd)[-1]) | 785 #     # Cripple src/third_party/foo and make sure gclient still succeeds. | 
|  | 786 #     gclient_utils.rmtree(join(third_party, 'foo', '.svn')) | 
|  | 787 #     self.assertEquals(0, self.gclient(cmd)[-1]) | 
| 780 | 788 | 
| 781 | 789 | 
| 782 class GClientSmokeSVNTransitive(GClientSmokeBase): | 790 class GClientSmokeSVNTransitive(GClientSmokeBase): | 
| 783   FAKE_REPOS_CLASS = FakeRepoTransitive | 791   FAKE_REPOS_CLASS = FakeRepoTransitive | 
| 784 | 792 | 
| 785   def setUp(self): | 793   def setUp(self): | 
| 786     super(GClientSmokeSVNTransitive, self).setUp() | 794     super(GClientSmokeSVNTransitive, self).setUp() | 
| 787     self.enabled = self.FAKE_REPOS.set_up_svn() | 795     self.enabled = self.FAKE_REPOS.set_up_svn() | 
| 788 | 796 | 
| 789   def testSyncTransitive(self): | 797   def testSyncTransitive(self): | 
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1348         ('git', 'repo_2@' + self.githash('repo_2', 1)[:7], 'src/repo2'), | 1356         ('git', 'repo_2@' + self.githash('repo_2', 1)[:7], 'src/repo2'), | 
| 1349         ('git', 'repo_3', 'src/repo2/repo_renamed'), | 1357         ('git', 'repo_3', 'src/repo2/repo_renamed'), | 
| 1350         ('svn', 'trunk/third_party/foo@1', 'src/third_party/foo'), | 1358         ('svn', 'trunk/third_party/foo@1', 'src/third_party/foo'), | 
| 1351       ] | 1359       ] | 
| 1352     expected = [(scm, bases[scm] + url, os.path.join(self.root_dir, path)) | 1360     expected = [(scm, bases[scm] + url, os.path.join(self.root_dir, path)) | 
| 1353                 for (scm, url, path) in expected_source] | 1361                 for (scm, url, path) in expected_source] | 
| 1354 | 1362 | 
| 1355     self.assertEquals(sorted(entries), sorted(expected)) | 1363     self.assertEquals(sorted(entries), sorted(expected)) | 
| 1356 | 1364 | 
| 1357 | 1365 | 
|  | 1366 # TODO(borenet): Uncomment the following tests once | 
|  | 1367 # gclient_scm.SCMWrapper._DeleteOrMove is enabled. | 
|  | 1368 # class SkiaDEPSTransitionSmokeTest(GClientSmokeBase): | 
|  | 1369 #   """Simulate the behavior of bisect bots as they transition across the Skia | 
|  | 1370 #   DEPS change.""" | 
|  | 1371 # | 
|  | 1372 #   FAKE_REPOS_CLASS = FakeRepoSkiaDEPS | 
|  | 1373 # | 
|  | 1374 #   def setUp(self): | 
|  | 1375 #     super(SkiaDEPSTransitionSmokeTest, self).setUp() | 
|  | 1376 #     self.enabled = (self.FAKE_REPOS.set_up_git() and | 
|  | 1377 #                     self.FAKE_REPOS.set_up_svn()) | 
|  | 1378 # | 
|  | 1379 #   def testSkiaDEPSChangeSVN(self): | 
|  | 1380 #     if not self.enabled: | 
|  | 1381 #       return | 
|  | 1382 # | 
|  | 1383 #     # Create an initial checkout: | 
|  | 1384 #     # - Single checkout at the root. | 
|  | 1385 #     # - Multiple checkouts in a shared subdirectory. | 
|  | 1386 #     self.gclient(['config', '--spec', | 
|  | 1387 #         'solutions=[' | 
|  | 1388 #         '{"name": "src",' | 
|  | 1389 #         ' "url": "' + self.svn_base + 'trunk/src/",' | 
|  | 1390 #         '}]']) | 
|  | 1391 # | 
|  | 1392 #     checkout_path = os.path.join(self.root_dir, 'src') | 
|  | 1393 #     skia = os.path.join(checkout_path, 'third_party', 'skia') | 
|  | 1394 #     skia_gyp = os.path.join(skia, 'gyp') | 
|  | 1395 #     skia_include = os.path.join(skia, 'include') | 
|  | 1396 #     skia_src = os.path.join(skia, 'src') | 
|  | 1397 # | 
|  | 1398 #     gyp_svn_url = self.svn_base + 'skia/gyp' | 
|  | 1399 #     include_svn_url = self.svn_base + 'skia/include' | 
|  | 1400 #     src_svn_url = self.svn_base + 'skia/src' | 
|  | 1401 #     skia_git_url = self.git_base + 'repo_1' | 
|  | 1402 # | 
|  | 1403 #     # Initial sync. Verify that we get the expected checkout. | 
|  | 1404 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2']) | 
|  | 1405 #     self.assertEqual(res[2], 0, 'Initial sync failed.') | 
|  | 1406 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'], | 
|  | 1407 #                      gyp_svn_url) | 
|  | 1408 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], | 
|  | 1409 #                                                       skia_include)['URL'], | 
|  | 1410 #                      include_svn_url) | 
|  | 1411 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'], | 
|  | 1412 #                      src_svn_url) | 
|  | 1413 # | 
|  | 1414 #     # Verify that the sync succeeds. Verify that we have the  expected merged | 
|  | 1415 #     # checkout. | 
|  | 1416 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3']) | 
|  | 1417 #     self.assertEqual(res[2], 0, 'DEPS change sync failed.') | 
|  | 1418 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1419 #                                              skia), skia_git_url) | 
|  | 1420 # | 
|  | 1421 #     # Sync again. Verify that we still have the expected merged checkout. | 
|  | 1422 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3']) | 
|  | 1423 #     self.assertEqual(res[2], 0, 'Subsequent sync failed.') | 
|  | 1424 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1425 #                                              skia), skia_git_url) | 
|  | 1426 # | 
|  | 1427 #     # Sync back to the original DEPS. Verify that we get the original | 
|  | 1428 #     # structure. | 
|  | 1429 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2']) | 
|  | 1430 #     self.assertEqual(res[2], 0, 'Reverse sync failed.') | 
|  | 1431 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'], | 
|  | 1432 #                      gyp_svn_url) | 
|  | 1433 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], | 
|  | 1434 #                                                       skia_include)['URL'], | 
|  | 1435 #                      include_svn_url) | 
|  | 1436 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'], | 
|  | 1437 #                      src_svn_url) | 
|  | 1438 # | 
|  | 1439 #     # Sync again. Verify that we still have the original structure. | 
|  | 1440 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2']) | 
|  | 1441 #     self.assertEqual(res[2], 0, 'Subsequent sync #2 failed.') | 
|  | 1442 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'], | 
|  | 1443 #                      gyp_svn_url) | 
|  | 1444 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], | 
|  | 1445 #                                                       skia_include)['URL'], | 
|  | 1446 #                      include_svn_url) | 
|  | 1447 #     self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'], | 
|  | 1448 #                      src_svn_url) | 
|  | 1449 # | 
|  | 1450 #   def testSkiaDEPSChangeGit(self): | 
|  | 1451 #     if not self.enabled: | 
|  | 1452 #       return | 
|  | 1453 # | 
|  | 1454 #     # Create an initial checkout: | 
|  | 1455 #     # - Single checkout at the root. | 
|  | 1456 #     # - Multiple checkouts in a shared subdirectory. | 
|  | 1457 #     self.gclient(['config', '--spec', | 
|  | 1458 #         'solutions=[' | 
|  | 1459 #         '{"name": "src",' | 
|  | 1460 #         ' "url": "' + self.git_base + 'repo_2",' | 
|  | 1461 #         '}]']) | 
|  | 1462 # | 
|  | 1463 #     checkout_path = os.path.join(self.root_dir, 'src') | 
|  | 1464 #     skia = os.path.join(checkout_path, 'third_party', 'skia') | 
|  | 1465 #     skia_gyp = os.path.join(skia, 'gyp') | 
|  | 1466 #     skia_include = os.path.join(skia, 'include') | 
|  | 1467 #     skia_src = os.path.join(skia, 'src') | 
|  | 1468 # | 
|  | 1469 #     gyp_git_url = self.git_base + 'repo_3' | 
|  | 1470 #     include_git_url = self.git_base + 'repo_4' | 
|  | 1471 #     src_git_url = self.git_base + 'repo_5' | 
|  | 1472 #     skia_git_url = self.FAKE_REPOS.git_base + 'repo_1' | 
|  | 1473 # | 
|  | 1474 #     pre_hash = self.githash('repo_2', 1) | 
|  | 1475 #     post_hash = self.githash('repo_2', 2) | 
|  | 1476 # | 
|  | 1477 #     # Initial sync. Verify that we get the expected checkout. | 
|  | 1478 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', | 
|  | 1479 #                         'src@%s' % pre_hash]) | 
|  | 1480 #     self.assertEqual(res[2], 0, 'Initial sync failed.') | 
|  | 1481 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1482 #                                              skia_gyp), gyp_git_url) | 
|  | 1483 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1484 #                                              skia_include), include_git_url) | 
|  | 1485 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1486 #                                              skia_src), src_git_url) | 
|  | 1487 # | 
|  | 1488 #     # Verify that the sync succeeds. Verify that we have the  expected merged | 
|  | 1489 #     # checkout. | 
|  | 1490 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', | 
|  | 1491 #                         'src@%s' % post_hash]) | 
|  | 1492 #     self.assertEqual(res[2], 0, 'DEPS change sync failed.') | 
|  | 1493 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1494 #                                              skia), skia_git_url) | 
|  | 1495 # | 
|  | 1496 #     # Sync again. Verify that we still have the expected merged checkout. | 
|  | 1497 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', | 
|  | 1498 #                         'src@%s' % post_hash]) | 
|  | 1499 #     self.assertEqual(res[2], 0, 'Subsequent sync failed.') | 
|  | 1500 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1501 #                                              skia), skia_git_url) | 
|  | 1502 # | 
|  | 1503 #     # Sync back to the original DEPS. Verify that we get the original | 
|  | 1504 #     # structure. | 
|  | 1505 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', | 
|  | 1506 #                         'src@%s' % pre_hash]) | 
|  | 1507 #     self.assertEqual(res[2], 0, 'Reverse sync failed.') | 
|  | 1508 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1509 #                                              skia_gyp), gyp_git_url) | 
|  | 1510 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1511 #                                              skia_include), include_git_url) | 
|  | 1512 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1513 #                                              skia_src), src_git_url) | 
|  | 1514 # | 
|  | 1515 #     # Sync again. Verify that we still have the original structure. | 
|  | 1516 #     res = self.gclient(['sync', '--deps', 'mac', '--revision', | 
|  | 1517 #                         'src@%s' % pre_hash]) | 
|  | 1518 #     self.assertEqual(res[2], 0, 'Subsequent sync #2 failed.') | 
|  | 1519 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1520 #                                              skia_gyp), gyp_git_url) | 
|  | 1521 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1522 #                                              skia_include), include_git_url) | 
|  | 1523 #     self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], | 
|  | 1524 #                                              skia_src), src_git_url) | 
|  | 1525 | 
|  | 1526 | 
| 1358 class GClientSmokeFromCheckout(GClientSmokeBase): | 1527 class GClientSmokeFromCheckout(GClientSmokeBase): | 
| 1359   # WebKit abuses this. It has a .gclient and a DEPS from a checkout. | 1528   # WebKit abuses this. It has a .gclient and a DEPS from a checkout. | 
| 1360   def setUp(self): | 1529   def setUp(self): | 
| 1361     super(GClientSmokeFromCheckout, self).setUp() | 1530     super(GClientSmokeFromCheckout, self).setUp() | 
| 1362     self.enabled = self.FAKE_REPOS.set_up_svn() | 1531     self.enabled = self.FAKE_REPOS.set_up_svn() | 
| 1363     os.rmdir(self.root_dir) | 1532     os.rmdir(self.root_dir) | 
| 1364     if self.enabled: | 1533     if self.enabled: | 
| 1365       usr, pwd = self.FAKE_REPOS.USERS[0] | 1534       usr, pwd = self.FAKE_REPOS.USERS[0] | 
| 1366       subprocess2.check_call( | 1535       subprocess2.check_call( | 
| 1367           ['svn', 'checkout', self.svn_base + '/trunk/webkit', | 1536           ['svn', 'checkout', self.svn_base + '/trunk/webkit', | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1455 | 1624 | 
| 1456   if '-c' in sys.argv: | 1625   if '-c' in sys.argv: | 
| 1457     COVERAGE = True | 1626     COVERAGE = True | 
| 1458     sys.argv.remove('-c') | 1627     sys.argv.remove('-c') | 
| 1459     if os.path.exists('.coverage'): | 1628     if os.path.exists('.coverage'): | 
| 1460       os.remove('.coverage') | 1629       os.remove('.coverage') | 
| 1461     os.environ['COVERAGE_FILE'] = os.path.join( | 1630     os.environ['COVERAGE_FILE'] = os.path.join( | 
| 1462         os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 1631         os.path.dirname(os.path.dirname(os.path.abspath(__file__))), | 
| 1463         '.coverage') | 1632         '.coverage') | 
| 1464   unittest.main() | 1633   unittest.main() | 
| OLD | NEW | 
|---|