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