Simplify tests

next
Sayan Nandan 3 years ago
parent f67057dfb5
commit 3c14501913
No known key found for this signature in database
GPG Key ID: 8BC07A0A4D41DD52

4
.gitignore vendored

@ -12,7 +12,7 @@ snapstore.partmap
.sky_pid
.devcontainer
*.deb
*.pem
server1
server2
.skytestenv
.skytest_*
*.pem

@ -1,5 +1,4 @@
# although this is exported by cargo, we'll export it again to use it in the Makefile
SHELL := /bin/bash
export ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
SKYTEST_S1_FILE := $(ROOT_DIR)/ci/server1.toml
SKYTEST_S2_FILE := $(ROOT_DIR)/ci/server2.toml
@ -139,12 +138,12 @@ test: .pre
@${SEP}
@${SEP}
@echo "Running all tests ..."
@chmod +x ci/pretest.sh && source ci/pretest.sh && ${TEST}
@${TEST}
@echo "Waiting for server to shut down ..."
@${STOP_SERVER}
@sleep 10
@echo "Removing temporary files ..."
@rm -rf .sky_pid cert.pem key.pem server1 server2 .skytestenv
@rm -rf .sky_pid server1 server2 .skytest_*
@${SEP}
clean:
@${SEP}

@ -1,19 +0,0 @@
#!/bin/bash
export ORIGIN_KEY=4527387f92a381cbe804593f33991d327d456a97
function ensure_eq() {
local q1=`${RUNSKYSH} "${1}" | tr -d '[:space:]' | sed -r 's/\x1B\[(;?[0-9]{1,3})+[mGK]//g'`
local q1e=${2}
if [[ "$q1" != "$q1e" ]]; then
echo "Expected '${q1e}', but got '${q1}' instead"
exit 1
fi
}
OKAY="(Okay)"
RUNSKYSH="cargo run ${TARGET} -p skysh -- --port 2005 -e"
export ROOTUSER_TOKEN=`${RUNSKYSH} "auth claim ${ORIGIN_KEY}" | tr -d '[:space:]' | tr -d "\""`
# login as root
export TESTUSER_TOKEN=`${RUNSKYSH} "auth login root ${ROOTUSER_TOKEN}" -e "auth adduser testuser"\
| head -n 2 | tail -n 1 | tr -d '[:space:]' | tr -d "\"" | sed -r 's/\x1B\[(;?[0-9]{1,3})+[mGK]//g'`
echo "TESTUSER_TOKEN=${TESTUSER_TOKEN}" >> .skytestenv
echo "ROOTUSER_TOKEN=${ROOTUSER_TOKEN}" >> .skytestenv

@ -6,4 +6,4 @@ noart = true
[ssl]
key="../key.pem"
chain="../cert.pem"
port = 2004
port = 2004

@ -4,9 +4,9 @@ port = 2005
noart = true
[auth]
origin_key="4527387f92a381cbe804593f33991d327d456a97"
origin_key = "4527387f92a381cbe804593f33991d327d456a97"
[ssl]
key="../key.pem"
chain="../cert.pem"
port = 2006
key = "../key.pem"
chain = "../cert.pem"
port = 2006

@ -1,8 +1,9 @@
function gen_sub() {
local result="${1}"
case $OSTYPE in
msys | win32) result="//XX=x${result}" ;;
msys|win32) result="//XX=x${result}"
esac
echo "$result"
}
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj $(gen_sub '/C=US/CN=example.com') -keyout key.pem -out cert.pem

@ -35,6 +35,17 @@ pub const AUTHKEY_SIZE: usize = 40;
/// Size of an authn ID in bytes
pub const AUTHID_SIZE: usize = 40;
#[cfg(debug_assertions)]
pub mod testsuite_data {
//! Temporary users created by the testsuite in debug mode
pub const TESTSUITE_ROOT_USER: &str = "root";
pub const TESTSUITE_TEST_USER: &str = "testuser";
#[cfg(test)]
pub const TESTSUITE_ROOT_TOKEN: &str = "XUOdVKhEONnnGwNwT7WeLqbspDgVtKex0/nwFwBSW7XJxioHwpg6H.";
#[cfg(test)]
pub const TESTSUITE_TEST_TOKEN: &str = "mpobAB7EY8vnBs70d/..h1VvfinKIeEJgt1rg4wUkwF6aWCvGGR9le";
}
uninit_array! {
const USER_ROOT_ARRAY: [u8; 40] = [b'r', b'o', b'o', b't'];
}
@ -61,19 +72,51 @@ pub struct AuthProvider {
}
impl AuthProvider {
pub fn new_disabled() -> Self {
fn _new(authmap: Authmap, whoami: Option<AuthID>, origin: Option<Authkey>) -> Self {
Self {
authmap: Arc::default(),
whoami: None,
origin: None,
authmap,
whoami,
origin,
}
}
/// New provider with no origin-key
pub fn new_disabled() -> Self {
Self::_new(Default::default(), None, None)
}
/// New provider with zero users
#[cfg(test)]
pub fn new_blank(origin: Option<Authkey>) -> Self {
Self::_new(Default::default(), None, origin)
}
/// New provider with users from the provided map
///
/// ## Test suite
/// The testsuite creates users `root` and `testuser`; this **does not** apply to
/// release mode
pub fn new(authmap: Arc<Coremap<AuthID, Authkey>>, origin: Option<Authkey>) -> Self {
Self {
authmap,
whoami: None,
origin,
let slf = Self::_new(authmap, None, origin);
#[cfg(debug_assertions)]
{
// 'root' user in test mode
slf.authmap.true_if_insert(
AuthID::try_from_slice(testsuite_data::TESTSUITE_ROOT_USER).unwrap(),
Authkey::from([
172, 143, 117, 169, 158, 156, 33, 106, 139, 107, 20, 106, 91, 219, 34, 157, 98,
147, 142, 91, 222, 238, 205, 120, 72, 171, 90, 218, 147, 2, 75, 67, 44, 108,
185, 124, 55, 40, 156, 252,
]),
);
// 'testuser' user in test mode
slf.authmap.true_if_insert(
AuthID::try_from_slice(testsuite_data::TESTSUITE_TEST_USER).unwrap(),
Authkey::from([
172, 183, 60, 221, 53, 240, 231, 217, 113, 112, 98, 16, 109, 62, 235, 95, 184,
107, 130, 139, 43, 197, 40, 31, 176, 127, 185, 22, 172, 124, 39, 225, 124, 71,
193, 115, 176, 162, 239, 93,
]),
);
}
slf
}
pub const fn is_enabled(&self) -> bool {
matches!(self.origin, Some(_))
@ -107,8 +150,13 @@ impl AuthProvider {
Err(AuthError::PermissionDenied)
}
}
fn _claim_user(&self, claimant: &[u8]) -> AuthResult<String> {
pub fn _claim_user(&self, claimant: &[u8]) -> AuthResult<String> {
let (key, store) = keys::generate_full();
println!(
"For {claimant}, store: {:?}, key: {key}",
store,
claimant = String::from_utf8_lossy(claimant)
);
if self.authmap.true_if_insert(
Array::try_from_slice(claimant).ok_or(AuthError::Other(errors::AUTH_ERROR_TOO_LONG))?,
store,

@ -36,27 +36,23 @@ mod keys {
mod authn {
use crate::auth::{AuthError, AuthProvider};
use crate::corestore::htable::Coremap;
use std::sync::Arc;
const ORIG: &[u8; 40] = b"c4299d190fb9a00626797fcc138c56eae9971664";
#[test]
fn claim_root_okay() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
let _ = provider.claim_root(ORIG).unwrap();
}
#[test]
fn claim_root_wrongkey() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
let claim_err = provider.claim_root(&ORIG[1..]).unwrap_err();
assert_eq!(claim_err, AuthError::BadCredentials);
}
#[test]
fn claim_root_disabled() {
let mut provider = AuthProvider::new(Arc::new(Coremap::new()), None);
let mut provider = AuthProvider::new_disabled();
assert_eq!(
provider.claim_root(b"abcd").unwrap_err(),
AuthError::Disabled
@ -64,8 +60,7 @@ mod authn {
}
#[test]
fn claim_root_already_claimed() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
let _ = provider.claim_root(ORIG).unwrap();
assert_eq!(
provider.claim_root(ORIG).unwrap_err(),
@ -74,8 +69,7 @@ mod authn {
}
#[test]
fn claim_user_okay_with_login() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
// claim root
let rootkey = provider.claim_root(ORIG).unwrap();
// login as root
@ -86,8 +80,7 @@ mod authn {
#[test]
fn claim_user_fail_not_root_with_login() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
// claim root
let rootkey = provider.claim_root(ORIG).unwrap();
// login as root
@ -104,8 +97,7 @@ mod authn {
}
#[test]
fn claim_user_fail_anonymous() {
let authmap = Arc::new(Coremap::new());
let mut provider = AuthProvider::new(authmap, Some(*ORIG));
let mut provider = AuthProvider::new_blank(Some(*ORIG));
// claim root
let _ = provider.claim_root(ORIG).unwrap();
// logout

@ -103,13 +103,13 @@ impl DBTestFunctionConfig {
let ret;
if *testuser {
ret = quote! {
let __username__ = "testuser";
let __password__ = ::std::env::var("TESTUSER_TOKEN").expect("TESTUSER_TOKEN unset");
let __username__ = crate::auth::provider::testsuite_data::TESTSUITE_TEST_USER;
let __password__ = crate::auth::provider::testsuite_data::TESTSUITE_TEST_TOKEN;
};
} else if *rootuser {
ret = quote! {
let __username__ = "root";
let __password__ = ::std::env::var("ROOTUSER_TOKEN").expect("ROOTUSER_TOKEN unset");
let __username__ = crate::auth::provider::testsuite_data::TESTSUITE_ROOT_USER;
let __password__ = crate::auth::provider::testsuite_data::TESTSUITE_ROOT_TOKEN;
};
} else {
let (username, password) = login;
@ -126,7 +126,7 @@ impl DBTestFunctionConfig {
}
Some(quote! {
#ret
let __loginquery__ = ::skytable::query!("auth", "login", __username__, __password__.clone());
let __loginquery__ = ::skytable::query!("auth", "login", __username__, __password__);
assert_eq!(
con.run_simple_query(&__loginquery__).await.unwrap(),
::skytable::Element::RespCode(::skytable::RespCode::Okay),

Loading…
Cancel
Save