86 lines
3.6 KiB
Rust
86 lines
3.6 KiB
Rust
use super::*;
|
|
use dever_runtime::{api, http, net};
|
|
use std::sync::Arc;
|
|
|
|
#[test]
|
|
fn http1_and_http2_stream_uploads_above_the_json_body_limit() {
|
|
let directory = Directory::new();
|
|
Runtime::new(TaskLimits::default())
|
|
.unwrap()
|
|
.run(async |scope| {
|
|
for http2 in [false, true] {
|
|
let listener = net::listen("127.0.0.1", 0, scope).await.unwrap();
|
|
let port = listener.port().unwrap();
|
|
let incoming = listener.clone();
|
|
let data = Arc::new(directory.0.clone());
|
|
let transport = http::Limits {
|
|
body_bytes: 1024,
|
|
http2: http2.then(Default::default),
|
|
..Default::default()
|
|
};
|
|
let client_limits = http::Limits {
|
|
body_bytes: 1_048_576,
|
|
..transport.clone()
|
|
};
|
|
let server = scope
|
|
.spawn(move |child| async move {
|
|
api::serve_upload::<_, _, true>(
|
|
&incoming,
|
|
&transport,
|
|
&child,
|
|
None,
|
|
move |request, body, child, _| {
|
|
let data = data.clone();
|
|
async move {
|
|
let mut parsed = upload::read(
|
|
&request,
|
|
body,
|
|
&data,
|
|
&Limits::default(),
|
|
&child,
|
|
)
|
|
.await
|
|
.unwrap();
|
|
let file = parsed.take("file").unwrap();
|
|
let size = file.size();
|
|
parsed
|
|
.finish()
|
|
.unwrap()
|
|
.decode::<Fields>(dever_runtime::wire::decode)
|
|
.unwrap();
|
|
file.close();
|
|
Ok(api::response(size.to_string()))
|
|
}
|
|
},
|
|
)
|
|
.await
|
|
})
|
|
.unwrap();
|
|
let request = http::Request {
|
|
method: "POST".into(),
|
|
target: "/upload".into(),
|
|
headers: vec![
|
|
http::Header {
|
|
name: "host".into(),
|
|
value: b"fixture.test".to_vec().into(),
|
|
},
|
|
http::Header {
|
|
name: "content-type".into(),
|
|
value: b"multipart/form-data; boundary=boundary".to_vec().into(),
|
|
},
|
|
],
|
|
body: content(&vec![b'x'; 170_001]).into(),
|
|
};
|
|
let response = http::send("127.0.0.1", port, request, &client_limits)
|
|
.await
|
|
.unwrap();
|
|
assert_eq!(response.status, 200);
|
|
assert_eq!(response.body.as_ref(), b"170001");
|
|
assert_eq!(directory.temporary_count(), 0);
|
|
listener.close().unwrap();
|
|
server.wait().await.unwrap().unwrap();
|
|
}
|
|
})
|
|
.unwrap();
|
|
}
|