From 58e45149d49eee0ae09849b9cecf9ad66ce09b8a Mon Sep 17 00:00:00 2001 From: William Brown Date: Wed, 7 Nov 2018 17:27:11 +1000 Subject: [PATCH] Begin adding query server tests --- src/be/mod.rs | 8 +++++ src/entry.rs | 1 - src/filter.rs | 20 ++++--------- src/server.rs | 63 +++++++++++++++++++++++++++++++++++++++ tests/integration_test.rs | 21 +++++++++---- 5 files changed, 92 insertions(+), 21 deletions(-) diff --git a/src/be/mod.rs b/src/be/mod.rs index a702a8bcd..d4b322769 100644 --- a/src/be/mod.rs +++ b/src/be/mod.rs @@ -35,6 +35,8 @@ impl BackendAuditEvent { #[derive(Debug)] struct IdEntry { + // FIXME: This should be u64, but sqlite uses i32 ... + // Should we use a bigint pk and just be done? id: i32, data: String, } @@ -151,6 +153,12 @@ impl Backend { // Alloc a vec for the entries. // FIXME: Make this actually a good size for the result set ... // FIXME: Actually compute indexes here. + // So to make this use indexes, we can use the filter type and + // destructure it to work out what we need to actually search (if + // possible) to create the candidate set. + // Unlike DS, even if we don't get the index back, we can just pass + // to the in-memory filter test and be done. + let mut raw_entries: Vec = Vec::new(); { // Actually do a search now! diff --git a/src/entry.rs b/src/entry.rs index 7fd2e3e7a..7aa4d82b2 100644 --- a/src/entry.rs +++ b/src/entry.rs @@ -185,4 +185,3 @@ mod tests { assert!(!e.pres("name")); } } - diff --git a/src/filter.rs b/src/filter.rs index 9bd6b3116..ed4bd755e 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -43,25 +43,15 @@ impl Filter { // Go through the filter components and check them in the entry. // This is recursive!!!! match self { - Filter::Eq(_, _) => { - false - } - Filter::Sub(_, _) => { - false - } + Filter::Eq(_, _) => false, + Filter::Sub(_, _) => false, Filter::Pres(attr) => { // Given attr, is is present in the entry? e.pres(attr.as_str()) } - Filter::Or(_) => { - false - } - Filter::And(_) => { - false - } - Filter::Not(_) => { - false - } + Filter::Or(_) => false, + Filter::And(_) => false, + Filter::Not(_) => false, } } } diff --git a/src/server.rs b/src/server.rs index 99bd897de..d71d0ee15 100644 --- a/src/server.rs +++ b/src/server.rs @@ -85,4 +85,67 @@ impl Handler for QueryServer { } } +impl Handler for QueryServer { + type Result = Result; + + fn handle(&mut self, msg: CreateEvent, _: &mut Self::Context) -> Self::Result { + log_event!(self.log, "Begin event {:?}", msg); + Err(()) + } +} + // Auth requests? How do we structure these ... + +#[cfg(test)] +mod tests { + extern crate actix; + use actix::prelude::*; + + extern crate futures; + use futures::future; + use futures::future::lazy; + use futures::future::Future; + + extern crate tokio; + + use super::super::be::Backend; + use super::super::log::{self, EventLog, LogEvent}; + use super::super::server::QueryServer; + + macro_rules! run_test { + ($test_fn:expr) => {{ + System::run(|| { + let test_log = log::start(); + + let mut be = Backend::new(test_log.clone(), ""); + let mut test_server = QueryServer::new(test_log.clone(), be); + + // Could wrap another future here for the future::ok bit... + let fut = $test_fn(test_log, test_server); + let comp_fut = fut.map_err(|()| ()).and_then(|r| { + println!("Stopping actix ..."); + actix::System::current().stop(); + future::result(Ok(())) + }); + + tokio::spawn(comp_fut); + }); + }}; + } + + #[test] + fn test_be_create_user() { + run_test!(|log, mut server: QueryServer| { + let r1 = server.search().unwrap(); + assert!(r1.len() == 0); + + let cr = server.create(); + assert!(cr.is_ok()); + + let r2 = server.search().unwrap(); + assert!(r2.len() == 1); + + future::ok(()) + }); + } +} diff --git a/tests/integration_test.rs b/tests/integration_test.rs index b743d67db..6db88daa8 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -57,16 +57,27 @@ macro_rules! run_test { #[test] fn test_schema() { - run_test!(|log: actix::Addr, server| log.send(LogEvent { - msg: String::from("Test log event") - })); + run_test!( + |log: actix::Addr, server: actix::Addr| log.send(LogEvent { + msg: String::from("Test log event") + }) + ); } /* #[test] fn test_be_create_user() { - run_test!(|log, be, server| { - println!("It works"); + run_test!(|log, server: actix::Addr| { + let r1 = server.search(); + assert!(r1.len() == 0); + + let cr = server.create(); + assert!(cr.is_ok()); + + let r2 = server.search(); + assert!(r2.len() == 1); + + future::ok(()) }); } */