1 use test_programs::p3::wasi::http::types::{HeaderError, Headers, Request}; 2 use test_programs::p3::wit_future; 3 4 struct Component; 5 6 test_programs::p3::export!(Component); 7 8 impl test_programs::p3::exports::wasi::cli::run::Guest for Component { 9 async fn run() -> Result<(), ()> { 10 let hdrs = Headers::new(); 11 assert!(matches!( 12 hdrs.append("malformed header name", b"ok value".as_ref()), 13 Err(HeaderError::InvalidSyntax) 14 )); 15 16 assert!(matches!( 17 hdrs.append("ok-header-name", b"ok value".as_ref()), 18 Ok(()) 19 )); 20 21 assert!(matches!( 22 hdrs.append("ok-header-name", b"bad\nvalue".as_ref()), 23 Err(HeaderError::InvalidSyntax) 24 )); 25 26 assert!(matches!( 27 hdrs.append("Connection", b"keep-alive".as_ref()), 28 Err(HeaderError::Forbidden) 29 )); 30 31 assert!(matches!( 32 hdrs.append("Keep-Alive", b"stuff".as_ref()), 33 Err(HeaderError::Forbidden) 34 )); 35 36 assert!(matches!( 37 hdrs.append("Host", b"example.com".as_ref()), 38 Err(HeaderError::Forbidden) 39 )); 40 41 assert!(matches!( 42 hdrs.append("custom-forbidden-header", b"keep-alive".as_ref()), 43 Err(HeaderError::Forbidden) 44 )); 45 46 assert!(matches!( 47 hdrs.append("Custom-Forbidden-Header", b"keep-alive".as_ref()), 48 Err(HeaderError::Forbidden) 49 )); 50 51 assert!(matches!( 52 Headers::from_list(&[("bad header".to_owned(), b"value".to_vec())]), 53 Err(HeaderError::InvalidSyntax) 54 )); 55 56 assert!(matches!( 57 Headers::from_list(&[("custom-forbidden-header".to_owned(), b"value".to_vec())]), 58 Err(HeaderError::Forbidden) 59 )); 60 61 assert!(matches!( 62 Headers::from_list(&[("ok-header-name".to_owned(), b"bad\nvalue".to_vec())]), 63 Err(HeaderError::InvalidSyntax) 64 )); 65 66 let (_, rx) = wit_future::new(|| Ok(None)); 67 let (req, _) = Request::new(hdrs, None, rx, None); 68 let hdrs = req.get_headers(); 69 70 assert!(matches!( 71 hdrs.set("Content-Length", &[b"10".to_vec()]), 72 Err(HeaderError::Immutable), 73 )); 74 75 assert!(matches!( 76 hdrs.append("Content-Length", b"10".as_ref()), 77 Err(HeaderError::Immutable), 78 )); 79 80 assert!(matches!( 81 hdrs.delete("Content-Length"), 82 Err(HeaderError::Immutable), 83 )); 84 Ok(()) 85 } 86 } 87 88 fn main() {} 89