use kvarn::prelude::*; use kvarn_testing::prelude::*; const DATA: &str = r#"!> nonce The body. "#; fn get_server() -> ServerBuilder { ServerBuilder::default().with_extensions(|ext| { assert!(ext.get_present_internal().contains_key("nonce")); ext.add_prepare_single( "/index.html", prepare!(_, _, _, _, { let bytes = Bytes::from_static(DATA.as_bytes()); FatResponse::cache(Response::new(bytes)) }), ); }) } #[tokio::test] async fn header_match() { let server = get_server().run().await; let response = server.get("/").send().await.unwrap(); let csp = response .headers() .get("content-security-policy") .unwrap() .to_str() .unwrap(); println!("CSP: {csp:?}"); let start = csp.find("'nonce-").unwrap(); let end = csp[start + 7..].find('\'').unwrap(); let nonce = &csp[start + 7..start + 7 + end]; assert_eq!(nonce.len(), 24); assert_eq!(csp.matches(nonce).count(), 4); let needle = format!("nonce=\"{nonce}\""); let body = response.text().await.unwrap(); assert!(body.contains(&needle)); assert!(!body.contains("this will be removed")); }