Skip to content

Commit afb5796

Browse files
committed
Add tests for invalid delegated role metadata
Extend TestDelegationsGraphs with a test case for unsigned metadata. Signed-off-by: Teodora Sechkova <[email protected]>
1 parent caee91f commit afb5796

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

tests/test_updater_delegation_graphs.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
DelegatedRole,
2222
Targets,
2323
)
24+
from tuf.exceptions import UnsignedMetadataError
2425
from tuf.ngclient import Updater
2526

2627

@@ -281,6 +282,45 @@ def test_graph_traversal(self, test_data: DelegationsTestCase) -> None:
281282
finally:
282283
self.teardown_subtest()
283284

285+
invalid_metadata: utils.DataSet = {
286+
"unsigned delegated role": DelegationsTestCase(
287+
delegations=[
288+
TestDelegation("targets", "A"),
289+
TestDelegation("targets", "B"),
290+
TestDelegation("A", "C"),
291+
],
292+
# The traversal stops after visiting an invalid role
293+
visited_order=["A"],
294+
)
295+
}
296+
297+
@utils.run_sub_tests_with_dataset(invalid_metadata)
298+
def test_invalid_metadata(self, test_data: DelegationsTestCase) -> None:
299+
try:
300+
self._init_repo(test_data)
301+
# The invalid role is the last visited
302+
invalid_role = test_data.visited_order[-1]
303+
self.sim.signers[invalid_role].clear()
304+
305+
self.setup_subtest()
306+
# The invalid role metadata must not be persisted
307+
exp_files = [*TOP_LEVEL_ROLE_NAMES, *test_data.visited_order[:-1]]
308+
exp_calls = [(role, 1) for role in test_data.visited_order]
309+
310+
updater = self._init_updater()
311+
# Call explicitly refresh to simplify the expected_calls list
312+
updater.refresh()
313+
self.sim.fetch_tracker.metadata.clear()
314+
315+
with self.assertRaises(UnsignedMetadataError):
316+
updater.get_targetinfo("missingpath")
317+
# Check that there were no visited roles after the invalid one
318+
# and only the valid metadata files were persisted
319+
self.assertListEqual(self.sim.fetch_tracker.metadata, exp_calls)
320+
self._assert_files_exist(exp_files)
321+
finally:
322+
self.teardown_subtest()
323+
284324

285325
class TestTargetFileSearch(TestDelegations):
286326
"""

0 commit comments

Comments
 (0)