61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
#![feature(test)]
|
|
extern crate test;
|
|
use std::collections::HashMap;
|
|
|
|
use test::Bencher;
|
|
|
|
extern crate inferium;
|
|
use inferium::h1::{SyncClient, Response, ResponseHead, ProtocolVariant};
|
|
use inferium::{Status, HeaderValue};
|
|
use inferium::TestSyncStream;
|
|
|
|
fn parse_response_sync_inner() {
|
|
let src = "HTTP/1.1 200 OK\r\nserver: inferium\r\n\r\n".as_bytes().to_vec();
|
|
let stream = TestSyncStream::<4>::new(&src);
|
|
let mut client = SyncClient::<TestSyncStream<4>>::new(stream);
|
|
let target = Response::HeadersOnly(ResponseHead::new(
|
|
Status::Ok,
|
|
ProtocolVariant::HTTP1_1,
|
|
HashMap::from([
|
|
("server".into(), HeaderValue::new(vec!["inferium".to_string()]))
|
|
])
|
|
));
|
|
assert_eq!(client.receive_response().unwrap(), target);
|
|
}
|
|
|
|
fn parse_response_sync_inner_body() {
|
|
let mut src = "HTTP/1.1 200 OK\r\ncontent-length: 50\r\n\r\n".as_bytes().to_vec();
|
|
src.extend_from_slice(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
let stream = TestSyncStream::<4>::new(&src);
|
|
let mut client = SyncClient::<TestSyncStream<4>>::new(stream);
|
|
let target_head = ResponseHead::new(
|
|
Status::Ok,
|
|
ProtocolVariant::HTTP1_1,
|
|
HashMap::from([
|
|
("content-length".into(), HeaderValue::new(vec!["50".to_string()]))
|
|
])
|
|
);
|
|
let Response::WithSizedBody((h, mut b)) = client.receive_response().unwrap() else {
|
|
panic!();
|
|
};
|
|
let b = b.recv_all().unwrap();
|
|
assert_eq!(h, target_head);
|
|
assert_eq!(b, b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
}
|
|
|
|
#[bench]
|
|
fn parse_response_sync(b: &mut Bencher) {
|
|
b.bytes = 37;
|
|
b.iter(|| {
|
|
parse_response_sync_inner();
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn parse_response_sync_with_body(b: &mut Bencher) {
|
|
b.bytes = 39 + 13;
|
|
b.iter(|| {
|
|
parse_response_sync_inner_body();
|
|
});
|
|
}
|