mproxy-server 0.1.8

MPROXY: Server. Listen for incoming UDP messages and log to file.
Documentation
#![feature(test)]

extern crate test;
use test::Bencher;

use std::fs::File;
use std::path::PathBuf;
use std::str::FromStr;
use std::thread::sleep;
use std::thread::Builder;
use std::time::Duration;
use std::time::Instant;

extern crate mproxy_client;
use mproxy_client::client_socket_stream;

extern crate testconfig;
use testconfig::{truncate, TESTINGDIR};

use mproxy_server::listener;

#[cfg(unix)]
#[bench]
fn test_server_bitrate(_b: &mut Bencher) {
    let pathstr = &[TESTINGDIR, "streamoutput_server_test_largefile.log"].join(&"");
    truncate(PathBuf::from_str(pathstr).unwrap());
    let target_addr = "127.0.0.1:9907".to_string();
    let listen_addr = "0.0.0.0:9907".to_string();

    let _l = listener(listen_addr, PathBuf::from_str(pathstr).unwrap(), false);
    let _c = Builder::new().spawn(move || {
        client_socket_stream(&PathBuf::from("/dev/random"), vec![target_addr], false)
    });
    let bytesize = truncate(PathBuf::from_str(pathstr).unwrap());

    let start = Instant::now();

    while start.elapsed().as_secs() < 2 {
        sleep(Duration::from_millis(25));
    }
    let elapsed = start.elapsed();

    let info = match File::open(&pathstr) {
        Ok(f) => f.metadata().unwrap().len(),
        Err(e) => {
            eprintln!("{}", e);
            0
        }
    };
    println!(
        "log size: {}  elapsed: {:.3}s\tbitrate: {:.1} Mbps",
        info,
        elapsed.as_secs_f32(),
        info / elapsed.as_secs() / 1000000
    );
    truncate(PathBuf::from_str(pathstr).unwrap());
    assert!(bytesize > 0);
}