From f7a4281ed5454217ec29347f17aef28a53df3958 Mon Sep 17 00:00:00 2001 From: Sayan Nandan Date: Sat, 12 Mar 2022 06:03:35 -0800 Subject: [PATCH] Add `auth` syntax checks --- server/src/auth/mod.rs | 2 +- server/src/tests/auth.rs | 83 ++++++++++++++++++++++++++++++++++++++ server/src/tests/macros.rs | 18 ++++++--- 3 files changed, 97 insertions(+), 6 deletions(-) diff --git a/server/src/auth/mod.rs b/server/src/auth/mod.rs index 3f060fc4..f9e4b347 100644 --- a/server/src/auth/mod.rs +++ b/server/src/auth/mod.rs @@ -84,7 +84,7 @@ action! { con.write_response(groups::OKAY).await?; Ok(()) } - _ => util::err(groups::ACTION_ERR), + _ => util::err(groups::UNKNOWN_ACTION), } } fn _auth_claim(con: &mut T, auth: &mut AuthProviderHandle<'_, T, Strm>, iter: &mut ActionIter<'_>) { diff --git a/server/src/tests/auth.rs b/server/src/tests/auth.rs index e7e5aed2..960a0739 100644 --- a/server/src/tests/auth.rs +++ b/server/src/tests/auth.rs @@ -170,3 +170,86 @@ async fn auth_deluser_okay_because_root() { ); assert_okay!(con, query!("auth", "deluser", "supercooluser")) } + +mod syntax_checks { + use crate::auth::provider::testsuite_data::{ + TESTSUITE_ROOT_TOKEN as ROOT_PASS, TESTSUITE_ROOT_USER as ROOT_USER, + TESTSUITE_TEST_TOKEN as PASS, TESTSUITE_TEST_USER as USER, + }; + use skytable::{query, Element, RespCode}; + const ONLYAUTH: u8 = 0; + const NOAUTH: u8 = 1; + const ONLYROOT: u8 = 2; + const NOROOT: u8 = 3; + macro_rules! assert_authn_aerr { + ($con:expr, $query:expr, $username:expr, $password:expr) => {{ + runeq!( + $con, + ::skytable::query!("auth", "login", $username, $password), + ::skytable::Element::RespCode(::skytable::RespCode::Okay) + ); + assert_aerr!($con, $query) + }}; + ($con:expr, $query:expr) => {{ + assert_authn_aerr!($con, $query, NOAUTH) + }}; + ($con:expr, $query:expr, $authnd:ident) => {{ + match $authnd { + ONLYAUTH => { + assert_authn_aerr!($con, $query, ROOT_USER, ROOT_PASS); + assert_authn_aerr!($con, $query, USER, PASS); + } + NOAUTH => { + assert_aerr!($con, $query); + assert_authn_aerr!($con, $query, ROOT_USER, ROOT_PASS); + assert_authn_aerr!($con, $query, USER, PASS); + } + ONLYROOT => { + assert_authn_aerr!($con, $query, ROOT_USER, ROOT_PASS); + } + NOROOT => { + assert_authn_aerr!($con, $query, USER, PASS); + } + _ => panic!("Unknown authnd state"), + } + }}; + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn login_aerr() { + assert_authn_aerr!(con, query!("auth", "login", "lesserdata")); + assert_authn_aerr!(con, query!("auth", "login", "user", "password", "extra")); + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn claim_aerr() { + assert_authn_aerr!(con, query!("auth", "claim")); + assert_authn_aerr!(con, query!("auth", "claim", "origin key", "but more data")); + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn adduser_aerr() { + assert_authn_aerr!( + con, + query!("auth", "adduser", "user", "butextradata"), + ONLYAUTH + ); + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn logout_aerr() { + assert_authn_aerr!(con, query!("auth", "logout", "butextradata"), ONLYAUTH); + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn deluser_aerr() { + assert_authn_aerr!( + con, + query!("auth", "deluser", "someuser", "butextradata"), + ONLYAUTH + ); + } + #[sky_macros::dbtest_func(port = 2005, norun = true)] + async fn unknown_auth_action() { + runeq!( + con, + query!("auth", "raspberry"), + Element::RespCode(RespCode::ErrorString("unknown-action".to_owned())) + ) + } +} diff --git a/server/src/tests/macros.rs b/server/src/tests/macros.rs index 58eb2040..d8272d5e 100644 --- a/server/src/tests/macros.rs +++ b/server/src/tests/macros.rs @@ -64,11 +64,13 @@ macro_rules! runmatch { macro_rules! assert_okay { ($con:expr, $query:expr) => { - runeq!( - $con, - $query, - ::skytable::Element::RespCode(::skytable::RespCode::Okay) - ) + assert_respcode!($con, $query, ::skytable::RespCode::Okay) + }; +} + +macro_rules! assert_aerr { + ($con:expr, $query:expr) => { + assert_respcode!($con, $query, ::skytable::RespCode::ActionError) }; } @@ -96,3 +98,9 @@ macro_rules! assert_skyhash_arrayeq { ) }; } + +macro_rules! assert_respcode { + ($con:expr, $query:expr, $code:expr) => { + runeq!($con, $query, ::skytable::Element::RespCode($code)) + }; +}