diff options
Diffstat (limited to 'cli/bench/throughput.rs')
-rw-r--r-- | cli/bench/throughput.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/cli/bench/throughput.rs b/cli/bench/throughput.rs new file mode 100644 index 000000000..0be46f142 --- /dev/null +++ b/cli/bench/throughput.rs @@ -0,0 +1,62 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +use super::Result; +use serde_json::{Number, Value}; +use std::{ + path::PathBuf, + process::Command, + time::{Duration, Instant}, +}; + +const MB: usize = 1024 * 1024; +const SERVER_ADDR: &str = "0.0.0.0:4544"; +const CLIENT_ADDR: &str = "127.0.0.1 4544"; + +pub(crate) fn cat(deno_exe: &PathBuf, megs: usize) -> Result<Value> { + let size = megs * MB; + let shell_cmd = format!( + "{} run --allow-read cli/tests/cat.ts /dev/zero | head -c {}", + deno_exe.to_str().unwrap(), + size + ); + println!("{}", shell_cmd); + let cmd = &["sh", "-c", &shell_cmd]; + + let start = Instant::now(); + let _ = test_util::run_collect(cmd, None, None, None, true); + let end = Instant::now(); + + Ok(Value::Number( + Number::from_f64((end - start).as_secs_f64()).unwrap(), + )) +} + +pub(crate) fn tcp(deno_exe: &PathBuf, megs: usize) -> Result<Value> { + let size = megs * MB; + + let shell_cmd = format!("head -c {} /dev/zero | nc {}", size, CLIENT_ADDR); + println!("{}", shell_cmd); + let cmd = &["sh", "-c", &shell_cmd]; + + // Run deno echo server in the background. + let mut echo_server = Command::new(deno_exe.to_str().unwrap()) + .args(&[ + "run", + "--allow-net", + "cli/tests/echo_server.ts", + SERVER_ADDR, + ]) + .spawn()?; + + std::thread::sleep(Duration::from_secs(5)); // wait for deno to wake up. TODO racy. + + let start = Instant::now(); + let _ = test_util::run_collect(cmd, None, None, None, true); + let end = Instant::now(); + + echo_server.kill()?; + + Ok(Value::Number( + Number::from_f64((end - start).as_secs_f64()).unwrap(), + )) +} |