2022-01-05 19:40:21 +00:00
|
|
|
# Copyright 2022, New York University and the TUF contributors
|
|
|
|
|
# SPDX-License-Identifier: MIT OR Apache-2.0
|
|
|
|
|
|
2024-03-07 08:05:36 +00:00
|
|
|
"""Test ngclient Updater validations."""
|
2022-01-05 19:40:21 +00:00
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
import tempfile
|
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
from tests import utils
|
|
|
|
|
from tests.repository_simulator import RepositorySimulator
|
|
|
|
|
from tuf.ngclient import Updater
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestUpdater(unittest.TestCase):
|
|
|
|
|
"""Test ngclient Updater input validation."""
|
|
|
|
|
|
|
|
|
|
def setUp(self) -> None:
|
|
|
|
|
self.temp_dir = tempfile.TemporaryDirectory()
|
|
|
|
|
self.metadata_dir = os.path.join(self.temp_dir.name, "metadata")
|
|
|
|
|
self.targets_dir = os.path.join(self.temp_dir.name, "targets")
|
|
|
|
|
os.mkdir(self.metadata_dir)
|
|
|
|
|
os.mkdir(self.targets_dir)
|
|
|
|
|
|
2026-02-06 12:58:53 +00:00
|
|
|
# Setup the repository
|
2022-01-05 19:40:21 +00:00
|
|
|
self.sim = RepositorySimulator()
|
|
|
|
|
|
|
|
|
|
def tearDown(self) -> None:
|
|
|
|
|
self.temp_dir.cleanup()
|
|
|
|
|
|
|
|
|
|
def _new_updater(self) -> Updater:
|
|
|
|
|
return Updater(
|
|
|
|
|
self.metadata_dir,
|
|
|
|
|
"https://example.com/metadata/",
|
|
|
|
|
self.targets_dir,
|
|
|
|
|
"https://example.com/targets/",
|
|
|
|
|
fetcher=self.sim,
|
2026-01-25 11:50:37 +00:00
|
|
|
bootstrap=self.sim.signed_roots[0],
|
2022-01-05 19:40:21 +00:00
|
|
|
)
|
|
|
|
|
|
2026-01-25 11:50:37 +00:00
|
|
|
def test_bootstrap_argument_required(self) -> None:
|
|
|
|
|
with self.assertRaises(TypeError) as ctx:
|
|
|
|
|
Updater(
|
|
|
|
|
self.metadata_dir,
|
|
|
|
|
"https://example.com/metadata/",
|
|
|
|
|
fetcher=self.sim,
|
2026-02-06 12:58:53 +00:00
|
|
|
) # type: ignore[call-arg]
|
2026-01-25 11:50:37 +00:00
|
|
|
self.assertIn("bootstrap", str(ctx.exception))
|
|
|
|
|
|
2022-01-05 19:40:21 +00:00
|
|
|
def test_local_target_storage_fail(self) -> None:
|
|
|
|
|
self.sim.add_target("targets", b"content", "targetpath")
|
|
|
|
|
self.sim.targets.version += 1
|
|
|
|
|
self.sim.update_snapshot()
|
|
|
|
|
|
|
|
|
|
updater = self._new_updater()
|
|
|
|
|
target_info = updater.get_targetinfo("targetpath")
|
|
|
|
|
assert target_info is not None
|
|
|
|
|
with self.assertRaises(FileNotFoundError):
|
|
|
|
|
updater.download_target(target_info, filepath="")
|
|
|
|
|
|
|
|
|
|
def test_non_existing_metadata_dir(self) -> None:
|
2026-01-25 11:50:37 +00:00
|
|
|
non_existing_dir = os.path.join(self.temp_dir.name, "non-existing-dir")
|
2022-01-05 19:40:21 +00:00
|
|
|
with self.assertRaises(FileNotFoundError):
|
|
|
|
|
# Initialize Updater with non-existing metadata_dir
|
|
|
|
|
Updater(
|
2026-01-25 11:50:37 +00:00
|
|
|
non_existing_dir,
|
2022-01-05 19:40:21 +00:00
|
|
|
"https://example.com/metadata/",
|
|
|
|
|
fetcher=self.sim,
|
2026-01-25 11:50:37 +00:00
|
|
|
bootstrap=None,
|
2022-01-05 19:40:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
utils.configure_test_logging(sys.argv)
|
|
|
|
|
unittest.main()
|