Skip to content

Commit f0a5f63

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 1ef9010 commit f0a5f63

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

tests/test_updater_delegation_graphs.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
DelegatedRole,
2323
Targets,
2424
)
25+
from tuf.exceptions import UnsignedMetadataError
2526
from tuf.ngclient import Updater
2627

2728

@@ -287,6 +288,47 @@ def test_graph_traversal(self, test_data: DelegationsTestCase) -> None:
287288
finally:
288289
self.teardown_subtest()
289290

291+
invalid_metadata: utils.DataSet = {
292+
"unsigned delegated role": DelegationsTestCase(
293+
delegations=[
294+
TestDelegation("targets", "A"),
295+
TestDelegation("targets", "B"),
296+
TestDelegation("A", "C"),
297+
],
298+
# The traversal stops after visiting an invalid role
299+
visited_order=["A"],
300+
)
301+
}
302+
303+
@utils.run_sub_tests_with_dataset(invalid_metadata)
304+
def test_invalid_metadata(self, test_data: DelegationsTestCase) -> None:
305+
try:
306+
self._init_repo(test_data)
307+
# The invalid role is the last visited
308+
invalid_role = test_data.visited_order[-1]
309+
self.sim.signers[invalid_role].clear()
310+
311+
self.setup_subtest()
312+
# The invalid role metadata must not be persisted
313+
exp_files = [*TOP_LEVEL_ROLE_NAMES, *test_data.visited_order[:-1]]
314+
exp_calls = [call(role, 1) for role in test_data.visited_order]
315+
316+
updater = self._init_updater()
317+
# Call explicitly refresh to simplify the expected_calls list
318+
updater.refresh()
319+
320+
with patch.object(
321+
self.sim, "_fetch_metadata", wraps=self.sim._fetch_metadata
322+
) as wrapped_fetch:
323+
324+
with self.assertRaises(UnsignedMetadataError):
325+
updater.get_targetinfo("missingpath")
326+
327+
self.assertListEqual(wrapped_fetch.call_args_list, exp_calls)
328+
self._assert_files_exist(exp_files)
329+
finally:
330+
self.teardown_subtest()
331+
290332

291333
class TestTargetFileSearch(TestDelegations):
292334
"""

0 commit comments

Comments
 (0)