fn ping_benchmark()

in src/server/pingserver/benches/benchmark.rs [22:58]


fn ping_benchmark(c: &mut Criterion) {
    let config = PingserverConfig::default();

    // launch the server
    let server = Pingserver::new(config).expect("failed to launch pingserver");

    // wait for server to startup. duration is chosen to be longer than we'd
    // expect startup to take in a slow ci environment.
    std::thread::sleep(Duration::from_secs(10));

    // connect and initialize an empty buffer
    let mut stream = TcpStream::connect("127.0.0.1:12321").expect("failed to connect");
    let mut buffer = vec![0; 1024 * 1024];

    // define a benchmarking group
    let mut group = c.benchmark_group("request");
    group.throughput(Throughput::Elements(1));

    let msg = b"ping\r\n";
    let bench_name = "ping";

    group.bench_function(bench_name, |b| {
        b.iter(|| {
            assert!(stream.write_all(msg).is_ok());
            if let Ok(bytes) = stream.read(&mut buffer) {
                if &buffer[0..bytes] != b"PONG\r\n" {
                    panic!("invalid response");
                }
            } else {
                panic!("read error");
            }
        })
    });

    // shutdown the server
    server.shutdown();
}