blob: e6da4591bcd43f88c38916003b65952b2757d817 [file] [edit]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import os
import tempfile
import unittest
import unittest.mock as mock
import package_repository
class TestPackageRepository(unittest.TestCase):
def test_extract_package_name_custom_domain(self) -> None:
"""Test that package name is extracted correctly for standard and custom domain URLs."""
self.assertEqual(
package_repository.extract_package_name_from_url(
"fuchsia-pkg://fuchsia.com/my-pkg#meta/my-component.cm"
),
"my-pkg",
)
self.assertEqual(
package_repository.extract_package_name_from_url(
"fuchsia-pkg://custom-repo.org/custom-pkg#meta/test.cm"
),
"custom-pkg",
)
def test_targets_multi_slash_key(self) -> None:
"""Test that target keys with multiple slashes do not raise ValueError."""
with tempfile.TemporaryDirectory() as td:
repo_file = os.path.join(td, "package-repositories.json")
targets_file = os.path.join(td, "targets.json")
with open(repo_file, "w") as f:
json.dump([{"targets": "targets.json"}], f)
with open(targets_file, "w") as f:
json.dump(
{
"signed": {
"targets": {
"multi/part/target/0": {
"custom": {"merkle": "abc123merkle"}
}
}
}
},
f,
)
exec_env = mock.MagicMock()
exec_env.package_repositories_file = repo_file
repo = package_repository.PackageRepository.from_env(exec_env)
self.assertEqual(repo.name_to_merkle.get("multi"), "abc123merkle")
def test_resolve_component_url(self) -> None:
repo = package_repository.PackageRepository({"my-pkg": "12345"})
resolved = repo.resolve_component_url(
"fuchsia-pkg://custom-domain.com/my-pkg#meta/test.cm"
)
self.assertEqual(
resolved,
"fuchsia-pkg://custom-domain.com/my-pkg?hash=12345#meta/test.cm",
)
if __name__ == "__main__":
unittest.main()