#[cfg(test)] mod tests { use lazy_static::lazy_static; const REDIS_DEFAULT_ADDR_PORT: &'static str = "redis://127.0.0.1:6379"; type RedisModuleList = Vec>; lazy_static! { static ref REDIS_CLIENT: redis::Client = { redis::Client::open(REDIS_DEFAULT_ADDR_PORT) .expect("Can't create redis client") }; } #[test] fn get_connection() { assert!(REDIS_CLIENT.get_connection().is_ok()); } #[test] fn module_is_load() { let result: redis::RedisResult = redis::cmd("MODULE") .arg("LIST") .query(&mut REDIS_CLIENT.get_connection().unwrap()); let mut is_module_load = false; 'outer: for module in result { for module_data in module { if module_data.contains(&"RustRegxCommand".to_string()) { is_module_load = true; break 'outer; } } } assert!(is_module_load); } #[test] fn find_key_by_regex() { set_values_for_find_by_keys(); let get_value = redis::cmd("KEYS") .arg("hello:*:2012") .query::>(&mut REDIS_CLIENT.get_connection().unwrap()); assert_eq!(1, get_value.unwrap().len()); let get_value = redis::cmd("RGKEYS") .arg("hello.*2012$") .query::>(&mut REDIS_CLIENT.get_connection().unwrap()); assert_eq!(2, get_value.unwrap().len()); } #[test] fn find_values_by_regex() { set_values_for_find_by_value(); assert_eq!( vec![ "test1".to_string(), "test2".to_string(), "test3".to_string(), ], execute_rg_values("GET /user/.*") ); assert_eq!( vec![ "test3".to_string(), "test4".to_string(), "test6".to_string(), ], execute_rg_values("(.*) /user/.*123$") ); assert_eq!( vec![ "test5".to_string(), ], execute_rg_values("(.*) /news/.*12$") ); } fn execute_rg_values(raw_regex: &str) -> Vec { let mut result = redis::cmd("RGVALUES") .arg("*") .arg(raw_regex) .query::>(&mut REDIS_CLIENT.get_connection().unwrap()) .unwrap(); result.sort(); result } fn set_values_for_find_by_value() { let data: Vec<(&str, &str)> = vec![ ("test1", "GET /user/12/134"), ("test6", "POST /user/12/01123"), ("test3", "GET /user/12/123123"), ("test4", "DELETE /user/12/01123"), ("test5", "GET /news/9912"), ("test2", "GET /user/4124/910"), ]; let _: Vec = data.iter() .map(|(key, value)| set_value_in_redis(key, value)) .filter(|is_write| *is_write) .collect(); } fn set_values_for_find_by_keys() { let data: Vec<(&str, &str)> = vec![ ("hello:world:2012", "1"), ("helloworld:2012", "1"), ("helloworld:2012:test", "1") ]; let _: Vec = data.iter() .map(|(key, value)| set_value_in_redis(key, value)) .filter(|is_write| *is_write) .collect(); } fn set_value_in_redis(key: &str, value: &str) -> bool { redis::cmd("SET") .arg(key) .arg(value) .query::<()>(&mut REDIS_CLIENT.get_connection().unwrap()).is_ok() } }