from datetime import datetime, timedelta, timezone import copy import json from pathlib import Path import subprocess import sys import unittest ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT / 'scripts')) from prometheus_export import labels, render class ExportTests(unittest.TestCase): def setUp(self): self.now = datetime(2026, 9, 28, tzinfo=timezone.utc) self.contract = json.loads((ROOT / 'contracts/platform-assurance-2026-09-28.json').read_text()) self.report = dict(schema='railiance-platform.assurance-signal.v1', cluster_uid='a553c742-0115-43d4-99a4-a5ca56fe0786', evaluated_at=self.now.isoformat(), signals={s: dict(state='healthy', owner='railiance-platform') for s in self.contract['signals']}, transport='unmonitored', guarantees='unsupported', threshold_status='local-diagnostic-only', healthy=True) def test_all_states_preserved_including_token_renewal(self): for state in ('healthy', 'failed', 'missing', 'unavailable', 'stale'): self.report['signals']['eso.token-renewal']['state'] = state self.report['healthy'] = state == 'healthy' output = render(self.report, self.contract, self.now) samples = [line for line in output.splitlines() if line.startswith('railiance_assurance_state')] self.assertEqual(len(samples), 120) self.assertEqual(sum(line.endswith(' 1') for line in samples), 24) self.assertIn(f'signal="eso.token-renewal",state="{state}"}} 1', output) def test_retry_preserves_time_and_does_not_mutate_report(self): before = copy.deepcopy(self.report) self.assertEqual(render(self.report, self.contract, self.now), render(self.report, self.contract, self.now + timedelta(seconds=900))) self.assertEqual(self.report, before) for delta in (-1, 901): with self.assertRaises(ValueError): render(self.report, self.contract, self.now + timedelta(seconds=delta)) def test_scope_drift_is_rejected(self): self.report['signals']['unexpected'] = dict(state='healthy', owner='railiance-platform') with self.assertRaises(ValueError): render(self.report, self.contract, self.now) def test_label_escaping(self): self.assertEqual(labels({'signal': 'a"b\\c\nd'}), '{signal="a\\"b\\\\c\\nd"}') def test_cli_failure_has_no_metrics_stdout(self): result = subprocess.run([sys.executable, str(ROOT / 'scripts/prometheus_export.py'), '--contract', str(ROOT / 'contracts/platform-assurance-2026-09-28.json'), str(ROOT / 'tests/nonexistent-report.json')], capture_output=True, text=True) self.assertEqual(result.returncode, 2) self.assertEqual(result.stdout, '') self.assertIn('invalid-or-expired-report', result.stderr)