Files
khadhroony-solana-project/crates/ksp-worker-api/unit_tests/identity.rs
2026-09-04 14:21:05 +02:00

65 lines
2.4 KiB
Rust

// file: crates/ksp-worker-api/unit_tests/identity.rs
// version: 1
#[test]
fn pre_002_identity_accepts_safe_codes_at_exact_bounds() {
let worker_id = crate::WorkerId::new("a".repeat(crate::MAX_WORKER_ID_BYTES));
let kind = crate::WorkerKindCode::new("continuous.raw:example-1");
assert!(worker_id.is_ok());
assert!(kind.is_ok());
let worker_id = match worker_id {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let kind = match kind {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(worker_id.as_str().len(), crate::MAX_WORKER_ID_BYTES);
assert_eq!(kind.as_str(), "continuous.raw:example-1");
return;
}
#[test]
fn pre_002_identity_rejects_empty_oversized_and_unsafe_values() {
for value in [
std::string::String::new(),
"a".repeat(crate::MAX_WORKER_ID_BYTES + 1),
"unsafe/value".to_string(),
"unsafe\\value".to_string(),
"space value".to_string(),
"unicode-é".to_string(),
] {
let rejected = crate::WorkerId::new(value);
assert!(rejected.is_err());
let error = match rejected {
std::result::Result::Err(value) => value,
std::result::Result::Ok(_) => continue,
};
assert_eq!(error.code(), crate::ERROR_CODE_WORKER_ID_INVALID);
assert_eq!(error.context().len(), 1);
assert_eq!(error.context()[0].key(), "field");
assert_eq!(error.context()[0].value(), "worker_id");
}
for value in [std::string::String::new(), "b".repeat(crate::MAX_WORKER_KIND_CODE_BYTES + 1), "worker kind".to_string()] {
let rejected = crate::WorkerKindCode::new(value);
assert!(rejected.is_err());
let error = match rejected {
std::result::Result::Err(value) => value,
std::result::Result::Ok(_) => continue,
};
assert_eq!(error.code(), crate::ERROR_CODE_WORKER_KIND_INVALID);
assert_eq!(error.context()[0].value(), "worker_kind");
}
return;
}
#[test]
fn pre_002_private_validator_uses_exact_safe_code_alphabet() {
assert!(super::valid_worker_code("AZaz09_.:-", 10));
for rejected in ["slash/value", "back\\slash", "space value", "line\nbreak", "é"] {
assert!(!super::valid_worker_code(rejected, crate::MAX_WORKER_ID_BYTES));
}
return;
}