Skip to content

Commit 191728a

Browse files
committed
Add test coverage for delegated hash bins
This change adds tests coverage for `path_hash_prefixes` and verifies that role names matching specific prefixed successfully find and download the corresponding metadata files and do not succeed to find existing, but non-matching files Signed-off-by: Ivana Atanasova <[email protected]>
1 parent 31fd8d4 commit 191728a

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

tests/test_updater_delegation_graphs.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,120 @@ def test_safely_encoded_rolenames(self) -> None:
363363
self.assertListEqual(self.sim.fetch_tracker.metadata, exp_calls)
364364

365365

366+
hash_bins_metadata: utils.DataSet = {
367+
"delegated hash bins": DelegationsTestCase(
368+
delegations=[
369+
TestDelegation("targets", "f8-ff", paths=None, path_hash_prefixes=[
370+
"f8",
371+
"f9",
372+
"fa",
373+
"fb",
374+
"fc",
375+
"fd",
376+
"fe",
377+
"ff",
378+
]),
379+
TestDelegation("targets", "20-27", paths=None, path_hash_prefixes=[
380+
"20",
381+
"21",
382+
"22",
383+
"23",
384+
"24",
385+
"25",
386+
"26",
387+
"27",
388+
]),
389+
],
390+
target_files=[
391+
TestTarget(
392+
"f8-ff",
393+
b"fff0838676c1dacb8827b02511e89f85b43814a74dd2c3ffb31d952a1db94311",
394+
"non_matching_path_to_prefix.ext",
395+
),
396+
TestTarget(
397+
"20-27",
398+
b"22992ae806e6d652835f3c84e169f05127da69e599f902e4dbdc6ff27ce46d01",
399+
"delegate_1.ext",
400+
),
401+
],
402+
visited_order=["f8-ff", "20-27"],
403+
),
404+
}
405+
406+
@utils.run_sub_tests_with_dataset(hash_bins_metadata)
407+
def test_delegated_hash_bins(self, test_data: DelegationsTestCase) -> None:
408+
try:
409+
self._init_repo(test_data)
410+
self.setup_subtest()
411+
412+
updater = self._init_updater()
413+
# Call explicitly refresh to simplify the expected_calls list
414+
updater.refresh()
415+
self.sim.fetch_tracker.metadata.clear()
416+
417+
roles_pref_map = [
418+
(
419+
"f8-ff",
420+
[
421+
"f8",
422+
"f9",
423+
"fa",
424+
"fb",
425+
"fc",
426+
"fd",
427+
"fe",
428+
"ff",
429+
],
430+
),
431+
(
432+
"20-27",
433+
[
434+
"20",
435+
"21",
436+
"22",
437+
"23",
438+
"24",
439+
"25",
440+
"26",
441+
"27",
442+
],
443+
),
444+
]
445+
446+
delegated_role1 = DelegatedRole(
447+
roles_pref_map[0][0], [], 1, False, roles_pref_map[0][1]
448+
)
449+
delegated_role1.path_hash_prefixes = roles_pref_map[0][1]
450+
451+
delegated_role2 = DelegatedRole(
452+
roles_pref_map[1][0], [], 1, False, roles_pref_map[1][1]
453+
)
454+
delegated_role2.path_hash_prefixes = roles_pref_map[1][1]
455+
456+
spec_version = ".".join(SPECIFICATION_VERSION)
457+
targets = Targets(1, spec_version, self.sim.safe_expiry, {}, None)
458+
self.sim.add_delegation("targets", delegated_role1, targets)
459+
self.sim.add_delegation("f8-ff", delegated_role2, targets)
460+
461+
# verify that no metadata file was downloaded as expected
462+
# for non-existing path
463+
target_info = updater.get_targetinfo("missingpath")
464+
self.assertIsNone(target_info)
465+
466+
# verify that no metadata file was downloaded for existing
467+
# path that doesn't match correct prefix
468+
target_info = updater.get_targetinfo("non_matching_path_to_prefix.ext")
469+
self.assertIsNone(target_info)
470+
471+
# verify that the target info was successfully found
472+
# and the correct delegated metadata file was downloaded
473+
target_info = updater.get_targetinfo("delegate_1.ext")
474+
assert target_info is not None
475+
self.assertEqual(target_info.path, "delegate_1.ext")
476+
477+
finally:
478+
self.teardown_subtest()
479+
366480
class TestTargetFileSearch(TestDelegations):
367481
r"""
368482
Create a single repository with the following delegations:

0 commit comments

Comments
 (0)