feat: add ops center and node onboarding flow
This commit is contained in:
117
domain-api/tests/test_prepare_final_release.py
Normal file
117
domain-api/tests/test_prepare_final_release.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class PrepareFinalReleaseTests(unittest.TestCase):
|
||||
def test_prepare_final_release_blocks_when_smoke_is_false_even_if_verify_passes(self) -> None:
|
||||
repo_root = Path(__file__).resolve().parents[2]
|
||||
source_script = repo_root / "prepare_final_release.sh"
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
root = Path(temp_dir)
|
||||
release_root = root / "release"
|
||||
release_root.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
(root / "prepare_final_release.sh").write_text(source_script.read_text(encoding="utf-8"), encoding="utf-8")
|
||||
(root / "package_domain_release.sh").write_text(
|
||||
"#!/usr/bin/env bash\n"
|
||||
"set -euo pipefail\n"
|
||||
"mkdir -p \"$PWD/release\"\n"
|
||||
"cat > \"$PWD/release/latest_release.json\" <<'EOF'\n"
|
||||
"{\n"
|
||||
" \"package_name\": \"domaincheck_release_test\",\n"
|
||||
" \"archive_path\": \"/tmp/domaincheck_release_test.tar.gz\",\n"
|
||||
" \"sha256_path\": \"/tmp/domaincheck_release_test.sha256.txt\",\n"
|
||||
" \"sha256\": \"abc\",\n"
|
||||
" \"smoke_test_ok\": false,\n"
|
||||
" \"smoke_test_message\": \"skipped by env\"\n"
|
||||
"}\n"
|
||||
"EOF\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(root / "verify_domain_release.sh").write_text(
|
||||
"#!/usr/bin/env bash\n"
|
||||
"set -euo pipefail\n"
|
||||
"printf '%s\\n' '{\"ok\": true, \"archive\": \"/tmp/domaincheck_release_test.tar.gz\"}'\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
os.chmod(root / "prepare_final_release.sh", 0o755)
|
||||
os.chmod(root / "package_domain_release.sh", 0o755)
|
||||
os.chmod(root / "verify_domain_release.sh", 0o755)
|
||||
|
||||
result = subprocess.run(
|
||||
["bash", str(root / "prepare_final_release.sh")],
|
||||
cwd=root,
|
||||
check=True,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
|
||||
payload = json.loads((release_root / "final_release_report.json").read_text(encoding="utf-8"))
|
||||
self.assertFalse(payload["ok"])
|
||||
self.assertEqual("blocked", payload["release_gate"]["decision"])
|
||||
self.assertTrue(payload["release_gate"]["verify_ok"])
|
||||
self.assertFalse(payload["release_gate"]["smoke_test_ok"])
|
||||
self.assertIn("smoke_test_failed_or_skipped", payload["release_gate"]["blocked_reasons"])
|
||||
self.assertIn('"ok": false', result.stdout)
|
||||
|
||||
def test_prepare_final_release_ready_when_verify_and_smoke_both_pass(self) -> None:
|
||||
repo_root = Path(__file__).resolve().parents[2]
|
||||
source_script = repo_root / "prepare_final_release.sh"
|
||||
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
root = Path(temp_dir)
|
||||
release_root = root / "release"
|
||||
release_root.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
(root / "prepare_final_release.sh").write_text(source_script.read_text(encoding="utf-8"), encoding="utf-8")
|
||||
(root / "package_domain_release.sh").write_text(
|
||||
"#!/usr/bin/env bash\n"
|
||||
"set -euo pipefail\n"
|
||||
"mkdir -p \"$PWD/release\"\n"
|
||||
"cat > \"$PWD/release/latest_release.json\" <<'EOF'\n"
|
||||
"{\n"
|
||||
" \"package_name\": \"domaincheck_release_test\",\n"
|
||||
" \"archive_path\": \"/tmp/domaincheck_release_test.tar.gz\",\n"
|
||||
" \"sha256_path\": \"/tmp/domaincheck_release_test.sha256.txt\",\n"
|
||||
" \"sha256\": \"abc\",\n"
|
||||
" \"smoke_test_ok\": true,\n"
|
||||
" \"smoke_test_message\": \"all checks passed (1/1)\"\n"
|
||||
"}\n"
|
||||
"EOF\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(root / "verify_domain_release.sh").write_text(
|
||||
"#!/usr/bin/env bash\n"
|
||||
"set -euo pipefail\n"
|
||||
"printf '%s\\n' '{\"ok\": true, \"archive\": \"/tmp/domaincheck_release_test.tar.gz\"}'\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
os.chmod(root / "prepare_final_release.sh", 0o755)
|
||||
os.chmod(root / "package_domain_release.sh", 0o755)
|
||||
os.chmod(root / "verify_domain_release.sh", 0o755)
|
||||
|
||||
subprocess.run(
|
||||
["bash", str(root / "prepare_final_release.sh")],
|
||||
cwd=root,
|
||||
check=True,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
|
||||
payload = json.loads((release_root / "final_release_report.json").read_text(encoding="utf-8"))
|
||||
self.assertTrue(payload["ok"])
|
||||
self.assertEqual("ready", payload["release_gate"]["decision"])
|
||||
self.assertEqual([], payload["release_gate"]["blocked_reasons"])
|
||||
self.assertTrue(payload["release_gate"]["verify_ok"])
|
||||
self.assertTrue(payload["release_gate"]["smoke_test_ok"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user