mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 01:29:14 -05:00
8884c14a2d
This adds a new `PathRef` struct to test_util for making it easier to work with paths in test code. I'm going to expand on this more in the future.
76 lines
2.1 KiB
Rust
76 lines
2.1 KiB
Rust
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
|
use std::collections::HashMap;
|
|
use std::io::BufRead;
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
use std::process::Stdio;
|
|
use std::time::Duration;
|
|
|
|
use super::Result;
|
|
|
|
pub fn benchmark() -> Result<HashMap<String, f64>> {
|
|
let deno_exe = test_util::deno_exe_path();
|
|
|
|
let mut res = HashMap::new();
|
|
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
|
|
let ws_dir = manifest_dir.join("bench").join("websocket");
|
|
for entry in std::fs::read_dir(&ws_dir)? {
|
|
let port = crate::http::get_port();
|
|
let entry = entry?;
|
|
let pathbuf = entry.path();
|
|
let path = pathbuf.to_str().unwrap();
|
|
let file_stem = pathbuf.file_stem().unwrap().to_str().unwrap();
|
|
|
|
let mut cmd = Command::new(&deno_exe);
|
|
let mut server = cmd
|
|
.arg("run")
|
|
.arg("-A")
|
|
.arg("--unstable")
|
|
.arg(path)
|
|
.arg(&port.to_string())
|
|
.spawn()
|
|
.unwrap();
|
|
|
|
std::thread::sleep(Duration::from_secs(5)); // wait for server to wake up.
|
|
|
|
let load_test = test_util::prebuilt_tool_path("load_test");
|
|
assert!(load_test.is_file());
|
|
// ./load_test 100 0.0.0.0 8000 0 0
|
|
// Running benchmark now...
|
|
// Msg/sec: 161327.500000
|
|
// Msg/sec: 163977.000000
|
|
// ^C⏎
|
|
let mut cmd = Command::new(load_test);
|
|
let mut process = cmd
|
|
.stdout(Stdio::piped())
|
|
.arg("100")
|
|
.arg("0.0.0.0")
|
|
.arg(&port.to_string())
|
|
.arg("0")
|
|
.arg("0")
|
|
.spawn()
|
|
.unwrap();
|
|
|
|
let mut lines = Vec::new();
|
|
|
|
let mut stdout =
|
|
std::io::BufReader::new(process.stdout.take().unwrap()).lines();
|
|
for _ in 0..5 {
|
|
let line = stdout.next().unwrap().unwrap();
|
|
lines.push(line);
|
|
}
|
|
|
|
process.kill().unwrap();
|
|
let msg_per_sec = lines
|
|
.into_iter()
|
|
.filter(|line| line.starts_with("Msg/sec:"))
|
|
.map(|line| line.split(": ").nth(1).unwrap().parse::<f64>().unwrap())
|
|
.max_by(|a, b| a.partial_cmp(b).unwrap())
|
|
.unwrap();
|
|
|
|
res.insert(file_stem.to_string(), msg_per_sec);
|
|
server.kill().unwrap();
|
|
}
|
|
|
|
Ok(res)
|
|
}
|