[go: up one dir, main page]

tiny_http 0.4.1

Low level HTTP server library
Documentation
#![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::ServerBuilder::new().with_random_port().build().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::ServerBuilder::new().with_random_port().build().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::ServerBuilder::new().with_random_port().build().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)));
        }
    });
}