Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
38 lines
3.7 KiB
Python
38 lines
3.7 KiB
Python
import copy
|
|
from datetime import datetime,timezone,timedelta
|
|
import importlib.util
|
|
import json
|
|
from pathlib import Path
|
|
import unittest
|
|
import yaml
|
|
spec=importlib.util.spec_from_file_location('eso_gate',Path(__file__).resolve().parents[1]/'scripts/eso_adoption_readiness.py');gate=importlib.util.module_from_spec(spec);spec.loader.exec_module(gate)
|
|
NOW=datetime(2026,10,11,21,0,tzinfo=timezone.utc)
|
|
|
|
class ReadinessTests(unittest.TestCase):
|
|
def app(self):return yaml.safe_load((Path(__file__).resolve().parents[1]/'argocd/railiance01/drafts/external-secrets.application.yaml').read_text())
|
|
def issue(self):return {'schema_version':'rapp-issue-core-adoption/v2','passed':True,'captured_at':NOW.isoformat(),'checks':{'estate_node_ip':True,'argo_synced_healthy':True,'argo_tracking':True,'external_secret_ready':True,'private_service':True,'source_revision':'a'*40,'healthz_status':200,'unauthenticated_ingest_status':401,'authenticated_ingest_status':201,'authenticated_close_status':200}}
|
|
def target(self):return {'schema_version':'argocd-workload-adoption-proof/v1','status':'verified','application':'target-revenue','captured_at':NOW.isoformat(),'manual_apply_prune_off':True,'child_automation_enabled':False}
|
|
def test_prepared_source_cannot_skip_issue_core_dependency(self):
|
|
result=gate.assess(self.app(),{},self.target(),NOW);self.assertTrue(result['source_ready']);self.assertFalse(result['ready_for_fresh_native_render_diff']);self.assertEqual(result['missing_or_invalid'],['RPF-WP-0044-T04']);self.assertFalse(result['founder_approval_required'])
|
|
def test_complete_fresh_predecessors_allow_diff_only(self):
|
|
result=gate.assess(self.app(),self.issue(),self.target(),NOW);self.assertTrue(result['ready_for_fresh_native_render_diff']);self.assertFalse(result['native_mutation']);self.assertEqual(result['next_action'],'fresh_native_render_diff')
|
|
def test_stale_future_wrong_estate_or_missing_smoke_cannot_authorize_adoption(self):
|
|
for key,value in [('captured_at',(NOW-timedelta(minutes=6)).isoformat()),('captured_at',(NOW+timedelta(seconds=1)).isoformat())]:
|
|
issue=self.issue();issue[key]=value;self.assertFalse(gate.assess(self.app(),issue,self.target(),NOW)['ready_for_fresh_native_render_diff'])
|
|
for key,value in [('estate_node_ip',False),('argo_tracking',False),('authenticated_close_status',None),('source_revision','main')]:
|
|
issue=self.issue();issue['checks'][key]=value;self.assertFalse(gate.assess(self.app(),issue,self.target(),NOW)['ready_for_fresh_native_render_diff'])
|
|
def test_crd_guards_manual_policy_and_no_replace_required(self):
|
|
for mutation in ('guard','automation','replace','chart'):
|
|
app=self.app()
|
|
if mutation=='guard':app['spec']['source']['helm']['values']='installCRDs: true\n'
|
|
elif mutation=='automation':app['spec']['syncPolicy']['automated']={}
|
|
elif mutation=='replace':app['spec']['syncPolicy']['syncOptions'].append('Replace=true')
|
|
else:app['spec']['source']['targetRevision']='latest'
|
|
result=gate.assess(app,self.issue(),self.target(),NOW);self.assertFalse(result['source_ready']);self.assertFalse(result['ready_for_fresh_native_render_diff'])
|
|
def test_invalid_canary_fields_never_echo_values(self):
|
|
app=self.app();app['spec']['source']['helm']['values']='SECRET_CANARY';issue=self.issue();issue['private_value']='SECRET_CANARY';result=gate.assess(app,issue,{},NOW);self.assertNotIn('SECRET_CANARY',json.dumps(result))
|
|
def test_target_revenue_proof_must_be_exact_application_and_prune_off(self):
|
|
for key,value in [('application','foreign-app'),('manual_apply_prune_off',False),('child_automation_enabled',True),('status','unverified')]:
|
|
target=self.target();target[key]=value;self.assertFalse(gate.assess(self.app(),self.issue(),target,NOW)['ready_for_fresh_native_render_diff'])
|
|
|
|
if __name__=='__main__':unittest.main()
|