1*b315a0a8SYosh use anyhow::Context;
2*b315a0a8SYosh use std::io::{self, Read};
3*b315a0a8SYosh use test_programs::wasi::http::types::{Method, Scheme};
4*b315a0a8SYosh
main()5*b315a0a8SYosh fn main() {
6*b315a0a8SYosh // Make sure the final body is larger than 1024*1024, but we cannot allocate
7*b315a0a8SYosh // so much memory directly in the wasm program, so we use the `repeat`
8*b315a0a8SYosh // method to increase the body size.
9*b315a0a8SYosh const LEN: usize = 1024;
10*b315a0a8SYosh const REPEAT: usize = 1025;
11*b315a0a8SYosh let mut buffer = [0; LEN];
12*b315a0a8SYosh let addr = std::env::var("HTTP_SERVER").unwrap();
13*b315a0a8SYosh io::repeat(0b001).read_exact(&mut buffer).unwrap();
14*b315a0a8SYosh let res = test_programs::http::request(
15*b315a0a8SYosh Method::Post,
16*b315a0a8SYosh Scheme::Http,
17*b315a0a8SYosh &addr,
18*b315a0a8SYosh "/post",
19*b315a0a8SYosh Some(&buffer.repeat(REPEAT)),
20*b315a0a8SYosh None,
21*b315a0a8SYosh None,
22*b315a0a8SYosh None,
23*b315a0a8SYosh None,
24*b315a0a8SYosh )
25*b315a0a8SYosh .context("/post large")
26*b315a0a8SYosh .unwrap();
27*b315a0a8SYosh
28*b315a0a8SYosh println!("/post large: {}", res.status);
29*b315a0a8SYosh assert_eq!(res.status, 200);
30*b315a0a8SYosh let method = res.header("x-wasmtime-test-method").unwrap();
31*b315a0a8SYosh assert_eq!(std::str::from_utf8(method).unwrap(), "POST");
32*b315a0a8SYosh assert_eq!(res.body.len(), LEN * REPEAT);
33*b315a0a8SYosh }
34