summaryrefslogtreecommitdiffstats
path: root/tests/test_wrapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_wrapper.py')
-rw-r--r--tests/test_wrapper.py511
1 files changed, 501 insertions, 10 deletions
diff --git a/tests/test_wrapper.py b/tests/test_wrapper.py
index 8ef8d48d..e9a1f64a 100644
--- a/tests/test_wrapper.py
+++ b/tests/test_wrapper.py
@@ -1,5 +1,3 @@
1# -*- coding:utf-8 -*-
2#
3# Copyright (C) 2015 The Android Open Source Project 1# Copyright (C) 2015 The Android Open Source Project
4# 2#
5# Licensed under the Apache License, Version 2.0 (the "License"); 3# Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,27 +14,87 @@
16 14
17"""Unittests for the wrapper.py module.""" 15"""Unittests for the wrapper.py module."""
18 16
19from __future__ import print_function 17import contextlib
20 18from io import StringIO
21import os 19import os
20import re
21import shutil
22import sys
23import tempfile
22import unittest 24import unittest
25from unittest import mock
23 26
27import git_command
28import main
29import platform_utils
24import wrapper 30import wrapper
25 31
32
33@contextlib.contextmanager
34def TemporaryDirectory():
35 """Create a new empty git checkout for testing."""
36 # TODO(vapier): Convert this to tempfile.TemporaryDirectory once we drop
37 # Python 2 support entirely.
38 try:
39 tempdir = tempfile.mkdtemp(prefix='repo-tests')
40 yield tempdir
41 finally:
42 platform_utils.rmtree(tempdir)
43
44
26def fixture(*paths): 45def fixture(*paths):
27 """Return a path relative to tests/fixtures. 46 """Return a path relative to tests/fixtures.
28 """ 47 """
29 return os.path.join(os.path.dirname(__file__), 'fixtures', *paths) 48 return os.path.join(os.path.dirname(__file__), 'fixtures', *paths)
30 49
31class RepoWrapperUnitTest(unittest.TestCase): 50
32 """Tests helper functions in the repo wrapper 51class RepoWrapperTestCase(unittest.TestCase):
33 """ 52 """TestCase for the wrapper module."""
53
34 def setUp(self): 54 def setUp(self):
35 """Load the wrapper module every time 55 """Load the wrapper module every time."""
36 """
37 wrapper._wrapper_module = None 56 wrapper._wrapper_module = None
38 self.wrapper = wrapper.Wrapper() 57 self.wrapper = wrapper.Wrapper()
39 58
59
60class RepoWrapperUnitTest(RepoWrapperTestCase):
61 """Tests helper functions in the repo wrapper
62 """
63
64 def test_version(self):
65 """Make sure _Version works."""
66 with self.assertRaises(SystemExit) as e:
67 with mock.patch('sys.stdout', new_callable=StringIO) as stdout:
68 with mock.patch('sys.stderr', new_callable=StringIO) as stderr:
69 self.wrapper._Version()
70 self.assertEqual(0, e.exception.code)
71 self.assertEqual('', stderr.getvalue())
72 self.assertIn('repo launcher version', stdout.getvalue())
73
74 def test_python_constraints(self):
75 """The launcher should never require newer than main.py."""
76 self.assertGreaterEqual(main.MIN_PYTHON_VERSION_HARD,
77 wrapper.MIN_PYTHON_VERSION_HARD)
78 self.assertGreaterEqual(main.MIN_PYTHON_VERSION_SOFT,
79 wrapper.MIN_PYTHON_VERSION_SOFT)
80 # Make sure the versions are themselves in sync.
81 self.assertGreaterEqual(wrapper.MIN_PYTHON_VERSION_SOFT,
82 wrapper.MIN_PYTHON_VERSION_HARD)
83
84 def test_init_parser(self):
85 """Make sure 'init' GetParser works."""
86 parser = self.wrapper.GetParser(gitc_init=False)
87 opts, args = parser.parse_args([])
88 self.assertEqual([], args)
89 self.assertIsNone(opts.manifest_url)
90
91 def test_gitc_init_parser(self):
92 """Make sure 'gitc-init' GetParser works."""
93 parser = self.wrapper.GetParser(gitc_init=True)
94 opts, args = parser.parse_args([])
95 self.assertEqual([], args)
96 self.assertIsNone(opts.manifest_file)
97
40 def test_get_gitc_manifest_dir_no_gitc(self): 98 def test_get_gitc_manifest_dir_no_gitc(self):
41 """ 99 """
42 Test reading a missing gitc config file 100 Test reading a missing gitc config file
@@ -72,9 +130,442 @@ class RepoWrapperUnitTest(unittest.TestCase):
72 self.assertEqual(self.wrapper.gitc_parse_clientdir('/gitc/manifest-rw/test/extra'), 'test') 130 self.assertEqual(self.wrapper.gitc_parse_clientdir('/gitc/manifest-rw/test/extra'), 'test')
73 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test'), 'test') 131 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test'), 'test')
74 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test/'), 'test') 132 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test/'), 'test')
75 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test/extra'), 'test') 133 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/test/extra'),
134 'test')
76 self.assertEqual(self.wrapper.gitc_parse_clientdir('/gitc/manifest-rw/'), None) 135 self.assertEqual(self.wrapper.gitc_parse_clientdir('/gitc/manifest-rw/'), None)
77 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/'), None) 136 self.assertEqual(self.wrapper.gitc_parse_clientdir('/test/usr/local/google/gitc/'), None)
78 137
138
139class SetGitTrace2ParentSid(RepoWrapperTestCase):
140 """Check SetGitTrace2ParentSid behavior."""
141
142 KEY = 'GIT_TRACE2_PARENT_SID'
143 VALID_FORMAT = re.compile(r'^repo-[0-9]{8}T[0-9]{6}Z-P[0-9a-f]{8}$')
144
145 def test_first_set(self):
146 """Test env var not yet set."""
147 env = {}
148 self.wrapper.SetGitTrace2ParentSid(env)
149 self.assertIn(self.KEY, env)
150 value = env[self.KEY]
151 self.assertRegex(value, self.VALID_FORMAT)
152
153 def test_append(self):
154 """Test env var is appended."""
155 env = {self.KEY: 'pfx'}
156 self.wrapper.SetGitTrace2ParentSid(env)
157 self.assertIn(self.KEY, env)
158 value = env[self.KEY]
159 self.assertTrue(value.startswith('pfx/'))
160 self.assertRegex(value[4:], self.VALID_FORMAT)
161
162 def test_global_context(self):
163 """Check os.environ gets updated by default."""
164 os.environ.pop(self.KEY, None)
165 self.wrapper.SetGitTrace2ParentSid()
166 self.assertIn(self.KEY, os.environ)
167 value = os.environ[self.KEY]
168 self.assertRegex(value, self.VALID_FORMAT)
169
170
171class RunCommand(RepoWrapperTestCase):
172 """Check run_command behavior."""
173
174 def test_capture(self):
175 """Check capture_output handling."""
176 ret = self.wrapper.run_command(['echo', 'hi'], capture_output=True)
177 self.assertEqual(ret.stdout, 'hi\n')
178
179 def test_check(self):
180 """Check check handling."""
181 self.wrapper.run_command(['true'], check=False)
182 self.wrapper.run_command(['true'], check=True)
183 self.wrapper.run_command(['false'], check=False)
184 with self.assertRaises(self.wrapper.RunError):
185 self.wrapper.run_command(['false'], check=True)
186
187
188class RunGit(RepoWrapperTestCase):
189 """Check run_git behavior."""
190
191 def test_capture(self):
192 """Check capture_output handling."""
193 ret = self.wrapper.run_git('--version')
194 self.assertIn('git', ret.stdout)
195
196 def test_check(self):
197 """Check check handling."""
198 with self.assertRaises(self.wrapper.CloneFailure):
199 self.wrapper.run_git('--version-asdfasdf')
200 self.wrapper.run_git('--version-asdfasdf', check=False)
201
202
203class ParseGitVersion(RepoWrapperTestCase):
204 """Check ParseGitVersion behavior."""
205
206 def test_autoload(self):
207 """Check we can load the version from the live git."""
208 ret = self.wrapper.ParseGitVersion()
209 self.assertIsNotNone(ret)
210
211 def test_bad_ver(self):
212 """Check handling of bad git versions."""
213 ret = self.wrapper.ParseGitVersion(ver_str='asdf')
214 self.assertIsNone(ret)
215
216 def test_normal_ver(self):
217 """Check handling of normal git versions."""
218 ret = self.wrapper.ParseGitVersion(ver_str='git version 2.25.1')
219 self.assertEqual(2, ret.major)
220 self.assertEqual(25, ret.minor)
221 self.assertEqual(1, ret.micro)
222 self.assertEqual('2.25.1', ret.full)
223
224 def test_extended_ver(self):
225 """Check handling of extended distro git versions."""
226 ret = self.wrapper.ParseGitVersion(
227 ver_str='git version 1.30.50.696.g5e7596f4ac-goog')
228 self.assertEqual(1, ret.major)
229 self.assertEqual(30, ret.minor)
230 self.assertEqual(50, ret.micro)
231 self.assertEqual('1.30.50.696.g5e7596f4ac-goog', ret.full)
232
233
234class CheckGitVersion(RepoWrapperTestCase):
235 """Check _CheckGitVersion behavior."""
236
237 def test_unknown(self):
238 """Unknown versions should abort."""
239 with mock.patch.object(self.wrapper, 'ParseGitVersion', return_value=None):
240 with self.assertRaises(self.wrapper.CloneFailure):
241 self.wrapper._CheckGitVersion()
242
243 def test_old(self):
244 """Old versions should abort."""
245 with mock.patch.object(
246 self.wrapper, 'ParseGitVersion',
247 return_value=self.wrapper.GitVersion(1, 0, 0, '1.0.0')):
248 with self.assertRaises(self.wrapper.CloneFailure):
249 self.wrapper._CheckGitVersion()
250
251 def test_new(self):
252 """Newer versions should run fine."""
253 with mock.patch.object(
254 self.wrapper, 'ParseGitVersion',
255 return_value=self.wrapper.GitVersion(100, 0, 0, '100.0.0')):
256 self.wrapper._CheckGitVersion()
257
258
259class Requirements(RepoWrapperTestCase):
260 """Check Requirements handling."""
261
262 def test_missing_file(self):
263 """Don't crash if the file is missing (old version)."""
264 testdir = os.path.dirname(os.path.realpath(__file__))
265 self.assertIsNone(self.wrapper.Requirements.from_dir(testdir))
266 self.assertIsNone(self.wrapper.Requirements.from_file(
267 os.path.join(testdir, 'xxxxxxxxxxxxxxxxxxxxxxxx')))
268
269 def test_corrupt_data(self):
270 """If the file can't be parsed, don't blow up."""
271 self.assertIsNone(self.wrapper.Requirements.from_file(__file__))
272 self.assertIsNone(self.wrapper.Requirements.from_data(b'x'))
273
274 def test_valid_data(self):
275 """Make sure we can parse the file we ship."""
276 self.assertIsNotNone(self.wrapper.Requirements.from_data(b'{}'))
277 rootdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
278 self.assertIsNotNone(self.wrapper.Requirements.from_dir(rootdir))
279 self.assertIsNotNone(self.wrapper.Requirements.from_file(os.path.join(
280 rootdir, 'requirements.json')))
281
282 def test_format_ver(self):
283 """Check format_ver can format."""
284 self.assertEqual('1.2.3', self.wrapper.Requirements._format_ver((1, 2, 3)))
285 self.assertEqual('1', self.wrapper.Requirements._format_ver([1]))
286
287 def test_assert_all_unknown(self):
288 """Check assert_all works with incompatible file."""
289 reqs = self.wrapper.Requirements({})
290 reqs.assert_all()
291
292 def test_assert_all_new_repo(self):
293 """Check assert_all accepts new enough repo."""
294 reqs = self.wrapper.Requirements({'repo': {'hard': [1, 0]}})
295 reqs.assert_all()
296
297 def test_assert_all_old_repo(self):
298 """Check assert_all rejects old repo."""
299 reqs = self.wrapper.Requirements({'repo': {'hard': [99999, 0]}})
300 with self.assertRaises(SystemExit):
301 reqs.assert_all()
302
303 def test_assert_all_new_python(self):
304 """Check assert_all accepts new enough python."""
305 reqs = self.wrapper.Requirements({'python': {'hard': sys.version_info}})
306 reqs.assert_all()
307
308 def test_assert_all_old_python(self):
309 """Check assert_all rejects old python."""
310 reqs = self.wrapper.Requirements({'python': {'hard': [99999, 0]}})
311 with self.assertRaises(SystemExit):
312 reqs.assert_all()
313
314 def test_assert_ver_unknown(self):
315 """Check assert_ver works with incompatible file."""
316 reqs = self.wrapper.Requirements({})
317 reqs.assert_ver('xxx', (1, 0))
318
319 def test_assert_ver_new(self):
320 """Check assert_ver allows new enough versions."""
321 reqs = self.wrapper.Requirements({'git': {'hard': [1, 0], 'soft': [2, 0]}})
322 reqs.assert_ver('git', (1, 0))
323 reqs.assert_ver('git', (1, 5))
324 reqs.assert_ver('git', (2, 0))
325 reqs.assert_ver('git', (2, 5))
326
327 def test_assert_ver_old(self):
328 """Check assert_ver rejects old versions."""
329 reqs = self.wrapper.Requirements({'git': {'hard': [1, 0], 'soft': [2, 0]}})
330 with self.assertRaises(SystemExit):
331 reqs.assert_ver('git', (0, 5))
332
333
334class NeedSetupGnuPG(RepoWrapperTestCase):
335 """Check NeedSetupGnuPG behavior."""
336
337 def test_missing_dir(self):
338 """The ~/.repoconfig tree doesn't exist yet."""
339 with TemporaryDirectory() as tempdir:
340 self.wrapper.home_dot_repo = os.path.join(tempdir, 'foo')
341 self.assertTrue(self.wrapper.NeedSetupGnuPG())
342
343 def test_missing_keyring(self):
344 """The keyring-version file doesn't exist yet."""
345 with TemporaryDirectory() as tempdir:
346 self.wrapper.home_dot_repo = tempdir
347 self.assertTrue(self.wrapper.NeedSetupGnuPG())
348
349 def test_empty_keyring(self):
350 """The keyring-version file exists, but is empty."""
351 with TemporaryDirectory() as tempdir:
352 self.wrapper.home_dot_repo = tempdir
353 with open(os.path.join(tempdir, 'keyring-version'), 'w'):
354 pass
355 self.assertTrue(self.wrapper.NeedSetupGnuPG())
356
357 def test_old_keyring(self):
358 """The keyring-version file exists, but it's old."""
359 with TemporaryDirectory() as tempdir:
360 self.wrapper.home_dot_repo = tempdir
361 with open(os.path.join(tempdir, 'keyring-version'), 'w') as fp:
362 fp.write('1.0\n')
363 self.assertTrue(self.wrapper.NeedSetupGnuPG())
364
365 def test_new_keyring(self):
366 """The keyring-version file exists, and is up-to-date."""
367 with TemporaryDirectory() as tempdir:
368 self.wrapper.home_dot_repo = tempdir
369 with open(os.path.join(tempdir, 'keyring-version'), 'w') as fp:
370 fp.write('1000.0\n')
371 self.assertFalse(self.wrapper.NeedSetupGnuPG())
372
373
374class SetupGnuPG(RepoWrapperTestCase):
375 """Check SetupGnuPG behavior."""
376
377 def test_full(self):
378 """Make sure it works completely."""
379 with TemporaryDirectory() as tempdir:
380 self.wrapper.home_dot_repo = tempdir
381 self.wrapper.gpg_dir = os.path.join(self.wrapper.home_dot_repo, 'gnupg')
382 self.assertTrue(self.wrapper.SetupGnuPG(True))
383 with open(os.path.join(tempdir, 'keyring-version'), 'r') as fp:
384 data = fp.read()
385 self.assertEqual('.'.join(str(x) for x in self.wrapper.KEYRING_VERSION),
386 data.strip())
387
388
389class VerifyRev(RepoWrapperTestCase):
390 """Check verify_rev behavior."""
391
392 def test_verify_passes(self):
393 """Check when we have a valid signed tag."""
394 desc_result = self.wrapper.RunResult(0, 'v1.0\n', '')
395 gpg_result = self.wrapper.RunResult(0, '', '')
396 with mock.patch.object(self.wrapper, 'run_git',
397 side_effect=(desc_result, gpg_result)):
398 ret = self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
399 self.assertEqual('v1.0^0', ret)
400
401 def test_unsigned_commit(self):
402 """Check we fall back to signed tag when we have an unsigned commit."""
403 desc_result = self.wrapper.RunResult(0, 'v1.0-10-g1234\n', '')
404 gpg_result = self.wrapper.RunResult(0, '', '')
405 with mock.patch.object(self.wrapper, 'run_git',
406 side_effect=(desc_result, gpg_result)):
407 ret = self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
408 self.assertEqual('v1.0^0', ret)
409
410 def test_verify_fails(self):
411 """Check we fall back to signed tag when we have an unsigned commit."""
412 desc_result = self.wrapper.RunResult(0, 'v1.0-10-g1234\n', '')
413 gpg_result = Exception
414 with mock.patch.object(self.wrapper, 'run_git',
415 side_effect=(desc_result, gpg_result)):
416 with self.assertRaises(Exception):
417 self.wrapper.verify_rev('/', 'refs/heads/stable', '1234', True)
418
419
420class GitCheckoutTestCase(RepoWrapperTestCase):
421 """Tests that use a real/small git checkout."""
422
423 GIT_DIR = None
424 REV_LIST = None
425
426 @classmethod
427 def setUpClass(cls):
428 # Create a repo to operate on, but do it once per-class.
429 cls.GIT_DIR = tempfile.mkdtemp(prefix='repo-rev-tests')
430 run_git = wrapper.Wrapper().run_git
431
432 remote = os.path.join(cls.GIT_DIR, 'remote')
433 os.mkdir(remote)
434
435 # Tests need to assume, that main is default branch at init,
436 # which is not supported in config until 2.28.
437 if git_command.git_require((2, 28, 0)):
438 initstr = '--initial-branch=main'
439 else:
440 # Use template dir for init.
441 templatedir = tempfile.mkdtemp(prefix='.test-template')
442 with open(os.path.join(templatedir, 'HEAD'), 'w') as fp:
443 fp.write('ref: refs/heads/main\n')
444 initstr = '--template=' + templatedir
445
446 run_git('init', initstr, cwd=remote)
447 run_git('commit', '--allow-empty', '-minit', cwd=remote)
448 run_git('branch', 'stable', cwd=remote)
449 run_git('tag', 'v1.0', cwd=remote)
450 run_git('commit', '--allow-empty', '-m2nd commit', cwd=remote)
451 cls.REV_LIST = run_git('rev-list', 'HEAD', cwd=remote).stdout.splitlines()
452
453 run_git('init', cwd=cls.GIT_DIR)
454 run_git('fetch', remote, '+refs/heads/*:refs/remotes/origin/*', cwd=cls.GIT_DIR)
455
456 @classmethod
457 def tearDownClass(cls):
458 if not cls.GIT_DIR:
459 return
460
461 shutil.rmtree(cls.GIT_DIR)
462
463
464class ResolveRepoRev(GitCheckoutTestCase):
465 """Check resolve_repo_rev behavior."""
466
467 def test_explicit_branch(self):
468 """Check refs/heads/branch argument."""
469 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/stable')
470 self.assertEqual('refs/heads/stable', rrev)
471 self.assertEqual(self.REV_LIST[1], lrev)
472
473 with self.assertRaises(wrapper.CloneFailure):
474 self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/heads/unknown')
475
476 def test_explicit_tag(self):
477 """Check refs/tags/tag argument."""
478 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/tags/v1.0')
479 self.assertEqual('refs/tags/v1.0', rrev)
480 self.assertEqual(self.REV_LIST[1], lrev)
481
482 with self.assertRaises(wrapper.CloneFailure):
483 self.wrapper.resolve_repo_rev(self.GIT_DIR, 'refs/tags/unknown')
484
485 def test_branch_name(self):
486 """Check branch argument."""
487 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'stable')
488 self.assertEqual('refs/heads/stable', rrev)
489 self.assertEqual(self.REV_LIST[1], lrev)
490
491 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'main')
492 self.assertEqual('refs/heads/main', rrev)
493 self.assertEqual(self.REV_LIST[0], lrev)
494
495 def test_tag_name(self):
496 """Check tag argument."""
497 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, 'v1.0')
498 self.assertEqual('refs/tags/v1.0', rrev)
499 self.assertEqual(self.REV_LIST[1], lrev)
500
501 def test_full_commit(self):
502 """Check specific commit argument."""
503 commit = self.REV_LIST[0]
504 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, commit)
505 self.assertEqual(commit, rrev)
506 self.assertEqual(commit, lrev)
507
508 def test_partial_commit(self):
509 """Check specific (partial) commit argument."""
510 commit = self.REV_LIST[0][0:20]
511 rrev, lrev = self.wrapper.resolve_repo_rev(self.GIT_DIR, commit)
512 self.assertEqual(self.REV_LIST[0], rrev)
513 self.assertEqual(self.REV_LIST[0], lrev)
514
515 def test_unknown(self):
516 """Check unknown ref/commit argument."""
517 with self.assertRaises(wrapper.CloneFailure):
518 self.wrapper.resolve_repo_rev(self.GIT_DIR, 'boooooooya')
519
520
521class CheckRepoVerify(RepoWrapperTestCase):
522 """Check check_repo_verify behavior."""
523
524 def test_no_verify(self):
525 """Always fail with --no-repo-verify."""
526 self.assertFalse(self.wrapper.check_repo_verify(False))
527
528 def test_gpg_initialized(self):
529 """Should pass if gpg is setup already."""
530 with mock.patch.object(self.wrapper, 'NeedSetupGnuPG', return_value=False):
531 self.assertTrue(self.wrapper.check_repo_verify(True))
532
533 def test_need_gpg_setup(self):
534 """Should pass/fail based on gpg setup."""
535 with mock.patch.object(self.wrapper, 'NeedSetupGnuPG', return_value=True):
536 with mock.patch.object(self.wrapper, 'SetupGnuPG') as m:
537 m.return_value = True
538 self.assertTrue(self.wrapper.check_repo_verify(True))
539
540 m.return_value = False
541 self.assertFalse(self.wrapper.check_repo_verify(True))
542
543
544class CheckRepoRev(GitCheckoutTestCase):
545 """Check check_repo_rev behavior."""
546
547 def test_verify_works(self):
548 """Should pass when verification passes."""
549 with mock.patch.object(self.wrapper, 'check_repo_verify', return_value=True):
550 with mock.patch.object(self.wrapper, 'verify_rev', return_value='12345'):
551 rrev, lrev = self.wrapper.check_repo_rev(self.GIT_DIR, 'stable')
552 self.assertEqual('refs/heads/stable', rrev)
553 self.assertEqual('12345', lrev)
554
555 def test_verify_fails(self):
556 """Should fail when verification fails."""
557 with mock.patch.object(self.wrapper, 'check_repo_verify', return_value=True):
558 with mock.patch.object(self.wrapper, 'verify_rev', side_effect=Exception):
559 with self.assertRaises(Exception):
560 self.wrapper.check_repo_rev(self.GIT_DIR, 'stable')
561
562 def test_verify_ignore(self):
563 """Should pass when verification is disabled."""
564 with mock.patch.object(self.wrapper, 'verify_rev', side_effect=Exception):
565 rrev, lrev = self.wrapper.check_repo_rev(self.GIT_DIR, 'stable', repo_verify=False)
566 self.assertEqual('refs/heads/stable', rrev)
567 self.assertEqual(self.REV_LIST[1], lrev)
568
569
79if __name__ == '__main__': 570if __name__ == '__main__':
80 unittest.main() 571 unittest.main()