| Index: tests/gclient_smoketest.py
|
| diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py
|
| index 427699816bc97b0429879697ae46f659014fa4b1..f57aaffe9a4fdccd813707d98ef44c88ff5a86bc 100755
|
| --- a/tests/gclient_smoketest.py
|
| +++ b/tests/gclient_smoketest.py
|
| @@ -21,9 +21,11 @@ ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| sys.path.insert(0, ROOT_DIR)
|
|
|
| from testing_support.fake_repos import join, write
|
| -from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive
|
| +from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive, \
|
| + FakeRepoSkiaDEPS
|
|
|
| import gclient_utils
|
| +import scm as gclient_scm
|
|
|
| import subprocess2
|
|
|
| @@ -1397,6 +1399,170 @@ class GClientSmokeBoth(GClientSmokeBase):
|
| self.assertEquals(sorted(entries), sorted(expected))
|
|
|
|
|
| +class SkiaDEPSTransitionSmokeTest(GClientSmokeBase):
|
| + """Simulate the behavior of bisect bots as they transition across the Skia
|
| + DEPS change."""
|
| +
|
| + FAKE_REPOS_CLASS = FakeRepoSkiaDEPS
|
| +
|
| + def setUp(self):
|
| + super(SkiaDEPSTransitionSmokeTest, self).setUp()
|
| + self.enabled = self.FAKE_REPOS.set_up_git() and self.FAKE_REPOS.set_up_svn()
|
| +
|
| + def testSkiaDEPSChangeSVN(self):
|
| + if not self.enabled:
|
| + return
|
| +
|
| + # Create an initial checkout:
|
| + # - Single checkout at the root.
|
| + # - Multiple checkouts in a shared subdirectory.
|
| + self.gclient(['config', '--spec',
|
| + 'solutions=['
|
| + '{"name": "src",'
|
| + ' "url": "' + self.svn_base + 'trunk/src/",'
|
| + '}]'])
|
| +
|
| + checkout_path = os.path.join(self.root_dir, 'src')
|
| + skia = os.path.join(checkout_path, 'third_party', 'skia')
|
| + skia_gyp = os.path.join(skia, 'gyp')
|
| + skia_include = os.path.join(skia, 'include')
|
| + skia_src = os.path.join(skia, 'src')
|
| +
|
| + gyp_svn_url = self.svn_base + 'skia/gyp'
|
| + include_svn_url = self.svn_base + 'skia/include'
|
| + src_svn_url = self.svn_base + 'skia/src'
|
| + skia_git_url = self.git_base + 'repo_1'
|
| +
|
| + # Initial sync. Verify that we get the expected checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2'])
|
| + self.assertEqual(res[2], 0, 'Initial sync failed.')
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| + gyp_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| + include_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| + src_svn_url)
|
| +
|
| + # Try to sync the new DEPS. Verify that the sync fails without --force.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3'])
|
| + self.assertEquals(res[2], 1, 'New DEPS sync succeeded unexpectedly.')
|
| +
|
| + # Verify that the sync succeeds with --force. Verify that we have the
|
| + # expected merged checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3',
|
| + '--force'])
|
| + self.assertEqual(res[2], 0, 'DEPS change sync failed with --force.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia), skia_git_url)
|
| +
|
| + # Sync again. Verify that we still have the expected merged checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@3'])
|
| + self.assertEqual(res[2], 0, 'Subsequent sync failed.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia), skia_git_url)
|
| +
|
| + # Sync back to the original DEPS. Verify that we get the original structure.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2',
|
| + '--force'])
|
| + self.assertEqual(res[2], 0, 'Reverse sync failed.')
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| + gyp_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| + include_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| + src_svn_url)
|
| +
|
| + # Sync again. Verify that we still have the original structure.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision', 'src@2'])
|
| + self.assertEqual(res[2], 0, 'Subsequent sync #2 failed.')
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_gyp)['URL'],
|
| + gyp_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_include)['URL'],
|
| + include_svn_url)
|
| + self.assertEqual(gclient_scm.SVN.CaptureLocalInfo([], skia_src)['URL'],
|
| + src_svn_url)
|
| +
|
| + def testSkiaDEPSChangeGit(self):
|
| + if not self.enabled:
|
| + return
|
| +
|
| + # Create an initial checkout:
|
| + # - Single checkout at the root.
|
| + # - Multiple checkouts in a shared subdirectory.
|
| + self.gclient(['config', '--spec',
|
| + 'solutions=['
|
| + '{"name": "src",'
|
| + ' "url": "' + self.git_base + 'repo_2",'
|
| + '}]'])
|
| +
|
| + checkout_path = os.path.join(self.root_dir, 'src')
|
| + skia = os.path.join(checkout_path, 'third_party', 'skia')
|
| + skia_gyp = os.path.join(skia, 'gyp')
|
| + skia_include = os.path.join(skia, 'include')
|
| + skia_src = os.path.join(skia, 'src')
|
| +
|
| + gyp_git_url = self.git_base + 'repo_3'
|
| + include_git_url = self.git_base + 'repo_4'
|
| + src_git_url = self.git_base + 'repo_5'
|
| + skia_git_url = self.FAKE_REPOS.git_base + 'repo_1'
|
| +
|
| + pre_hash = self.githash('repo_2', 1)
|
| + post_hash = self.githash('repo_2', 2)
|
| +
|
| + # Initial sync. Verify that we get the expected checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % pre_hash])
|
| + self.assertEqual(res[2], 0, 'Initial sync failed.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_gyp), gyp_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_include), include_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_src), src_git_url)
|
| +
|
| + # Try to sync the new DEPS. Verify that the sync fails without --force.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % post_hash])
|
| + self.assertEquals(res[2], 1, 'New DEPS sync succeeded unexpectedly.')
|
| +
|
| + # Verify that the sync succeeds with --force. Verify that we have the
|
| + # expected merged checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % post_hash, '--force'])
|
| + self.assertEqual(res[2], 0, 'DEPS change sync failed with --force.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia), skia_git_url)
|
| +
|
| + # Sync again. Verify that we still have the expected merged checkout.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % post_hash])
|
| + self.assertEqual(res[2], 0, 'Subsequent sync failed.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia), skia_git_url)
|
| +
|
| + # Sync back to the original DEPS. Verify that we get the original structure.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % pre_hash, '--force'])
|
| + self.assertEqual(res[2], 0, 'Reverse sync failed.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_gyp), gyp_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_include), include_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_src), src_git_url)
|
| +
|
| + # Sync again. Verify that we still have the original structure.
|
| + res = self.gclient(['sync', '--deps', 'mac', '--revision',
|
| + 'src@%s' % pre_hash])
|
| + self.assertEqual(res[2], 0, 'Subsequent sync #2 failed.')
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_gyp), gyp_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_include), include_git_url)
|
| + self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'],
|
| + skia_src), src_git_url)
|
| +
|
| +
|
| class GClientSmokeFromCheckout(GClientSmokeBase):
|
| # WebKit abuses this. It has a .gclient and a DEPS from a checkout.
|
| def setUp(self):
|
|
|