From d0ee66ac4c5a71bab43b183c8bb47401fabf10a7 Mon Sep 17 00:00:00 2001 From: Sayan Nandan Date: Wed, 8 Sep 2021 00:41:33 -0700 Subject: [PATCH] Add remaining `lget` tests and add `lmod` tests --- server/src/tests/kvengine_list.rs | 100 ++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/server/src/tests/kvengine_list.rs b/server/src/tests/kvengine_list.rs index 05d6b8ad..88e98404 100644 --- a/server/src/tests/kvengine_list.rs +++ b/server/src/tests/kvengine_list.rs @@ -118,4 +118,104 @@ mod __private { let q = query!("lget", "mylist", "valueat", "0"); runeq!(con, q, Element::String("v1".to_owned())); } + /// lget valueat (non-existent index) + async fn test_lget_with_valueat_non_existent_index() { + lset!(con, "mylist", "v1"); + let q = query!("lget", "mylist", "valueat", "1"); + runeq!( + con, + q, + Element::RespCode(RespCode::ErrorString("bad-list-index".to_owned())) + ) + } + /// lget valueat (invalid index) + async fn test_lget_with_valueat_bad_index() { + lset!(con, "mylist", "v1"); + let q = query!("lget", "mylist", "valueat", "1a"); + runeq!(con, q, Element::RespCode(RespCode::Wrongtype)) + } + /// lget valueat (nil) + async fn test_lget_with_valueat_nil() { + let q = query!("lget", "mybadlist", "valueat", "2"); + runeq!(con, q, Element::RespCode(RespCode::NotFound)); + } + /// lget valueat (nil + bad index) + async fn test_lget_with_bad_index_but_nil_key() { + let q = query!("lget", "mybadlist", "valueat", "2a"); + runeq!(con, q, Element::RespCode(RespCode::Wrongtype)); + } + /// lget valueat (syntax error) + async fn test_lget_with_valueat_syntax_error() { + let q = query!("lget", "mybadlist", "valueat", "2", "3"); + runeq!(con, q, Element::RespCode(RespCode::ActionError)); + } + + // lmod tests + // lmod push + /// lmod push (okay) + async fn test_lmod_push_okay() { + lset!(con, "mylist"); + let q = query!("lmod", "mylist", "push", "v1"); + runeq!(con, q, Element::RespCode(RespCode::Okay)); + } + /// lmod push (nil) + async fn test_lmod_push_nil() { + let q = query!("lmod", "mylist", "push", "v1"); + runeq!(con, q, Element::RespCode(RespCode::NotFound)); + } + /// lmod push (syntax error) + async fn test_lmod_syntax_error() { + let q = query!("lmod", "mylist", "push"); + runeq!(con, q, Element::RespCode(RespCode::ActionError)); + } + // lmod pop + /// lmod pop (okay) + async fn test_lmod_pop_noindex_okay() { + lset!(con, "mylist", "value"); + let q = query!("lmod", "mylist", "pop"); + runeq!(con, q, Element::String("value".to_owned())); + } + /// lmod pop (good index; okay) + async fn test_lmod_pop_goodindex_okay() { + lset!(con, "mylist", "value1", "value2"); + let q = query!("lmod", "mylist", "pop", "1"); + runeq!(con, q, Element::String("value2".to_owned())); + } + /// lmod pop (bad index + existent key & non-existent key) + async fn test_lmod_pop_badindex_fail() { + lset!(con, "mylist", "v1", "v2"); + let q = query!("lmod", "mylist", "pop", "12badidx"); + runeq!(con, q, Element::RespCode(RespCode::Wrongtype)); + + // this is post-execution; so the error must be pointed out first + let q = query!("lmod", "mymissinglist", "pop", "12badidx"); + runeq!(con, q, Element::RespCode(RespCode::Wrongtype)); + } + /// lmod pop (nil) + async fn test_lmod_pop_nil() { + let q = query!("lmod", "mylist", "pop"); + runeq!(con, q, Element::RespCode(RespCode::NotFound)); + } + /// lmod pop (syntax error) + async fn test_lmod_pop_syntax_error() { + let q = query!("lmod", "mylist", "pop", "whatthe", "whatthe2"); + runeq!(con, q, Element::RespCode(RespCode::ActionError)); + } + // lmod clear + /// lmod clear (okay) + async fn test_lmod_clear_okay() { + lset!(con, "mylist", "v1", "v2"); + let q = query!("lmod", "mylist", "clear"); + runeq!(con, q, Element::RespCode(RespCode::Okay)); + } + /// lmod clear (nil) + async fn test_lmod_clear_nil() { + let q = query!("lmod", "mylist", "clear"); + runeq!(con, q, Element::RespCode(RespCode::NotFound)); + } + /// lmod clear (syntax error) + async fn test_lmod_clear_syntax_error() { + let q = query!("lmod", "mylist", "clear", "unneeded arg"); + runeq!(con, q, Element::RespCode(RespCode::ActionError)); + } }