Index: tests/gclient_smoketest.py |
diff --git a/tests/gclient_smoketest.py b/tests/gclient_smoketest.py |
index 9c84fad9f531559854a6f96b68e94df1f0814d6f..388d2a83a5ef7c256584beced359496e8d48107d 100755 |
--- a/tests/gclient_smoketest.py |
+++ b/tests/gclient_smoketest.py |
@@ -22,7 +22,7 @@ sys.path.insert(0, ROOT_DIR) |
from testing_support.fake_repos import join, write |
from testing_support.fake_repos import FakeReposTestBase, FakeRepoTransitive, \ |
- FakeRepoSkiaDEPS |
+ FakeRepoSkiaDEPS, FakeRepoBlinkDEPS |
import gclient_utils |
import scm as gclient_scm |
@@ -1538,6 +1538,138 @@ class SkiaDEPSTransitionSmokeTest(GClientSmokeBase): |
skia_src), src_git_url) |
+class BlinkDEPSTransitionSmokeTest(GClientSmokeBase): |
+ """Simulate the behavior of bisect bots as they transition across the Blink |
+ DEPS change.""" |
+ |
+ FAKE_REPOS_CLASS = FakeRepoBlinkDEPS |
+ |
+ def setUp(self): |
+ super(BlinkDEPSTransitionSmokeTest, self).setUp() |
+ self.enabled = self.FAKE_REPOS.set_up_git() |
+ self.checkout_path = os.path.join(self.root_dir, 'src') |
+ self.blink = os.path.join(self.checkout_path, 'third_party', 'WebKit') |
+ self.blink_git_url = self.FAKE_REPOS.git_base + 'repo_2' |
+ self.pre_merge_sha = self.githash('repo_1', 1) |
+ self.post_merge_sha = self.githash('repo_1', 2) |
+ |
+ def CheckStatusPreMergePoint(self): |
+ self.assertEqual(gclient_scm.GIT.Capture(['config', 'remote.origin.url'], |
+ self.blink), self.blink_git_url) |
+ self.assertTrue(os.path.exists(join(self.blink, '.git'))) |
+ self.assertTrue(os.path.exists(join(self.blink, 'OWNERS'))) |
+ with open(join(self.blink, 'OWNERS')) as f: |
+ owners_content = f.read() |
+ self.assertEqual('OWNERS-pre', owners_content, 'OWNERS not updated') |
+ self.assertTrue(os.path.exists(join(self.blink, 'Source', 'exists_always'))) |
+ self.assertTrue(os.path.exists( |
+ join(self.blink, 'Source', 'exists_before_but_not_after'))) |
+ self.assertFalse(os.path.exists( |
+ join(self.blink, 'Source', 'exists_after_but_not_before'))) |
+ |
+ def CheckStatusPostMergePoint(self): |
+ # Check that the contents still exists |
+ self.assertTrue(os.path.exists(join(self.blink, 'OWNERS'))) |
+ with open(join(self.blink, 'OWNERS')) as f: |
+ owners_content = f.read() |
+ self.assertEqual('OWNERS-post', owners_content, 'OWNERS not updated') |
+ self.assertTrue(os.path.exists(join(self.blink, 'Source', 'exists_always'))) |
+ # Check that file removed between the branch point are actually deleted. |
+ self.assertTrue(os.path.exists( |
+ join(self.blink, 'Source', 'exists_after_but_not_before'))) |
+ self.assertFalse(os.path.exists( |
+ join(self.blink, 'Source', 'exists_before_but_not_after'))) |
+ # But not the .git folder |
+ self.assertFalse(os.path.exists(join(self.blink, '.git'))) |
+ |
+ def testBlinkDEPSChangeUsingGclient(self): |
+ """Checks that {src,blink} repos are consistent when syncing going back and |
+ forth using gclient sync src@revision.""" |
+ if not self.enabled: |
+ return |
+ |
+ self.gclient(['config', '--spec', |
+ 'solutions=[' |
+ '{"name": "src",' |
+ ' "url": "' + self.git_base + 'repo_1",' |
+ '}]']) |
+ |
+ # Go back and forth two times. |
+ for _ in xrange(2): |
+ res = self.gclient(['sync', '--jobs', '1', |
+ '--revision', 'src@%s' % self.pre_merge_sha]) |
+ self.assertEqual(res[2], 0, 'DEPS change sync failed.') |
+ self.CheckStatusPreMergePoint() |
+ |
+ res = self.gclient(['sync', '--jobs', '1', |
+ '--revision', 'src@%s' % self.post_merge_sha]) |
+ self.assertEqual(res[2], 0, 'DEPS change sync failed.') |
+ self.CheckStatusPostMergePoint() |
+ |
+ |
+ def testBlinkDEPSChangeUsingGit(self): |
+ """Like testBlinkDEPSChangeUsingGclient, but move the main project using |
+ directly git and not gclient sync.""" |
+ if not self.enabled: |
+ return |
+ |
+ self.gclient(['config', '--spec', |
+ 'solutions=[' |
+ '{"name": "src",' |
+ ' "url": "' + self.git_base + 'repo_1",' |
+ ' "managed": False,' |
+ '}]']) |
+ |
+ # Perform an initial sync to bootstrap the repo. |
+ res = self.gclient(['sync', '--jobs', '1']) |
+ self.assertEqual(res[2], 0, 'Initial gclient sync failed.') |
+ |
+ # Go back and forth two times. |
+ for _ in xrange(2): |
+ subprocess2.check_call(['git', 'checkout', '-q', self.pre_merge_sha], |
+ cwd=self.checkout_path) |
+ res = self.gclient(['sync', '--jobs', '1']) |
+ self.assertEqual(res[2], 0, 'gclient sync failed.') |
+ self.CheckStatusPreMergePoint() |
+ |
+ subprocess2.check_call(['git', 'checkout', '-q', self.post_merge_sha], |
+ cwd=self.checkout_path) |
+ res = self.gclient(['sync', '--jobs', '1']) |
+ self.assertEqual(res[2], 0, 'DEPS change sync failed.') |
+ self.CheckStatusPostMergePoint() |
+ |
+ |
+ def testBlinkLocalBranchesArePreserved(self): |
+ """Checks that the state of local git branches are effectively preserved |
+ when going back and forth.""" |
+ if not self.enabled: |
+ return |
+ |
+ self.gclient(['config', '--spec', |
+ 'solutions=[' |
+ '{"name": "src",' |
+ ' "url": "' + self.git_base + 'repo_1",' |
+ '}]']) |
+ |
+ # Initialize to pre-merge point. |
+ self.gclient(['sync', '--revision', 'src@%s' % self.pre_merge_sha]) |
+ self.CheckStatusPreMergePoint() |
+ |
+ # Create a branch named "foo". |
+ subprocess2.check_call(['git', 'checkout', '-qB', 'foo'], |
+ cwd=self.blink) |
+ |
+ # Cross the pre-merge point. |
+ self.gclient(['sync', '--revision', 'src@%s' % self.post_merge_sha]) |
+ self.CheckStatusPostMergePoint() |
+ |
+ # Go backwards and check that we still have the foo branch. |
+ self.gclient(['sync', '--revision', 'src@%s' % self.pre_merge_sha]) |
+ self.CheckStatusPreMergePoint() |
+ subprocess2.check_call( |
+ ['git', 'show-ref', '-q', '--verify', 'refs/heads/foo'], cwd=self.blink) |
+ |
+ |
class GClientSmokeFromCheckout(GClientSmokeBase): |
# WebKit abuses this. It has a .gclient and a DEPS from a checkout. |
def setUp(self): |