the-custodian/tests/test_weekly_release_owner.py
codex eda153c7a1 Name the release unit and its owner on a weekly recommendation.
build_report calls the claim lookup. A workload with no claim, and a label with no claim, receive neither a unit id nor a declaration owner.
2026-10-22 00:56:09 +02:00

91 lines
3.7 KiB
Python

"""Release-unit names on the weekly allocation recommendation."""
import importlib.util
from pathlib import Path
import unittest
ROOT = Path(__file__).resolve().parents[1]
spec = importlib.util.spec_from_file_location("weekly", ROOT / "scripts/weekly_allocation_report.py")
weekly = importlib.util.module_from_spec(spec)
spec.loader.exec_module(weekly)
END = "2026-10-19T06:00:00+00:00"
RESOURCE = "resource:railiance:reef-railiance:k3s"
INDEX = {
"schema": "release-registry.index.v1",
"units": [
{
"unit_id": "flex-auth-secrets-engine",
"declaration": {
"unit_id": "flex-auth-secrets-engine",
"owner": "access-engine",
"workloads": [
{"kind": "Deployment", "namespace": "flex-auth", "name": "flex-auth-secrets-engine"}
],
},
}
],
}
def _workload(namespace, name, labels=None):
item = {
"namespace": namespace, "workload": name, "pods": 1,
"requests": {"cpu_millicores": 60, "memory_bytes": 256},
"limits": {"cpu_millicores": 1000, "memory_bytes": 1024},
}
if labels:
item["labels"] = labels
return item
class WeeklyReleaseOwnerTests(unittest.TestCase):
def report(self):
cluster = {
"schema_version": "railiance.cluster-resource-observation.v1",
"resource_id": RESOURCE, "captured_at": END,
"utilization": {"workloads": [
_workload("flex-auth", "flex-auth-secrets-engine"),
_workload("flex-auth", "flex-auth-tenant-engine"),
_workload("forgejo", "forge", {"railiance.io/release-unit": "flex-auth-secrets-engine"}),
]},
}
allocation = {
"schema": "custodian.allocation-reconcile.v1", "captured_at": END,
"host": {"cluster_resource_id": RESOURCE}, "count_host_and_cluster_cpus_once": True,
"workloads": [
{"namespace": "flex-auth", "workload": "flex-auth-secrets-engine", "owner": "namespace-map"},
{"namespace": "flex-auth", "workload": "flex-auth-tenant-engine", "owner": "namespace-map"},
{"namespace": "forgejo", "workload": "forge", "owner": "namespace-map"},
],
}
return weekly.build_report(
cluster, allocation,
{"captured_at": END, "window": "7d", "step": "5m", "queries": {}},
{"id": RESOURCE},
{"source_observation": END, "revisions": {"collector": "a" * 40}},
as_of=END, release_index=INDEX,
)
def by_name(self, report):
return {item["workload"]: item for item in report["recommendations"]}
def test_claim_label_and_gap_name_unit_and_owner(self):
first = self.by_name(self.report())
second = self.by_name(self.report())
claimed = first["flex-auth-secrets-engine"]
self.assertEqual(claimed["release_unit"], "flex-auth-secrets-engine")
self.assertEqual(claimed["owner"], "access-engine")
self.assertEqual(claimed["release_owner"], "access-engine")
self.assertEqual(second["flex-auth-secrets-engine"]["release_unit"], claimed["release_unit"])
self.assertEqual(second["flex-auth-secrets-engine"]["owner"], claimed["owner"])
unclaimed = first["flex-auth-tenant-engine"]
self.assertIsNone(unclaimed["release_unit"])
self.assertIsNone(unclaimed["release_owner"])
labeled = first["forge"]
self.assertIsNone(labeled["release_unit"])
self.assertIsNone(labeled["release_owner"])
self.assertNotEqual(labeled["owner"], "flex-auth-secrets-engine")
if __name__ == "__main__":
unittest.main()