summaryrefslogtreecommitdiffstats
path: root/tests/test_wrapper.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2020-02-29 02:53:41 -0500
committerMike Frysinger <vapier@google.com>2020-03-25 04:55:50 +0000
commit3599cc397581086b7fddcd2e07308bfdac7751b1 (patch)
tree5ae663f1830fa7d29ec66c86e2088244f7fa2e5a /tests/test_wrapper.py
parentcfc8111f5e04ece139892bb9af4bd63aac2b75f3 (diff)
downloadgit-repo-3599cc397581086b7fddcd2e07308bfdac7751b1.tar.gz
init: respect --repo-rev changes
We respect this option when running the first `repo init`, but then silently ignore it once the initial sync is done. Make sure users are able to change things on the fly. We refactor the wrapper API to allow reuse between the two init's. Bug: https://crbug.com/gerrit/11045 Change-Id: Icb89a8cddca32f39a760a6283152457810b2392d Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/260032 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Jonathan Nieder <jrn@google.com>
Diffstat (limited to 'tests/test_wrapper.py')
-rw-r--r--tests/test_wrapper.py156
1 files changed, 154 insertions, 2 deletions
diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py
index 73c62cc1..136f7f11 100644
--- a/tests/test_wrapper.py
+++ b/tests/test_wrapper.py
@@ -18,12 +18,14 @@
18 18
19from __future__ import print_function 19from __future__ import print_function
20 20
21import contextlib
21import os 22import os
22import re 23import re
23import shutil 24import shutil
24import tempfile 25import tempfile
25import unittest 26import unittest
26 27
28import platform_utils
27from pyversion import is_python3 29from pyversion import is_python3
28import wrapper 30import wrapper
29 31
@@ -36,6 +38,18 @@ else:
36 from StringIO import StringIO 38 from StringIO import StringIO
37 39
38 40
41@contextlib.contextmanager
42def TemporaryDirectory():
43 """Create a new empty git checkout for testing."""
44 # TODO(vapier): Convert this to tempfile.TemporaryDirectory once we drop
45 # Python 2 support entirely.
46 try:
47 tempdir = tempfile.mkdtemp(prefix='repo-tests')
48 yield tempdir
49 finally:
50 platform_utils.rmtree(tempdir)
51
52
39def fixture(*paths): 53def fixture(*paths):
40 """Return a path relative to tests/fixtures. 54 """Return a path relative to tests/fixtures.
41 """ 55 """
@@ -243,8 +257,93 @@ class CheckGitVersion(RepoWrapperTestCase):
243 self.wrapper._CheckGitVersion() 257 self.wrapper._CheckGitVersion()
244 258
245 259
246class ResolveRepoRev(RepoWrapperTestCase): 260class NeedSetupGnuPG(RepoWrapperTestCase):
247 """Check resolve_repo_rev behavior.""" 261 """Check NeedSetupGnuPG behavior."""
262
263 def test_missing_dir(self):
264 """The ~/.repoconfig tree doesn't exist yet."""
265 with TemporaryDirectory() as tempdir:
266 self.wrapper.home_dot_repo = os.path.join(tempdir, 'foo')
267 self.assertTrue(self.wrapper.NeedSetupGnuPG())
268
269 def test_missing_keyring(self):
270 """The keyring-version file doesn't exist yet."""
271 with TemporaryDirectory() as tempdir:
272 self.wrapper.home_dot_repo = tempdir
273 self.assertTrue(self.wrapper.NeedSetupGnuPG())
274
275 def test_empty_keyring(self):
276 """The keyring-version file exists, but is empty."""
277 with TemporaryDirectory() as tempdir:
278 self.wrapper.home_dot_repo = tempdir
279 with open(os.path.join(tempdir, 'keyring-version'), 'w'):
280 pass
281 self.assertTrue(self.wrapper.NeedSetupGnuPG())
282
283 def test_old_keyring(self):
284 """The keyring-version file exists, but it's old."""
285 with TemporaryDirectory() as tempdir:
286 self.wrapper.home_dot_repo = tempdir
287 with open(os.path.join(tempdir, 'keyring-version'), 'w') as fp:
288 fp.write('1.0\n')
289 self.assertTrue(self.wrapper.NeedSetupGnuPG())
290
291 def test_new_keyring(self):
292 """The keyring-version file exists, and is up-to-date."""
293 with TemporaryDirectory() as tempdir:
294 self.wrapper.home_dot_repo = tempdir
295 with open(os.path.join(tempdir, 'keyring-version'), 'w') as fp:
296 fp.write('1000.0\n')
297 self.assertFalse(self.wrapper.NeedSetupGnuPG())
298
299
300class SetupGnuPG(RepoWrapperTestCase):
301 """Check SetupGnuPG behavior."""
302
303 def test_full(self):
304 """Make sure it works completely."""
305 with TemporaryDirectory() as tempdir:
306 self.wrapper.home_dot_repo = tempdir
307 self.assertTrue(self.wrapper.SetupGnuPG(True))
308 with open(os.path.join(tempdir, 'keyring-version'), 'r') as fp:
309 data = fp.read()
310 self.assertEqual('.'.join(str(x) for x in self.wrapper.KEYRING_VERSION),
311 data.strip())
312
313
314class VerifyRev(RepoWrapperTestCase):
315 """Check verify_rev behavior."""
316
317 def test_verify_passes(self):
318 """Check when we have a valid signed tag."""
319 desc_result = self.wrapper.RunResult(0, 'v1.0\n', '')
320 gpg_result = self.wrapper.RunResult(0, '', '')
321 with mock.patch.object(self.wrapper, 'run_git',
322 side_effect=(desc_result, gpg_result)):
323 ret = self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
324 self.assertEqual('v1.0^0', ret)
325
326 def test_unsigned_commit(self):
327 """Check we fall back to signed tag when we have an unsigned commit."""
328 desc_result = self.wrapper.RunResult(0, 'v1.0-10-g1234\n', '')
329 gpg_result = self.wrapper.RunResult(0, '', '')
330 with mock.patch.object(self.wrapper, 'run_git',
331 side_effect=(desc_result, gpg_result)):
332 ret = self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
333 self.assertEqual('v1.0^0', ret)
334
335 def test_verify_fails(self):
336 """Check we fall back to signed tag when we have an unsigned commit."""
337 desc_result = self.wrapper.RunResult(0, 'v1.0-10-g1234\n', '')
338 gpg_result = Exception
339 with mock.patch.object(self.wrapper, 'run_git',
340 side_effect=(desc_result, gpg_result)):
341 with self.assertRaises(Exception):
342 self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
343
344
345class GitCheckoutTestCase(RepoWrapperTestCase):
346 """Tests that use a real/small git checkout."""
248 347
249 GIT_DIR = None 348 GIT_DIR = None
250 REV_LIST = None 349 REV_LIST = None
@@ -274,6 +373,10 @@ class ResolveRepoRev(RepoWrapperTestCase):
274 373
275 shutil.rmtree(cls.GIT_DIR) 374 shutil.rmtree(cls.GIT_DIR)
276 375
376
377class ResolveRepoRev(GitCheckoutTestCase):
378 """Check resolve_repo_rev behavior."""
379
277 def test_explicit_branch(self): 380 def test_explicit_branch(self):
278 """Check refs/heads/branch argument.""" 381 """Check refs/heads/branch argument."""
279 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/stable') 382 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/stable')
@@ -328,5 +431,54 @@ class ResolveRepoRev(RepoWrapperTestCase):
328 self.wrapper.resolve_repo_rev(self.GIT_DIR, 'boooooooya') 431 self.wrapper.resolve_repo_rev(self.GIT_DIR, 'boooooooya')
329 432
330 433
434class CheckRepoVerify(RepoWrapperTestCase):
435 """Check check_repo_verify behavior."""
436
437 def test_no_verify(self):
438 """Always fail with --no-repo-verify."""
439 self.assertFalse(self.wrapper.check_repo_verify(False))
440
441 def test_gpg_initialized(self):
442 """Should pass if gpg is setup already."""
443 with mock.patch.object(self.wrapper, 'NeedSetupGnuPG', return_value=False):
444 self.assertTrue(self.wrapper.check_repo_verify(True))
445
446 def test_need_gpg_setup(self):
447 """Should pass/fail based on gpg setup."""
448 with mock.patch.object(self.wrapper, 'NeedSetupGnuPG', return_value=True):
449 with mock.patch.object(self.wrapper, 'SetupGnuPG') as m:
450 m.return_value = True
451 self.assertTrue(self.wrapper.check_repo_verify(True))
452
453 m.return_value = False
454 self.assertFalse(self.wrapper.check_repo_verify(True))
455
456
457class CheckRepoRev(GitCheckoutTestCase):
458 """Check check_repo_rev behavior."""
459
460 def test_verify_works(self):
461 """Should pass when verification passes."""
462 with mock.patch.object(self.wrapper, 'check_repo_verify', return_value=True):
463 with mock.patch.object(self.wrapper, 'verify_rev', return_value='12345'):
464 rrev, lrev = self.wrapper.check_repo_rev(self.GIT_DIR, 'stable')
465 self.assertEqual('refs/heads/stable', rrev)
466 self.assertEqual('12345', lrev)
467
468 def test_verify_fails(self):
469 """Should fail when verification fails."""
470 with mock.patch.object(self.wrapper, 'check_repo_verify', return_value=True):
471 with mock.patch.object(self.wrapper, 'verify_rev', side_effect=Exception):
472 with self.assertRaises(Exception):
473 self.wrapper.check_repo_rev(self.GIT_DIR, 'stable')
474
475 def test_verify_ignore(self):
476 """Should pass when verification is disabled."""
477 with mock.patch.object(self.wrapper, 'verify_rev', side_effect=Exception):
478 rrev, lrev = self.wrapper.check_repo_rev(self.GIT_DIR, 'stable', repo_verify=False)
479 self.assertEqual('refs/heads/stable', rrev)
480 self.assertEqual(self.REV_LIST[1], lrev)
481
482
331if __name__ == '__main__': 483if __name__ == '__main__':
332 unittest.main() 484 unittest.main()