@ -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 ) :