summaryrefslogtreecommitdiff
path: root/cli/test_util.rs
diff options
context:
space:
mode:
authorAndy Hayden <andyhayden1@gmail.com>2019-10-29 13:06:14 -0700
committerRy Dahl <ry@tinyclouds.org>2019-10-29 16:06:14 -0400
commit49e04fb240ce700a6871d6b490536a879afd99f5 (patch)
tree6015f4ea285fff2f10f1971da562c5a345711eba /cli/test_util.rs
parent0d41b10ade91039339173476848f7368b6dc0853 (diff)
fix race condition in test http server (#3237)
Diffstat (limited to 'cli/test_util.rs')
-rw-r--r--cli/test_util.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/cli/test_util.rs b/cli/test_util.rs
index e10c0af7c..2eb452bca 100644
--- a/cli/test_util.rs
+++ b/cli/test_util.rs
@@ -8,6 +8,7 @@
use std::path::PathBuf;
use std::process::Child;
use std::process::Command;
+use std::process::Stdio;
use std::sync::Mutex;
use std::sync::MutexGuard;
@@ -62,16 +63,18 @@ pub fn http_server<'a>() -> HttpServerGuard<'a> {
let g = GUARD.lock().unwrap();
println!("tools/http_server.py starting...");
- let child = Command::new("python")
+ let mut child = Command::new("python")
.current_dir(root_path())
- .arg("tools/http_server.py")
+ .args(&["-u", "tools/http_server.py"])
+ .stdout(Stdio::piped())
.spawn()
.expect("failed to execute child");
- // Wait 1 second for the server to come up. TODO(ry) this is Racy.
- std::thread::sleep(std::time::Duration::from_secs(2));
-
- println!("tools/http_server.py ready");
+ let stdout = child.stdout.as_mut().unwrap();
+ use std::io::{BufRead, BufReader};
+ let mut lines = BufReader::new(stdout).lines();
+ let line = lines.next().unwrap().unwrap();
+ assert!(line.starts_with("ready"));
HttpServerGuard { child, g }
}