parent
10080c2794
commit
d5faedd200
@ -0,0 +1,73 @@ |
||||
extern crate binary_install; |
||||
extern crate curl; |
||||
extern crate failure; |
||||
|
||||
use binary_install::{error::Error, install_binaries_from_targz_at_url}; |
||||
use std::io::{Read, Write}; |
||||
use std::net::TcpListener; |
||||
use std::path::Path; |
||||
use std::thread; |
||||
|
||||
const SERVER_URL: &'static str = "localhost:7878"; |
||||
|
||||
fn start_server() -> thread::JoinHandle<TcpListener> { |
||||
thread::spawn(|| { |
||||
let listener = TcpListener::bind(SERVER_URL).unwrap(); |
||||
for stream in listener.incoming() { |
||||
let mut stream = stream.unwrap(); |
||||
|
||||
let mut buffer = [0; 512]; |
||||
|
||||
stream.read(&mut buffer).unwrap(); |
||||
|
||||
let response = "HTTP/1.1 200 OK\r\n\r\n"; |
||||
|
||||
stream.write(response.as_bytes()).unwrap(); |
||||
stream.flush().unwrap(); |
||||
} |
||||
listener |
||||
}) |
||||
} |
||||
|
||||
#[test] |
||||
fn install_binaries_from_targz_at_url_should_return_http_error_for_bad_url() { |
||||
let crate_path = Path::new(""); |
||||
let url = ""; |
||||
let binaries = vec![""]; |
||||
|
||||
let result = install_binaries_from_targz_at_url(crate_path, url, binaries); |
||||
assert!(result.is_err()); |
||||
|
||||
let err = result.err().unwrap(); |
||||
let err = err.downcast_ref::<Error>().unwrap(); |
||||
|
||||
let expected_message = format!("when requesting {}", url); |
||||
|
||||
match err { |
||||
Error::Http { message } => assert_eq!(&expected_message, message), |
||||
_ => panic!("Wrong error returned"), |
||||
} |
||||
} |
||||
|
||||
#[test] |
||||
fn install_binaries_from_targz_at_url_should_return_archive_error_when_tarball_is_missing() { |
||||
let crate_path = Path::new(""); |
||||
let url = format!("http://{}", SERVER_URL); |
||||
let binaries = vec![""]; |
||||
|
||||
// Spin up a local TcpListener.
|
||||
start_server(); |
||||
|
||||
let result = install_binaries_from_targz_at_url(crate_path, &url, binaries); |
||||
assert!(result.is_err()); |
||||
|
||||
let err = result.err().unwrap(); |
||||
let err = err.downcast_ref::<Error>().unwrap(); |
||||
|
||||
let expected_message = format!("Invalid tarball at {}", url); |
||||
|
||||
match err { |
||||
Error::Archive { message } => assert_eq!(&expected_message, message), |
||||
_ => panic!("Wrong error returned"), |
||||
} |
||||
} |
Loading…
Reference in new issue