Improve testing

next
Sayan Nandan 4 years ago
parent 12634858c0
commit a29831d7ab
No known key found for this signature in database
GPG Key ID: C31EFD7DDA12AEE0

@ -23,6 +23,7 @@
use crate::dbnet;
use crate::ADDR;
use std::io::ErrorKind;
use std::net::{Shutdown, SocketAddr};
use tokio::net::{TcpListener, TcpStream};
use tokio::prelude::*;
@ -34,7 +35,10 @@ async fn start_server() -> Option<SocketAddr> {
// to bind to the port, since this will _almost_ never happen on our CI
let listener = match TcpListener::bind(ADDR).await {
Ok(l) => l,
Err(_) => return None,
Err(e) => match e.kind() {
ErrorKind::AddrInUse => return None,
x @ _ => panic!("Failed to start bg async server: '{:?}'", x),
},
};
let addr = if let Ok(addr) = listener.local_addr() {
Some(addr)
@ -45,10 +49,26 @@ async fn start_server() -> Option<SocketAddr> {
addr
}
async fn try_get_stream() -> TcpStream {
let mut server = start_server().await;
if let Ok(stream) = TcpStream::connect(ADDR).await {
return stream;
}
loop {
// try starting the server again
server = start_server().await;
if let Ok(stream) = TcpStream::connect(ADDR).await {
return stream;
} else {
continue;
}
}
}
#[tokio::test]
async fn test_heya() {
let server = start_server().await;
let mut stream = TcpStream::connect(ADDR).await.unwrap();
let mut stream = try_get_stream().await;
stream
.write_all(b"#2\n*1\n#2\n&1\n#4\nHEYA\n")
.await
@ -63,7 +83,7 @@ async fn test_heya() {
#[tokio::test]
async fn test_set_single_nil() {
let server = start_server().await;
let mut stream = TcpStream::connect(ADDR).await.unwrap();
let mut stream = try_get_stream().await;
stream
.write_all(b"#2\n*1\n#2\n&2\n#3\nGET\n#1\nx\n")
.await
@ -78,14 +98,14 @@ async fn test_set_single_nil() {
#[tokio::test]
async fn test_set_multiple_nil() {
let server = start_server().await;
let mut stream = TcpStream::connect(ADDR).await.unwrap();
let mut stream = try_get_stream().await;
stream
.write_all(b"#2\n*1\n#2\n&3\n#3\nGET\n#1\nx\n#2\nex\n")
.await
.unwrap();
let res_should_be = b"#2\n*1\n#2\n&2\n!1\n1\n!1\n1";
let mut response = vec![0; res_should_be.len()];
stream.read(&mut response).await.unwrap();
assert_eq!(response, res_should_be.to_vec());
stream.read_exact(&mut response).await.unwrap();
stream.shutdown(Shutdown::Write).unwrap();
assert_eq!(response, res_should_be.to_vec());
}

Loading…
Cancel
Save