blob: ca283a58895e3677314f78438cdf7b6d56ef33b3 [file] [log] [blame]
#![feature(phase)]
extern crate tiny_http;
extern crate test;
extern crate time;
use std::process::Command;
#[test]
#[ignore]
// TODO: obtain time
fn curl_bench() {
let server = tiny_http::Server::http("0.0.0.0:0").unwrap();
let port = server.server_addr().port;
let num_requests = 10usize;
match Command::new("curl")
.arg("-s")
.arg(format!("http://localhost:{}/?[1-{}]", port, num_requests).as_slice())
.output()
{
Ok(p) => p,
Err(_) => return, // ignoring test
};
drop(server);
}
#[bench]
fn sequential_requests(bencher: &mut test::Bencher) {
::std::io::test::raise_fd_limit();
let server = tiny_http::Server::http("0.0.0.0:0").unwrap();
let port = server.server_addr().port;
let mut stream = std::io::net::tcp::TcpStream::connect("127.0.0.1", port).unwrap();
bencher.auto_bench(|_| {
(write!(stream, "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")).unwrap();
let request = server.recv().unwrap();
assert!(request.method().equiv(&"get"));
request.respond(tiny_http::Response::new_empty(tiny_http::StatusCode(204)));
});
}
#[bench]
fn parallel_requests(bencher: &mut test::Bencher) {
::std::io::test::raise_fd_limit();
let server = tiny_http::Server::http("0.0.0.0:0").unwrap();
let port = server.server_addr().port;
bencher.bench_n(5, |_| {
let mut streams = Vec::new();
for _ in 0..1000usize {
let mut stream = std::io::net::tcp::TcpStream::connect("127.0.0.1", port).unwrap();
(write!(stream, "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n")).unwrap();
streams.push(stream);
}
loop {
let request = match server.try_recv().unwrap() {
None => break,
Some(rq) => rq
};
assert!(request.method().equiv(&"get"));
request.respond(tiny_http::Response::new_empty(tiny_http::StatusCode(204)));
}
});
}