GuestOps/tests/test_release_record.py
wolf-demon a3ef408de6
Some checks failed
Build and verify web migration / verify (push) Has been cancelled
Prepare 0.2.0 Gate B pilot candidate
2026-09-29 21:17:40 +01:00

83 lines
2.7 KiB
Python

import hashlib
import json
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
class ReleaseRecordTests(unittest.TestCase):
def test_writes_versions_checksum_and_immutable_image_ids(self):
with tempfile.TemporaryDirectory() as directory:
artifact = Path(directory) / "guestops-images.tar.gz"
output = Path(directory) / "release-record.json"
artifact.write_bytes(b"reviewed image archive")
subprocess.run(
[
sys.executable,
str(ROOT / "deploy" / "release_record.py"),
"--artifact",
str(artifact),
"--commit",
"a" * 40,
"--api-image",
"guestops-api:" + "a" * 40,
"--api-id",
"sha256:api",
"--worker-image",
"guestops-worker:" + "a" * 40,
"--worker-id",
"sha256:worker",
"--output",
str(output),
],
check=True,
)
record = json.loads(output.read_text(encoding="utf-8"))
self.assertEqual(record["version"], "0.2.0")
self.assertEqual(record["commit"], "a" * 40)
self.assertEqual(record["images"]["api"]["id"], "sha256:api")
self.assertEqual(
record["artifact"]["sha256"],
hashlib.sha256(artifact.read_bytes()).hexdigest(),
)
def test_rejects_abbreviated_commit(self):
with tempfile.TemporaryDirectory() as directory:
artifact = Path(directory) / "images.tar.gz"
artifact.write_bytes(b"fixture")
result = subprocess.run(
[
sys.executable,
str(ROOT / "deploy" / "release_record.py"),
"--artifact",
str(artifact),
"--commit",
"abc123",
"--api-image",
"api:test",
"--api-id",
"sha256:api",
"--worker-image",
"worker:test",
"--worker-id",
"sha256:worker",
"--output",
str(Path(directory) / "record.json"),
],
capture_output=True,
text=True,
)
self.assertNotEqual(result.returncode, 0)
self.assertIn("full 40-character Git SHA", result.stderr)
if __name__ == "__main__":
unittest.main()