Fix lower bound for ports in dbtest compiler macro

Redundant test objects were also removed
next
Sayan Nandan 4 years ago
parent 3d1dd04b0d
commit 425afbe8c7
No known key found for this signature in database
GPG Key ID: C31EFD7DDA12AEE0

@ -90,7 +90,7 @@ mod tests {
where where
T: AsRef<str>, T: AsRef<str>,
{ {
use crate::tests::{fresp, start_server, terrapipe, QueryVec, TcpStream}; use crate::tests::{fresp, terrapipe, TcpStream};
use crate::__func__; use crate::__func__;
use tokio::prelude::*; use tokio::prelude::*;
let mut query = String::from("MSET "); let mut query = String::from("MSET ");

@ -54,50 +54,3 @@ async fn start_test_server(port: u16) -> SocketAddr {
tokio::spawn(async move { dbnet::test_run(listener, db, tokio::signal::ctrl_c()).await }); tokio::spawn(async move { dbnet::test_run(listener, db, tokio::signal::ctrl_c()).await });
addr addr
} }
static ADDR: &'static str = "127.0.0.1:2003";
/// Start the server as a background asynchronous task
async fn start_server() -> (Option<SocketAddr>, CoreDB) {
let listener = TcpListener::bind(ADDR).await.unwrap();
let db = CoreDB::new(BGSave::default(), SnapshotConfig::default()).unwrap();
let asyncdb = db.clone();
let addr = if let Ok(addr) = listener.local_addr() {
Some(addr)
} else {
None
};
tokio::spawn(async move { dbnet::test_run(listener, asyncdb, tokio::signal::ctrl_c()).await });
(addr, db)
}
struct QueryVec<'a> {
streams: Vec<TcpStream>,
db: &'a CoreDB,
}
impl<'a> QueryVec<'a> {
pub fn new<'b>(db: &'b CoreDB) -> Self
where
'b: 'a,
{
QueryVec {
streams: Vec::new(),
db,
}
}
pub async fn add<F, Fut>(&mut self, function: F)
where
F: FnOnce(TcpStream) -> Fut,
Fut: Future<Output = TcpStream>,
{
self.db.finish_db();
let stream = TcpStream::connect(ADDR).await.unwrap();
self.streams.push(function(stream).await);
}
pub fn run_queries_and_close_sockets(self) {
for socket in self.streams.into_iter() {
socket.shutdown(Shutdown::Both).unwrap();
}
self.db.finish_db();
}
}

@ -45,7 +45,7 @@ fn parse_dbtest(mut input: syn::ItemFn, rand: u16) -> Result<TokenStream, syn::E
} }
sig.asyncness = None; sig.asyncness = None;
let body = quote! { let body = quote! {
use crate::tests::{fresp, start_server, terrapipe, QueryVec, TcpStream}; use crate::tests::{fresp, terrapipe, TcpStream};
use crate::__func__; use crate::__func__;
use tokio::prelude::*; use tokio::prelude::*;
let addr = crate::tests::start_test_server(#rand).await; let addr = crate::tests::start_test_server(#rand).await;
@ -148,26 +148,16 @@ fn parse_test_module(args: TokenStream, item: TokenStream) -> TokenStream {
let modname = &input.ident; let modname = &input.ident;
let mut rng = thread_rng(); let mut rng = thread_rng();
let mut in_set = HashSet::<u16>::new(); let mut in_set = HashSet::<u16>::new();
// We will exclude a couple of the default system ports
in_set.insert(80); // HTTP
in_set.insert(443); // SSL
in_set.insert(21); // FTP
in_set.insert(389); // LDAP
in_set.insert(636); // LDAP-SSL
in_set.insert(161); // SNMP
in_set.insert(22); // SSH
in_set.insert(23); // TELNET
in_set.insert(25); // SMTP
in_set.insert(53); // DNS
in_set.insert(119); // NNTP
in_set.insert(143); // IMAP
in_set.insert(993); // IMAP-SSL
let mut result = quote! {}; let mut result = quote! {};
for item in content { for item in content {
let mut rand: u16 = rng.gen_range(1, 65535); /*
Since standard (non-root) users can only access ports greater than 1024
we will set the limit to (1024, 65535)
*/
let mut rand: u16 = rng.gen_range(1025, 65535);
while in_set.contains(&rand) { while in_set.contains(&rand) {
rand = rng.gen_range(1, 65535); rand = rng.gen_range(1025, 65535);
} }
in_set.insert(rand); in_set.insert(rand);
match item { match item {

Loading…
Cancel
Save