#[macro_export]
macro_rules! cred_store_test_cases {
($ctor:expr) => {
use btlib::{
crypto::{Creds, CredsPriv, Error},
Epoch, Principaled,
};
use btserde::to_vec;
use std::time::Duration;
#[test]
fn create_new() {
let _ = $ctor;
}
#[test]
fn node_creds() {
let case = $ctor;
let result = case.node_creds();
assert!(result.is_ok());
}
#[test]
fn root_creds_returns_same_as_gen_root_creds() {
const PASSWORD: &str = "MaximalIrony";
let case = $ctor;
let expected = case.gen_root_creds(PASSWORD).unwrap();
let actual = case.root_creds(PASSWORD).unwrap();
assert!(std::ptr::eq(expected.as_ref(), actual.as_ref()));
}
#[test]
fn root_creds_wrong_password_is_error() {
let case = $ctor;
case.gen_root_creds("right").unwrap();
let result = case.root_creds("wrong");
let passed = if let Some(err) = result.err() {
if let Some(Error::WrongRootPassword) = err.downcast_ref::<Error>() {
true
} else {
false
}
} else {
false
};
assert!(passed);
}
#[test]
fn storage_key() {
let case = $ctor;
let result = case.storage_key();
assert!(result.is_ok());
}
#[test]
fn export_import_root_creds() {
const SRC_PASSWORD: &str = "FALLING_MAN";
const DST_PASSWORD: &str = "RUNNING_MAN";
let src = $ctor;
let dst = $ctor;
let expected = src.gen_root_creds(SRC_PASSWORD).unwrap();
let previous = dst.gen_root_creds(DST_PASSWORD).unwrap();
let storage_key = dst.storage_key().unwrap();
let exported = src
.export_root_creds(&expected, SRC_PASSWORD, &storage_key)
.unwrap();
let actual = dst.import_root_creds(SRC_PASSWORD, exported).unwrap();
assert!(!std::ptr::eq(previous.as_ref(), actual.as_ref()));
assert!(to_vec(expected.as_ref()).unwrap() == to_vec(actual.as_ref()).unwrap());
}
#[test]
fn import_root_creds_wrong_password_is_error() {
const RIGHT_PW: &str = "right";
const WRONG_PW: &str = "wrong";
let src = $ctor;
let dst = $ctor;
let root_creds = src.gen_root_creds("right").unwrap();
let storage_key = dst.storage_key().unwrap();
let exported = src
.export_root_creds(&root_creds, RIGHT_PW, &storage_key)
.unwrap();
let result = dst.import_root_creds(WRONG_PW, exported);
assert!(result.is_err());
}
#[test]
fn assign_node_writecap() {
let case = $ctor;
let mut node_creds = case.node_creds().unwrap();
let root_creds = case.gen_root_creds("password").unwrap();
let expires = Epoch::now() + Duration::from_secs(3600);
let expected = root_creds
.issue_writecap(node_creds.principal(), &mut std::iter::empty(), expires)
.unwrap();
case.assign_node_writecap(&mut node_creds, expected.clone())
.unwrap();
let actual = node_creds.writecap().unwrap();
assert_eq!(&expected, actual);
}
};
}