summaryrefslogtreecommitdiff
path: root/cli/bench/throughput.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/bench/throughput.rs')
-rw-r--r--cli/bench/throughput.rs62
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(),
+ ))
+}