提交 49e04fb2 编写于 作者: A Andy Hayden 提交者: Ry Dahl

fix race condition in test http server (#3237)

上级 0d41b10a
......@@ -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 }
}
......@@ -178,20 +178,20 @@ def spawn():
while any(not s.thread.is_alive() for s in servers):
sleep(0.01)
try:
yield
print "ready"
yield servers
finally:
for s in servers:
s.server.shutdown()
def main():
servers = (server(), redirect_server(), another_redirect_server(),
double_redirects_server(), inf_redirects_server())
try:
while all(s.thread.is_alive() for s in servers):
sleep(10)
except KeyboardInterrupt:
pass
with spawn() as servers:
try:
while all(s.thread.is_alive() for s in servers):
sleep(1)
except KeyboardInterrupt:
pass
sys.exit(1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册