railiance-platform/tests/test_eso_auth_recovery.py
codex 3759850cc4
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Document recovered ESO lanes and recognize explicit invalid-token responses
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
2026-09-05 18:51:40 +02:00

50 lines
2.6 KiB
Python

import importlib.util
import json
from pathlib import Path
import sys
from types import SimpleNamespace
import unittest
from unittest.mock import patch
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / 'scripts'))
import repair_eso_kubernetes_auth as repair
class EsoRecoveryTests(unittest.TestCase):
def setUp(self):
self.lane = json.loads((ROOT / 'openbao/eso-auth-recovery/lanes.json').read_text())[0]
def test_role_rejects_wildcard_namespace_added_policy_and_unbounded_ttl(self):
native = {k:900 if v == '15m' else v for k,v in repair.role_payload(self.lane).items()}
repair.check_role(native, self.lane)
for key,value in [('bound_service_account_namespaces',['*']),('token_policies',['root']),('token_explicit_max_ttl',0),('audience','other')]:
with self.assertRaises(repair.LaneError):
repair.check_role(dict(native, **{key:value}), self.lane)
def test_custody_disagreement_stops_before_serviceaccount_or_auth_write(self):
identity = SimpleNamespace(stdout=json.dumps({'data':{'policies':['platform-admin']}}).encode())
with patch.object(repair,'assert_cluster'), patch.object(repair,'bao',return_value=identity) as bao, patch.object(repair,'command') as kube, patch.object(repair,'compare_custody',side_effect=repair.LaneError('custody_disagrees')):
with self.assertRaises(repair.LaneError):
repair.run(SimpleNamespace(action='apply',kubeconfig='/fixture'), {'lanes':[]})
kube.assert_not_called()
self.assertEqual(bao.call_count,1)
def test_no_credential_values_or_parent_access_in_generated_policies(self):
for lane in json.loads((ROOT / 'openbao/eso-auth-recovery/lanes.json').read_text()):
policy=(ROOT / 'openbao/policies' / (lane['policy']+'.hcl')).read_text()
self.assertNotIn('*',policy)
self.assertNotIn('/metadata/',policy)
self.assertNotIn('"list"',policy)
self.assertEqual(policy.count('path "'),3)
self.assertIn('path "'+lane['kv_path']+'"',policy)
def test_expired_token_response_is_distinct_from_authority_failure(self):
for code in [400,403]:
self.assertTrue(repair.invalid_token_lookup(SimpleNamespace(returncode=2,stderr=f'Code: {code}. Errors: bad token'.encode())))
for error in [b'Code: 403. permission denied',b'Code: 500. bad token',b'connection refused']:
self.assertFalse(repair.invalid_token_lookup(SimpleNamespace(returncode=2,stderr=error)))
if __name__=='__main__':
unittest.main()