use proptest::prelude::*;
use super::verifier::{
extract_key_by_fingerprint, extract_kid_from_jws, extract_primary_public_key, verify_jws,
};
fn arb_json() -> impl Strategy<Value = serde_json::Value> {
let leaf = prop_oneof![
Just(serde_json::Value::Null),
any::<bool>().prop_map(serde_json::Value::Bool),
any::<i64>().prop_map(|n| serde_json::json!(n)),
".{0,16}".prop_map(serde_json::Value::String),
];
leaf.prop_recursive(3, 32, 5, |inner| {
prop_oneof![
prop::collection::vec(inner.clone(), 0..5).prop_map(serde_json::Value::Array),
prop::collection::hash_map(".{0,8}", inner, 0..5)
.prop_map(|m| serde_json::Value::Object(m.into_iter().collect())),
]
})
}
proptest! {
#[test]
fn verify_jws_never_panics(jws in ".{0,128}", public_key_b64 in ".{0,64}") {
let _ = verify_jws(&jws, &public_key_b64);
}
#[test]
fn verify_jws_never_panics_three_part_shape(
header in ".{0,32}", payload in ".{0,64}", sig in ".{0,32}"
) {
let jws = format!("{header}.{payload}.{sig}");
let _ = verify_jws(&jws, &sig);
}
#[test]
fn extract_kid_never_panics(jws in ".{0,128}") {
let _ = extract_kid_from_jws(&jws);
}
#[test]
fn extract_primary_public_key_never_panics(doc in arb_json()) {
let _ = extract_primary_public_key(&doc);
}
#[test]
fn extract_key_by_fingerprint_never_panics(doc in arb_json(), kid in ".{0,64}") {
let _ = extract_key_by_fingerprint(&doc, &kid);
}
}