Harden runtime distribution acceptance
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SCRIPT = ROOT / "tools/checks/runtime-image-smoke.py"
|
||||
SPEC = importlib.util.spec_from_file_location("runtime_image_smoke", SCRIPT)
|
||||
assert SPEC is not None and SPEC.loader is not None
|
||||
MODULE = importlib.util.module_from_spec(SPEC)
|
||||
sys.modules[SPEC.name] = MODULE
|
||||
SPEC.loader.exec_module(MODULE)
|
||||
|
||||
|
||||
class RuntimeImageSmokeTests(unittest.TestCase):
|
||||
def test_selects_the_exact_platform_digest(self) -> None:
|
||||
with tempfile.TemporaryDirectory(prefix="govoplan-runtime-smoke-") as value:
|
||||
path = Path(value) / "metadata.json"
|
||||
path.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"index": "registry.example/api@sha256:" + "a" * 64,
|
||||
"platforms": {
|
||||
"linux/amd64": "registry.example/api@sha256:" + "1" * 64,
|
||||
"linux/arm64": "registry.example/api@sha256:" + "2" * 64,
|
||||
},
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
"registry.example/api@sha256:" + "2" * 64,
|
||||
MODULE.platform_image(path, "linux/arm64", "API"),
|
||||
)
|
||||
|
||||
def test_rejects_mutable_or_missing_platform_images(self) -> None:
|
||||
with tempfile.TemporaryDirectory(prefix="govoplan-runtime-smoke-") as value:
|
||||
path = Path(value) / "metadata.json"
|
||||
path.write_text(
|
||||
json.dumps({"platforms": {"linux/amd64": "registry.example/api:latest"}}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(MODULE.SmokeError, "exact sha256"):
|
||||
MODULE.platform_image(path, "linux/amd64", "API")
|
||||
with self.assertRaisesRegex(MODULE.SmokeError, "exact sha256"):
|
||||
MODULE.platform_image(path, "linux/arm64", "API")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user