refactor(test): Let OS assign a port and pass it through the channel

master
Jesper Håkansson 6 years ago
parent e81ca18407
commit ae836f3f19
  1. 29
      binary-install/tests/all/cache.rs
  2. 42
      binary-install/tests/all/utils/mod.rs

@ -23,8 +23,6 @@ fn it_returns_none_if_install_is_not_permitted() {
#[test]
fn it_downloads_tarball() {
let server_port = 7880;
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let binary_name = "wasm-pack";
let binaries = vec![binary_name];
@ -32,7 +30,9 @@ fn it_downloads_tarball() {
let tarball = utils::create_tarball(binary_name).ok();
// Spin up a local TcpListener.
utils::start_server(server_port, tarball).recv().unwrap();
let server_port = utils::start_server(tarball, None).recv().unwrap();
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let dir = tempfile::TempDir::new().unwrap();
let cache = Cache::at(dir.path());
@ -70,17 +70,17 @@ fn it_returns_error_when_it_failed_to_download() {
#[test]
fn it_returns_error_when_it_failed_to_extract_tarball() {
let server_port = 7882;
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let binary_name = "wasm-pack";
let binaries = vec![binary_name];
let dir = tempfile::TempDir::new().unwrap();
let cache = Cache::at(dir.path());
let full_url = &format!("{}/{}.tar.gz", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None).recv().unwrap();
let server_port = utils::start_server(None, None).recv().unwrap();
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let full_url = &format!("{}/{}.tar.gz", &url, binary_name);
let dl = cache.download(true, binary_name, &binaries, full_url);
@ -93,17 +93,17 @@ fn it_returns_error_when_it_failed_to_extract_tarball() {
#[test]
fn it_returns_error_when_it_failed_to_extract_zip() {
let server_port = 7883;
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let binary_name = "wasm-pack";
let binaries = vec![binary_name];
let dir = tempfile::TempDir::new().unwrap();
let cache = Cache::at(dir.path());
let full_url = &format!("{}/{}.zip", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None).recv().unwrap();
let server_port = utils::start_server(None, None).recv().unwrap();
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let full_url = &format!("{}/{}.zip", &url, binary_name);
let dl = cache.download(true, binary_name, &binaries, full_url);
@ -118,16 +118,17 @@ fn it_returns_error_when_it_failed_to_extract_zip() {
#[should_panic(expected = "don't know how to extract http://localhost:7884/wasm-pack.bin")]
fn it_panics_if_not_tarball_or_zip() {
let server_port = 7884;
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let binary_name = "wasm-pack";
let binaries = vec![binary_name];
let dir = tempfile::TempDir::new().unwrap();
let cache = Cache::at(dir.path());
let full_url = &format!("{}/{}.bin", &url, binary_name);
// Spin up a local TcpListener.
utils::start_server(server_port, None).recv().unwrap();
utils::start_server(None, Some(server_port)).recv().unwrap();
let url = format!("http://{}:{}", utils::TEST_SERVER_HOST, server_port);
let full_url = &format!("{}/{}.bin", &url, binary_name);
let _ = cache.download(true, binary_name, &binaries, full_url);
}

@ -8,36 +8,40 @@ use std::thread;
pub const TEST_SERVER_HOST: &'static str = "localhost";
pub fn start_server(port: u32, tarball: Option<Vec<u8>>) -> Receiver<()> {
pub fn start_server(tarball: Option<Vec<u8>>, server_port: Option<u16>) -> Receiver<u16> {
let (sender, receiver) = channel();
thread::spawn(move || {
TcpListener::bind(format!("{}:{}", TEST_SERVER_HOST, port))
.map(|listener| {
sender.send(()).unwrap();
TcpListener::bind(format!(
"{}:{}",
TEST_SERVER_HOST,
server_port.unwrap_or_else(|| 0)
))
.map(|listener| {
sender.send(listener.local_addr().unwrap().port()).unwrap();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
let mut buffer = [0; 512];
let mut buffer = [0; 512];
stream.read(&mut buffer).unwrap();
stream.read(&mut buffer).unwrap();
let response = "HTTP/1.1 200 OK\r\n\r\n";
let response = "HTTP/1.1 200 OK\r\n\r\n";
stream.write(response.as_bytes()).unwrap();
stream.write(response.as_bytes()).unwrap();
match tarball.to_owned() {
Some(tar) => {
stream.write(tar.as_ref()).unwrap();
}
None => {}
match tarball.to_owned() {
Some(tar) => {
stream.write(tar.as_ref()).unwrap();
}
stream.flush().unwrap();
None => {}
}
})
.unwrap();
stream.flush().unwrap();
}
})
.unwrap();
});
receiver

Loading…
Cancel
Save