services_hardening_admin_common.rs (2971B)
1 #![forbid(unsafe_code)] 2 3 use std::collections::BTreeSet; 4 5 use serde_json::Value; 6 7 const COMMON_CONTRACT: &str = include_str!("../contracts/services_hardening/admin_common.v1.json"); 8 const OPERATOR_CONTRACT: &str = 9 include_str!("../contracts/services_hardening/operator_contract.v1.json"); 10 11 #[test] 12 fn common_route_inventory_is_an_exact_ordered_subset() { 13 let common: Value = serde_json::from_str(COMMON_CONTRACT).expect("common admin contract"); 14 let operator: Value = serde_json::from_str(OPERATOR_CONTRACT).expect("operator contract"); 15 assert_eq!(common["schema"], "radroots.rhi.admin-common.v1"); 16 assert_eq!(common["contract_version"], 1); 17 assert_eq!(common["final_inventory"]["route_count"], 20); 18 assert_eq!(common["final_inventory"]["model_count"], 33); 19 20 let registered = common["registered_routes"] 21 .as_array() 22 .expect("registered routes") 23 .iter() 24 .map(|value| value.as_str().expect("operation ID")) 25 .collect::<Vec<_>>(); 26 assert_eq!( 27 registered, 28 [ 29 "radroots.rhi.status.get.v1", 30 "radroots.rhi.config.effective.get.v1", 31 "radroots.rhi.identity.status.get.v1", 32 "radroots.rhi.identity.public.get.v1", 33 "radroots.rhi.state.status.get.v1", 34 "radroots.rhi.state.backup.create.v1", 35 "radroots.rhi.metrics.snapshot.get.v1", 36 ] 37 ); 38 assert_eq!(registered.iter().copied().collect::<BTreeSet<_>>().len(), 7); 39 let governed = operator["admin"]["routes"] 40 .as_array() 41 .expect("operator routes") 42 .iter() 43 .map(|route| route["operation_id"].as_str().expect("operation ID")) 44 .collect::<BTreeSet<_>>(); 45 assert!( 46 registered 47 .iter() 48 .all(|operation| governed.contains(operation)) 49 ); 50 } 51 52 #[test] 53 fn common_checkpoint_contract_remains_sealed_bounded_and_partial() { 54 let common: Value = serde_json::from_str(COMMON_CONTRACT).expect("common admin contract"); 55 assert_eq!(common["shared_transport"], "radroots_service_host"); 56 assert_eq!(common["authority"]["raw_shared_router_public"], false); 57 assert_eq!(common["authority"]["raw_listener_public"], false); 58 assert_eq!(common["authority"]["raw_json_handler_public"], false); 59 assert_eq!(common["authority"]["runtime_context_required"], true); 60 assert_eq!(common["wire"]["duplicate_fields"], "reject"); 61 assert_eq!(common["wire"]["null"], "forbidden"); 62 assert_eq!(common["wire"]["response_body_max_utf8_bytes"], 1_048_576); 63 assert_eq!(common["effects"]["router_construction_performs_io"], false); 64 assert_eq!(common["effects"]["bind_spawns_task"], false); 65 assert_eq!(common["effects"]["tcp_admin"], false); 66 assert_eq!( 67 common["historical_deferred_route_groups"], 68 serde_json::json!([ 69 "domain_queries_and_mutations_step_207", 70 "reserved_identity_mutations_removed_step_208" 71 ]) 72 ); 73 }