zebra/zebra-test/tests/transcript.rs

68 lines
1.9 KiB
Rust

//! Tests for the [`zebra_test::transcript`] module.
use tower::{Service, ServiceExt};
use zebra_test::transcript::{ExpectedTranscriptError, Transcript};
const TRANSCRIPT_DATA: [(&str, Result<&str, ExpectedTranscriptError>); 4] = [
("req1", Ok("rsp1")),
("req2", Ok("rsp2")),
("req3", Ok("rsp3")),
("req4", Ok("rsp4")),
];
#[tokio::test]
async fn transcript_returns_responses_and_ends() {
let _init_guard = zebra_test::init();
let mut svc = Transcript::from(TRANSCRIPT_DATA.iter().cloned());
for (req, rsp) in TRANSCRIPT_DATA.iter() {
assert_eq!(
svc.ready().await.unwrap().call(req).await.unwrap(),
*rsp.as_ref().unwrap()
);
}
assert!(svc.ready().await.unwrap().call("end").await.is_err());
}
#[tokio::test]
async fn transcript_errors_wrong_request() {
let _init_guard = zebra_test::init();
let mut svc = Transcript::from(TRANSCRIPT_DATA.iter().cloned());
assert_eq!(
svc.ready().await.unwrap().call("req1").await.unwrap(),
"rsp1",
);
assert!(svc.ready().await.unwrap().call("bad").await.is_err());
}
#[tokio::test]
async fn self_check() {
let _init_guard = zebra_test::init();
let t1 = Transcript::from(TRANSCRIPT_DATA.iter().cloned());
let t2 = Transcript::from(TRANSCRIPT_DATA.iter().cloned());
assert!(t1.check(t2).await.is_ok());
}
const TRANSCRIPT_DATA2: [(&str, Result<&str, ExpectedTranscriptError>); 4] = [
("req1", Ok("rsp1")),
("req2", Ok("rsp2")),
("req3", Ok("rsp3")),
("req4", Err(ExpectedTranscriptError::Any)),
];
#[tokio::test]
async fn self_check_err() {
let _init_guard = zebra_test::init();
let t1 = Transcript::from(TRANSCRIPT_DATA2.iter().cloned());
let t2 = Transcript::from(TRANSCRIPT_DATA2.iter().cloned());
t1.check(t2)
.await
.expect("transcript acting as the mocker and verifier should always pass")
}