Я пытаюсь написать интеграционные тесты для официального руководства по многопоточному веб-серверу.
В integrational_tests.rs
у меня есть что-то вроде этого:
fn connect_and_send_request() {
let stream = TcpStream::connect("127.0.0.1:7879").unwrap();
let mut writer = BufWriter::new(stream);
let s = b"GET / HTTP/1.1\r\n\r\n";
writer.write(s).unwrap();
writer.flush().unwrap();
}
fn test_main_route() {
let server_address = [SocketAddr::from(([127, 0, 0, 1], 7879))];
let listener: TcpListener = TcpListener::bind(&server_address[..]).unwrap();
let pool = ThreadPool::new(4);
connect_and_send_request();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
pool.execute(|| {
let main_mock = mock("GET", "/").create();
handle_connection(stream);
println!("Main mock {}", main_mock);
main_mock.assert();
});
}
fn handle_connection(mut stream: TcpStream) {
let mut response = [0; 512];
stream.read(&mut response).unwrap();
stream.flush().unwrap();
println!("Request: {}", String::from_utf8_lossy(&response[..]));
}
}
В моем "Запросе" println!
я вижу строку моего запроса, но main_mock.assert()
на основе Mockito завершается неудачно:
thread <unnamed> panicked at assertion failed: (left == right)
expect GET / ... but recived 0.