Skip to content

Commit f966aa3

Browse files
committed
test(policy): reproduce advisor provenance contract conflict
Signed-off-by: Piotr Mlocek <[email protected]>
1 parent 4de0192 commit f966aa3

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

‎crates/openshell-policy/src/merge.rs‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,6 +2226,58 @@ mod tests {
22262226
);
22272227
}
22282228

2229+
#[test]
2230+
fn canonicalize_advisor_ignores_endpoint_provenance_when_inferring_contract() {
2231+
let mut provider_endpoint = endpoint("api.example.com", 443);
2232+
provider_endpoint.protocol = "rest".to_string();
2233+
provider_endpoint.enforcement = "enforce".to_string();
2234+
provider_endpoint.access = "read-only".to_string();
2235+
provider_endpoint.provider_credentialed = true;
2236+
2237+
let mut advisor_endpoint = provider_endpoint.clone();
2238+
advisor_endpoint.provider_credentialed = false;
2239+
advisor_endpoint.advisor_proposed = true;
2240+
2241+
let mut base = SandboxPolicy::default();
2242+
base.network_policies.insert(
2243+
"existing_advisor".to_string(),
2244+
NetworkPolicyRule {
2245+
name: "existing-advisor".to_string(),
2246+
endpoints: vec![advisor_endpoint],
2247+
binaries: vec![advisor_binary("/usr/bin/curl")],
2248+
},
2249+
);
2250+
2251+
let mut effective = base.clone();
2252+
effective.network_policies.insert(
2253+
"_provider_example".to_string(),
2254+
NetworkPolicyRule {
2255+
name: "provider-example".to_string(),
2256+
endpoints: vec![provider_endpoint],
2257+
binaries: vec![binary("/usr/bin/gh")],
2258+
},
2259+
);
2260+
2261+
let incoming = NetworkPolicyRule {
2262+
name: "advisor_example".to_string(),
2263+
endpoints: vec![NetworkEndpoint {
2264+
host: "api.example.com".to_string(),
2265+
port: 443,
2266+
advisor_proposed: true,
2267+
..Default::default()
2268+
}],
2269+
binaries: vec![advisor_binary("/usr/bin/python")],
2270+
};
2271+
2272+
let (rule_name, canonical) =
2273+
canonicalize_advisor_add_rule(&base, &effective, "advisor_example", &incoming)
2274+
.expect("provenance alone must not create multiple endpoint contracts");
2275+
2276+
assert_eq!(rule_name, "existing_advisor");
2277+
assert_eq!(canonical.endpoints[0].protocol, "rest");
2278+
assert_eq!(canonical.endpoints[0].access, "read-only");
2279+
}
2280+
22292281
#[test]
22302282
fn canonicalize_advisor_narrows_multi_port_contract_and_keeps_overlay() {
22312283
let mut existing_endpoint = endpoint("index.crates.io", 443);

0 commit comments

Comments
 (0)