Enable tests for `get`, `mget` and `heya`

next
Sayan Nandan 4 years ago
parent aeb5899050
commit 9064c0aca3
No known key found for this signature in database
GPG Key ID: C31EFD7DDA12AEE0

56
Cargo.lock generated

@ -35,12 +35,6 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "autocfg"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "bincode" name = "bincode"
version = "1.3.1" version = "1.3.1"
@ -75,17 +69,6 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "chrono"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942f72db697d8767c22d46a598e01f2d3b475501ea43d0db4f16d90259182d0b"
dependencies = [
"num-integer",
"num-traits",
"time",
]
[[package]] [[package]]
name = "clap" name = "clap"
version = "2.33.3" version = "2.33.3"
@ -166,7 +149,7 @@ checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"wasi 0.9.0+wasi-snapshot-preview1", "wasi",
] ]
[[package]] [[package]]
@ -332,25 +315,6 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "num-integer"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
dependencies = [
"autocfg",
]
[[package]] [[package]]
name = "num_cpus" name = "num_cpus"
version = "1.13.0" version = "1.13.0"
@ -571,7 +535,6 @@ version = "0.4.1"
dependencies = [ dependencies = [
"bincode", "bincode",
"bytes", "bytes",
"chrono",
"clap", "clap",
"env_logger", "env_logger",
"lazy_static", "lazy_static",
@ -611,17 +574,6 @@ dependencies = [
"lazy_static", "lazy_static",
] ]
[[package]]
name = "time"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
dependencies = [
"libc",
"wasi 0.10.0+wasi-snapshot-preview1",
"winapi 0.3.9",
]
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "0.2.22" version = "0.2.22"
@ -703,12 +655,6 @@ version = "0.9.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
version = "0.10.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.2.8" version = "0.2.8"

@ -14,7 +14,6 @@ bincode = "1.3.1"
parking_lot = "0.11.0" parking_lot = "0.11.0"
lazy_static = "1.4.0" lazy_static = "1.4.0"
serde_derive = "1.0.115" serde_derive = "1.0.115"
chrono = "0.4.15"
serde = {version = "1.0.115", features= ["derive"]} serde = {version = "1.0.115", features= ["derive"]}
toml = "0.5.6" toml = "0.5.6"
clap = {version = "2.33.3", features=["yaml"]} clap = {version = "2.33.3", features=["yaml"]}

@ -26,7 +26,6 @@ use crate::protocol::Connection;
use crate::protocol::Query; use crate::protocol::Query;
use crate::queryengine; use crate::queryengine;
use bytes::Bytes; use bytes::Bytes;
use libtdb::util::terminal;
use libtdb::TResult; use libtdb::TResult;
use parking_lot::RwLock; use parking_lot::RwLock;
use parking_lot::RwLockReadGuard; use parking_lot::RwLockReadGuard;
@ -169,7 +168,7 @@ impl CoreDB {
shared: Arc::new(Shared { shared: Arc::new(Shared {
bgsave_task: Notify::new(), bgsave_task: Notify::new(),
table: RwLock::new(Coretable { table: RwLock::new(Coretable {
coremap: HashMap::new(), coremap: HashMap::<String, Data>::new(),
terminate: false, terminate: false,
}), }),
}), }),

@ -21,13 +21,11 @@
use tokio::net::TcpListener; use tokio::net::TcpListener;
mod config; mod config;
use chrono::Local;
use std::env; use std::env;
mod coredb; mod coredb;
mod dbnet; mod dbnet;
mod diskstore; mod diskstore;
mod kvengine; mod kvengine;
use std::io::Write;
mod protocol; mod protocol;
mod queryengine; mod queryengine;
mod resp; mod resp;

@ -22,10 +22,7 @@
//! This module contains automated tests for queries //! This module contains automated tests for queries
use crate::dbnet; use crate::dbnet;
use std::io::ErrorKind;
use std::net::{Shutdown, SocketAddr}; use std::net::{Shutdown, SocketAddr};
use std::thread;
use std::time::Duration;
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio::prelude::*; use tokio::prelude::*;
@ -36,13 +33,7 @@ async fn start_server() -> Option<SocketAddr> {
// HACK(@ohsayan): Since we want to start the server if it is not already // HACK(@ohsayan): Since we want to start the server if it is not already
// running, or use it if it is already running, we just return none if we failed // running, or use it if it is already running, we just return none if we failed
// to bind to the port, since this will _almost_ never happen on our CI // to bind to the port, since this will _almost_ never happen on our CI
let listener = match TcpListener::bind(ADDR).await { let listener = TcpListener::bind(ADDR).await.unwrap();
Ok(l) => l,
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() { let addr = if let Ok(addr) = listener.local_addr() {
Some(addr) Some(addr)
} else { } else {
@ -52,29 +43,10 @@ async fn start_server() -> Option<SocketAddr> {
addr addr
} }
async fn try_get_stream() -> TcpStream {
const SLEEP_DURATION: u64 = 4;
let mut server = start_server().await;
thread::sleep(Duration::from_secs(SLEEP_DURATION)); // Sleep for four seconds
if let Ok(stream) = TcpStream::connect(ADDR).await {
return stream;
}
loop {
// try starting the server again
server = start_server().await;
thread::sleep(Duration::from_secs(SLEEP_DURATION)); // Sleep for four seconds
if let Ok(stream) = TcpStream::connect(ADDR).await {
return stream;
} else {
continue;
}
}
}
#[tokio::test] #[tokio::test]
async fn test_heya() { async fn test_queries() {
let server = start_server().await; let server = start_server().await;
let mut stream = try_get_stream().await; let mut stream = TcpStream::connect(ADDR).await.unwrap();
stream stream
.write_all(b"#2\n*1\n#2\n&1\n#4\nHEYA\n") .write_all(b"#2\n*1\n#2\n&1\n#4\nHEYA\n")
.await .await
@ -82,15 +54,9 @@ async fn test_heya() {
let res_should_be = "#2\n*1\n#2\n&1\n+4\nHEY!\n".as_bytes().to_owned(); let res_should_be = "#2\n*1\n#2\n&1\n+4\nHEY!\n".as_bytes().to_owned();
let mut response = vec![0; res_should_be.len()]; let mut response = vec![0; res_should_be.len()];
stream.read_exact(&mut response).await.unwrap(); stream.read_exact(&mut response).await.unwrap();
stream.shutdown(Shutdown::Write).unwrap();
assert_eq!(response.to_vec(), res_should_be); assert_eq!(response.to_vec(), res_should_be);
} println!("HEYA complete");
// Test single nil value
#[tokio::test]
#[ignore]
async fn test_set_single_nil() {
let server = start_server().await;
let mut stream = try_get_stream().await;
stream stream
.write_all(b"#2\n*1\n#2\n&2\n#3\nGET\n#1\nx\n") .write_all(b"#2\n*1\n#2\n&2\n#3\nGET\n#1\nx\n")
.await .await
@ -98,22 +64,19 @@ async fn test_set_single_nil() {
let res_should_be = "#2\n*1\n#2\n&1\n!1\n1\n".as_bytes().to_owned(); let res_should_be = "#2\n*1\n#2\n&1\n!1\n1\n".as_bytes().to_owned();
let mut response = vec![0; res_should_be.len()]; let mut response = vec![0; res_should_be.len()];
stream.read_exact(&mut response).await.unwrap(); stream.read_exact(&mut response).await.unwrap();
stream.shutdown(Shutdown::Write).unwrap();
assert_eq!(response, res_should_be); assert_eq!(response, res_should_be);
} println!("Single NIL complete");
#[tokio::test] // Test multiple nil
#[ignore]
async fn test_set_multiple_nil() {
let server = start_server().await;
let mut stream = try_get_stream().await;
stream stream
.write_all(b"#2\n*1\n#2\n&3\n#3\nGET\n#1\nx\n#2\nex\n") .write_all(b"#2\n*1\n#2\n&3\n#4\nMGET\n#1\nx\n#2\nex\n")
.await .await
.unwrap(); .unwrap();
let res_should_be = b"#2\n*1\n#2\n&2\n!1\n1\n!1\n1"; 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()]; let mut response = vec![0; res_should_be.len()];
stream.read_exact(&mut response).await.unwrap(); stream.read_exact(&mut response).await.unwrap();
stream.shutdown(Shutdown::Write).unwrap();
assert_eq!(response, res_should_be.to_vec()); assert_eq!(response, res_should_be.to_vec());
println!("Multiple NIL complete");
// Stop the server
stream.shutdown(Shutdown::Write).unwrap();
} }

Loading…
Cancel
Save