Index: tests/gclient_scm_test.py |
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py |
index 87d8acf7e7bbf92c7b19fa60252d76e344c2a3a8..ac13c108b43ebb85f653500332d2513a49759ec1 100755 |
--- a/tests/gclient_scm_test.py |
+++ b/tests/gclient_scm_test.py |
@@ -93,10 +93,21 @@ class SVNWrapperTestCase(BaseTestCase): |
def testDir(self): |
members = [ |
- 'FullUrlForRelativeUrl', 'GetRevisionDate', 'RunCommand', |
- 'cleanup', 'diff', 'pack', 'relpath', 'revert', |
- 'revinfo', 'runhooks', 'status', 'update', |
- 'updatesingle', 'url', |
+ 'FullUrlForRelativeUrl', |
+ 'GetRevisionDate', |
+ 'GetUsableRev', |
+ 'RunCommand', |
+ 'cleanup', |
+ 'diff', |
+ 'pack', |
+ 'relpath', |
+ 'revert', |
+ 'revinfo', |
+ 'runhooks', |
+ 'status', |
+ 'update', |
+ 'updatesingle', |
+ 'url', |
] |
# If you add a member, be sure to add the relevant test! |
@@ -544,6 +555,26 @@ class SVNWrapperTestCase(BaseTestCase): |
self.checkstdout( |
('________ found .hg directory; skipping %s\n' % self.relpath)) |
+ def testGetUsableRevSVN(self): |
+ # pylint: disable=E1101 |
+ options = self.Options(verbose=True) |
+ |
+ # Mock SVN revision validity checking. |
+ self.mox.StubOutWithMock( |
+ gclient_scm.scm.SVN, 'IsValidRevision', True) |
+ gclient_scm.scm.SVN.IsValidRevision(url='%s@%s' % (self.url, 1) |
+ ).AndReturn(True) |
+ gclient_scm.scm.SVN.IsValidRevision(url='%s@%s' % (self.url, 'fake') |
+ ).AndReturn(False) |
+ |
+ self.mox.ReplayAll() |
+ |
+ svn_scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir) |
+ # With an SVN checkout, 1 an example of a valid usable rev. |
+ self.assertEquals(svn_scm.GetUsableRev(1, options), 1) |
+ # With an SVN checkout, a fake or unknown rev should raise an excpetion. |
+ self.assertRaises(gclient_scm.gclient_utils.Error, |
+ svn_scm.GetUsableRev, 'fake', options) |
class BaseGitWrapperTestCase(GCBaseTestCase, StdoutCheck, TestCaseUtils, |
unittest.TestCase): |
@@ -646,13 +677,23 @@ from :3 |
unittest.TestCase.tearDown(self) |
rmtree(self.root_dir) |
- |
class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): |
def testDir(self): |
members = [ |
- 'FullUrlForRelativeUrl', 'GetRevisionDate', 'RunCommand', |
- 'cleanup', 'diff', 'pack', 'relpath', 'revert', |
- 'revinfo', 'runhooks', 'status', 'update', 'url', |
+ 'FullUrlForRelativeUrl', |
+ 'GetRevisionDate', |
+ 'GetUsableRev', |
+ 'RunCommand', |
+ 'cleanup', |
+ 'diff', |
+ 'pack', |
+ 'relpath', |
+ 'revert', |
+ 'revinfo', |
+ 'runhooks', |
+ 'status', |
+ 'update', |
+ 'url', |
] |
# If you add a member, be sure to add the relevant test! |
@@ -929,6 +970,111 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): |
self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458') |
+class ManagedGitWrapperTestCaseMox(BaseTestCase): |
+ class OptionsObject(object): |
+ def __init__(self, verbose=False, revision=None, force=False): |
+ self.verbose = verbose |
+ self.revision = revision |
+ self.deps_os = None |
+ self.force = force |
+ self.reset = False |
+ self.nohooks = False |
+ # TODO(maruel): Test --jobs > 1. |
+ self.jobs = 1 |
+ |
+ def Options(self, *args, **kwargs): |
+ return self.OptionsObject(*args, **kwargs) |
+ |
+ def setUp(self): |
+ BaseTestCase.setUp(self) |
+ self.fake_hash_1 = 't0ta11yf4k3' |
+ self.fake_hash_2 = '3v3nf4k3r' |
+ self.url = 'git://foo' |
+ self.root_dir = '/tmp' |
+ self.relpath = 'fake' |
+ self.base_path = os.path.join(self.root_dir, self.relpath) |
+ |
+ def tearDown(self): |
+ BaseTestCase.tearDown(self) |
+ |
+ def testGetUsableRevGit(self): |
+ # pylint: disable=E1101 |
+ options = self.Options(verbose=True) |
+ |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsValidRevision', True) |
+ gclient_scm.scm.GIT.IsValidRevision(cwd=self.base_path, rev=self.fake_hash_1 |
+ ).AndReturn(True) |
+ gclient_scm.scm.GIT.IsValidRevision(cwd=self.base_path, rev='1' |
+ ).AndReturn(False) |
+ |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True) |
+ gclient_scm.scm.GIT.IsGitSvn(cwd=self.base_path).MultipleTimes( |
+ ).AndReturn(False) |
+ |
+ self.mox.ReplayAll() |
+ |
+ git_scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ # A [fake] git sha1 with a git repo should work (this is in the case that |
+ # the LKGR gets flipped to git sha1's some day). |
+ self.assertEquals(git_scm.GetUsableRev(self.fake_hash_1, options), |
+ self.fake_hash_1) |
+ # An SVN rev with a purely git repo should raise an exception. |
+ self.assertRaises(gclient_scm.gclient_utils.Error, |
+ git_scm.GetUsableRev, '1', options) |
+ |
+ def testGetUsableRevGitSvn(self): |
+ # pylint: disable=E1101 |
+ options = self.Options() |
+ too_big = str(1e7) |
+ |
+ # Pretend like the git-svn repo's HEAD is at r2. |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'GetGitSvnHeadRev', True) |
+ gclient_scm.scm.GIT.GetGitSvnHeadRev(cwd=self.base_path).MultipleTimes( |
+ ).AndReturn(2) |
+ |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'GetSha1ForSvnRev', True) |
+ # r1 -> first fake hash, r3 -> second fake hash. |
+ gclient_scm.scm.GIT.GetSha1ForSvnRev(cwd=self.base_path, rev='1' |
+ ).AndReturn(self.fake_hash_1) |
+ gclient_scm.scm.GIT.GetSha1ForSvnRev(cwd=self.base_path, rev='3' |
+ ).AndReturn(self.fake_hash_2) |
+ |
+ # Ensure that we call git svn fetch if our LKGR is > the git-svn HEAD rev. |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'Capture', True) |
+ gclient_scm.scm.GIT.Capture(['svn', 'fetch'], cwd=self.base_path) |
+ |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsGitSvn', True) |
+ gclient_scm.scm.GIT.IsGitSvn(cwd=self.base_path).MultipleTimes( |
+ ).AndReturn(True) |
+ |
+ self.mox.StubOutWithMock(gclient_scm.scm.GIT, 'IsValidRevision', True) |
+ gclient_scm.scm.GIT.IsValidRevision(cwd=self.base_path, rev=self.fake_hash_1 |
+ ).AndReturn(True) |
+ gclient_scm.scm.GIT.IsValidRevision(cwd=self.base_path, rev=too_big |
+ ).AndReturn(False) |
+ |
+ self.mox.ReplayAll() |
+ |
+ git_svn_scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ # Given an SVN revision with a git-svn checkout, it should be translated to |
+ # a git sha1 and be usable. |
+ self.assertEquals(git_svn_scm.GetUsableRev('1', options), |
+ self.fake_hash_1) |
+ # Our fake HEAD rev is r2, so this should call git svn fetch to get more |
+ # revs (pymox will complain if this doesn't happen). |
+ self.assertEquals(git_svn_scm.GetUsableRev('3', options), |
+ self.fake_hash_2) |
+ # Given a git sha1 with a git-svn checkout, it should be used as is. |
+ self.assertEquals(git_svn_scm.GetUsableRev(self.fake_hash_1, options), |
+ self.fake_hash_1) |
+ # We currently check for seemingly valid SVN revisions by assuming 6 digit |
+ # numbers, so assure that numeric revs >= 1000000 don't work. |
+ self.assertRaises(gclient_scm.gclient_utils.Error, |
+ git_svn_scm.GetUsableRev, too_big, options) |
+ |
+ |
class UnmanagedGitWrapperTestCase(BaseGitWrapperTestCase): |
def testUpdateCheckout(self): |
if not self.enabled: |