refactor(test): Use sync channel over sleeping to be less racy

master
Jesper Håkansson 6 years ago
parent 74739e5a10
commit e81ca18407
  1. 8
      binary-install/tests/all/cache.rs
  2. 20
      binary-install/tests/all/utils/mod.rs

@ -32,7 +32,7 @@ fn it_downloads_tarball() {
let tarball = utils::create_tarball(binary_name).ok();
// Spin up a local TcpListener.
utils::start_server(server_port, tarball);
utils::start_server(server_port, tarball).recv().unwrap();
let dir = tempfile::TempDir::new().unwrap();
let cache = Cache::at(dir.path());
@ -80,7 +80,7 @@ fn it_returns_error_when_it_failed_to_extract_tarball() {
let full_url = &format!("{}/{}.tar.gz", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None);
utils::start_server(server_port, None).recv().unwrap();
let dl = cache.download(true, binary_name, &binaries, full_url);
@ -103,7 +103,7 @@ fn it_returns_error_when_it_failed_to_extract_zip() {
let full_url = &format!("{}/{}.zip", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None);
utils::start_server(server_port, None).recv().unwrap();
let dl = cache.download(true, binary_name, &binaries, full_url);
@ -127,7 +127,7 @@ fn it_panics_if_not_tarball_or_zip() {
let full_url = &format!("{}/{}.bin", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None);
utils::start_server(server_port, None).recv().unwrap();
let _ = cache.download(true, binary_name, &binaries, full_url);
}

@ -3,14 +3,18 @@ use flate2::Compression;
use std::fs::{File, OpenOptions};
use std::io::{self, Read, Write};
use std::net::TcpListener;
use std::sync::mpsc::{channel, Receiver};
use std::thread;
use std::time::Duration;
pub const TEST_SERVER_HOST: &'static str = "localhost";
pub fn start_server(port: u32, tarball: Option<Vec<u8>>) -> thread::JoinHandle<TcpListener> {
let handle = thread::spawn(move || {
let listener = TcpListener::bind(format!("{}:{}", TEST_SERVER_HOST, port)).unwrap();
pub fn start_server(port: u32, tarball: Option<Vec<u8>>) -> Receiver<()> {
let (sender, receiver) = channel();
thread::spawn(move || {
TcpListener::bind(format!("{}:{}", TEST_SERVER_HOST, port))
.map(|listener| {
sender.send(()).unwrap();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
@ -32,13 +36,11 @@ pub fn start_server(port: u32, tarball: Option<Vec<u8>>) -> thread::JoinHandle<T
stream.flush().unwrap();
}
listener
})
.unwrap();
});
// Wait for server to start...
thread::sleep(Duration::from_secs(1));
handle
receiver
}
pub fn create_tarball(binary_name: &str) -> Result<Vec<u8>, io::Error> {

Loading…
Cancel
Save