2020-06-07 01:53:10 +02:00
|
|
|
#[cfg(test)]
|
|
|
|
macro_rules! run_test_no_init {
|
|
|
|
($test_fn:expr) => {{
|
|
|
|
use crate::audit::AuditScope;
|
2020-08-04 08:52:57 +02:00
|
|
|
use crate::be::{Backend, FsType};
|
2020-06-07 01:53:10 +02:00
|
|
|
use crate::schema::Schema;
|
|
|
|
use crate::server::QueryServer;
|
|
|
|
use crate::utils::duration_from_epoch_now;
|
|
|
|
|
|
|
|
use env_logger;
|
|
|
|
::std::env::set_var("RUST_LOG", "actix_web=debug,kanidm=debug");
|
|
|
|
let _ = env_logger::builder()
|
|
|
|
.format_timestamp(None)
|
|
|
|
.format_level(false)
|
|
|
|
.is_test(true)
|
|
|
|
.try_init();
|
|
|
|
|
2020-06-18 02:30:42 +02:00
|
|
|
let mut audit = AuditScope::new("run_test", uuid::Uuid::new_v4(), None);
|
2020-06-07 01:53:10 +02:00
|
|
|
|
2020-06-24 13:17:46 +02:00
|
|
|
let schema_outer = Schema::new(&mut audit).expect("Failed to init schema");
|
|
|
|
let idxmeta = {
|
2020-09-06 00:44:35 +02:00
|
|
|
let schema_txn = schema_outer.write_blocking();
|
2020-06-24 13:17:46 +02:00
|
|
|
schema_txn.reload_idxmeta()
|
|
|
|
};
|
2021-02-21 06:04:58 +01:00
|
|
|
let be = match Backend::new(&mut audit, "", 1, FsType::Generic, idxmeta, false) {
|
2020-06-07 01:53:10 +02:00
|
|
|
Ok(be) => be,
|
|
|
|
Err(e) => {
|
|
|
|
audit.write_log();
|
|
|
|
error!("{:?}", e);
|
|
|
|
panic!()
|
|
|
|
}
|
|
|
|
};
|
|
|
|
let test_server = QueryServer::new(be, schema_outer);
|
|
|
|
|
|
|
|
$test_fn(&test_server, &mut audit);
|
|
|
|
// Any needed teardown?
|
|
|
|
// Make sure there are no errors.
|
|
|
|
// let verifications = test_server.verify(&mut audit);
|
|
|
|
// ltrace!(audit, "Verification result: {:?}", verifications);
|
|
|
|
// assert!(verifications.len() == 0);
|
|
|
|
audit.write_log();
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2019-05-24 07:11:06 +02:00
|
|
|
#[cfg(test)]
|
|
|
|
macro_rules! run_test {
|
|
|
|
($test_fn:expr) => {{
|
|
|
|
use crate::audit::AuditScope;
|
2020-08-04 08:52:57 +02:00
|
|
|
use crate::be::{Backend, FsType};
|
2019-05-24 07:11:06 +02:00
|
|
|
use crate::schema::Schema;
|
|
|
|
use crate::server::QueryServer;
|
2020-03-22 02:31:02 +01:00
|
|
|
use crate::utils::duration_from_epoch_now;
|
2019-07-12 07:28:46 +02:00
|
|
|
|
|
|
|
use env_logger;
|
2019-09-14 15:44:08 +02:00
|
|
|
::std::env::set_var("RUST_LOG", "actix_web=debug,kanidm=debug");
|
2020-06-05 06:01:20 +02:00
|
|
|
let _ = env_logger::builder()
|
|
|
|
.format_timestamp(None)
|
|
|
|
.format_level(false)
|
|
|
|
.is_test(true)
|
|
|
|
.try_init();
|
2019-05-24 07:11:06 +02:00
|
|
|
|
2020-06-18 02:30:42 +02:00
|
|
|
let mut audit = AuditScope::new("run_test", uuid::Uuid::new_v4(), None);
|
2019-05-24 07:11:06 +02:00
|
|
|
|
2020-06-24 13:17:46 +02:00
|
|
|
let schema_outer = Schema::new(&mut audit).expect("Failed to init schema");
|
|
|
|
let idxmeta = {
|
2020-09-06 00:44:35 +02:00
|
|
|
let schema_txn = schema_outer.write_blocking();
|
2020-06-24 13:17:46 +02:00
|
|
|
schema_txn.reload_idxmeta()
|
|
|
|
};
|
2021-02-21 06:04:58 +01:00
|
|
|
let be = match Backend::new(&mut audit, "", 1, FsType::Generic, idxmeta, false) {
|
2019-07-29 09:09:09 +02:00
|
|
|
Ok(be) => be,
|
|
|
|
Err(e) => {
|
2020-06-05 06:01:20 +02:00
|
|
|
audit.write_log();
|
2019-07-29 09:09:09 +02:00
|
|
|
error!("{:?}", e);
|
|
|
|
panic!()
|
|
|
|
}
|
|
|
|
};
|
2019-07-12 07:28:46 +02:00
|
|
|
let test_server = QueryServer::new(be, schema_outer);
|
2019-05-24 07:11:06 +02:00
|
|
|
|
2019-07-15 08:56:55 +02:00
|
|
|
test_server
|
2020-03-22 02:31:02 +01:00
|
|
|
.initialise_helper(&mut audit, duration_from_epoch_now())
|
2019-07-15 08:56:55 +02:00
|
|
|
.expect("init failed!");
|
2019-05-24 07:11:06 +02:00
|
|
|
|
|
|
|
$test_fn(&test_server, &mut audit);
|
|
|
|
// Any needed teardown?
|
|
|
|
// Make sure there are no errors.
|
2019-08-27 01:36:54 +02:00
|
|
|
let verifications = test_server.verify(&mut audit);
|
2020-05-22 09:03:42 +02:00
|
|
|
ltrace!(audit, "Verification result: {:?}", verifications);
|
2019-08-27 01:36:54 +02:00
|
|
|
assert!(verifications.len() == 0);
|
2020-06-07 01:53:10 +02:00
|
|
|
audit.write_log();
|
2019-05-24 07:11:06 +02:00
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2020-06-14 01:34:23 +02:00
|
|
|
#[cfg(test)]
|
|
|
|
macro_rules! entry_str_to_account {
|
|
|
|
($entry_str:expr) => {{
|
|
|
|
use crate::entry::{Entry, EntryInvalid, EntryNew};
|
|
|
|
use crate::idm::account::Account;
|
|
|
|
use crate::value::Value;
|
|
|
|
|
|
|
|
let mut e: Entry<EntryInvalid, EntryNew> =
|
|
|
|
unsafe { Entry::unsafe_from_entry_str($entry_str).into_invalid_new() };
|
|
|
|
// Add spn, because normally this is generated but in tests we can't.
|
|
|
|
let spn = e
|
|
|
|
.get_ava_single_str("name")
|
|
|
|
.map(|s| Value::new_spn_str(s, "example.com"))
|
|
|
|
.expect("Failed to munge spn from name!");
|
2020-06-26 03:36:37 +02:00
|
|
|
e.set_ava("spn", btreeset![spn]);
|
2020-06-14 01:34:23 +02:00
|
|
|
|
|
|
|
let e = unsafe { e.into_sealed_committed() };
|
|
|
|
|
2020-08-04 04:58:11 +02:00
|
|
|
Account::try_from_entry_no_groups(&e).expect("Account conversion failure")
|
2020-06-14 01:34:23 +02:00
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
macro_rules! run_idm_test {
|
|
|
|
($test_fn:expr) => {{
|
|
|
|
use crate::audit::AuditScope;
|
2020-08-04 08:52:57 +02:00
|
|
|
use crate::be::{Backend, FsType};
|
2020-08-24 04:15:21 +02:00
|
|
|
use crate::idm::server::{IdmServer, IdmServerDelayed};
|
2020-06-14 01:34:23 +02:00
|
|
|
use crate::schema::Schema;
|
|
|
|
use crate::server::QueryServer;
|
|
|
|
use crate::utils::duration_from_epoch_now;
|
|
|
|
|
|
|
|
use env_logger;
|
|
|
|
::std::env::set_var("RUST_LOG", "actix_web=debug,kanidm=debug");
|
|
|
|
let _ = env_logger::builder()
|
|
|
|
.format_timestamp(None)
|
|
|
|
.format_level(false)
|
|
|
|
.is_test(true)
|
|
|
|
.try_init();
|
|
|
|
|
2020-06-18 02:30:42 +02:00
|
|
|
let mut audit = AuditScope::new("run_test", uuid::Uuid::new_v4(), None);
|
2020-06-14 01:34:23 +02:00
|
|
|
|
|
|
|
let schema_outer = Schema::new(&mut audit).expect("Failed to init schema");
|
2020-06-24 13:17:46 +02:00
|
|
|
let idxmeta = {
|
2020-09-06 00:44:35 +02:00
|
|
|
let schema_txn = schema_outer.write_blocking();
|
2020-06-24 13:17:46 +02:00
|
|
|
schema_txn.reload_idxmeta()
|
|
|
|
};
|
2020-08-04 08:52:57 +02:00
|
|
|
let be =
|
2021-02-21 06:04:58 +01:00
|
|
|
Backend::new(&mut audit, "", 1, FsType::Generic, idxmeta, false).expect("Failed to init be");
|
2020-06-14 01:34:23 +02:00
|
|
|
|
|
|
|
let test_server = QueryServer::new(be, schema_outer);
|
|
|
|
test_server
|
|
|
|
.initialise_helper(&mut audit, duration_from_epoch_now())
|
|
|
|
.expect("init failed");
|
|
|
|
|
2020-12-02 02:12:07 +01:00
|
|
|
let (test_idm_server, mut idms_delayed) = IdmServer::new(
|
|
|
|
&mut audit,
|
|
|
|
test_server.clone(),
|
|
|
|
"https://idm.example.com".to_string(),
|
|
|
|
)
|
|
|
|
.expect("Failed to setup idms");
|
2020-06-14 01:34:23 +02:00
|
|
|
|
2020-09-06 00:44:35 +02:00
|
|
|
$test_fn(
|
|
|
|
&test_server,
|
|
|
|
&test_idm_server,
|
|
|
|
&mut idms_delayed,
|
|
|
|
&mut audit,
|
|
|
|
);
|
2020-06-14 01:34:23 +02:00
|
|
|
// Any needed teardown?
|
|
|
|
// Make sure there are no errors.
|
|
|
|
assert!(test_server.verify(&mut audit).len() == 0);
|
2020-08-24 04:15:21 +02:00
|
|
|
idms_delayed.is_empty_or_panic();
|
2020-06-14 01:34:23 +02:00
|
|
|
audit.write_log();
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2019-06-07 11:19:09 +02:00
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! modlist {
|
|
|
|
(
|
|
|
|
$vs:expr
|
|
|
|
) => {{
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
use crate::modify::{m_pres, m_purge, m_remove};
|
|
|
|
use crate::modify::{Modify, ModifyList};
|
|
|
|
let s: Box<[Modify]> = Box::new($vs);
|
|
|
|
ModifyList::new_list(s.into_vec())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2019-05-24 07:11:06 +02:00
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! f_and {
|
|
|
|
(
|
|
|
|
$vs:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::FC;
|
|
|
|
let s: Box<[FC]> = Box::new($vs);
|
|
|
|
f_and(s.into_vec())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2020-06-26 03:36:37 +02:00
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! f_inc {
|
|
|
|
(
|
|
|
|
$vs:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::FC;
|
|
|
|
let s: Box<[FC]> = Box::new($vs);
|
|
|
|
f_inc(s.into_vec())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
2019-05-24 07:11:06 +02:00
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! f_or {
|
|
|
|
(
|
|
|
|
$vs:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::FC;
|
|
|
|
let s: Box<[FC]> = Box::new($vs);
|
|
|
|
f_or(s.into_vec())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! filter {
|
|
|
|
(
|
|
|
|
$fc:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::Filter;
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
use crate::filter::FC;
|
|
|
|
#[allow(unused_imports)]
|
2020-06-07 01:53:10 +02:00
|
|
|
use crate::filter::{
|
2020-06-26 03:36:37 +02:00
|
|
|
f_and, f_andnot, f_eq, f_id, f_inc, f_lt, f_or, f_pres, f_self, f_spn_name, f_sub,
|
2020-06-07 01:53:10 +02:00
|
|
|
};
|
2019-05-24 07:11:06 +02:00
|
|
|
Filter::new_ignore_hidden($fc)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! filter_rec {
|
|
|
|
(
|
|
|
|
$fc:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::Filter;
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
use crate::filter::FC;
|
|
|
|
#[allow(unused_imports)]
|
2020-06-26 03:36:37 +02:00
|
|
|
use crate::filter::{
|
|
|
|
f_and, f_andnot, f_eq, f_id, f_inc, f_lt, f_or, f_pres, f_self, f_sub,
|
|
|
|
};
|
2019-05-24 07:11:06 +02:00
|
|
|
Filter::new_recycled($fc)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! filter_all {
|
|
|
|
(
|
|
|
|
$fc:expr
|
|
|
|
) => {{
|
|
|
|
use crate::filter::Filter;
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
use crate::filter::FC;
|
|
|
|
#[allow(unused_imports)]
|
2020-06-26 03:36:37 +02:00
|
|
|
use crate::filter::{
|
|
|
|
f_and, f_andnot, f_eq, f_id, f_inc, f_lt, f_or, f_pres, f_self, f_sub,
|
|
|
|
};
|
2019-05-24 07:11:06 +02:00
|
|
|
Filter::new($fc)
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! filter_valid {
|
|
|
|
(
|
|
|
|
$fc:expr
|
|
|
|
) => {{
|
|
|
|
#[allow(unused_imports)]
|
2020-06-26 03:36:37 +02:00
|
|
|
use crate::filter::{f_and, f_andnot, f_eq, f_inc, f_lt, f_or, f_pres, f_sub};
|
2019-05-24 07:11:06 +02:00
|
|
|
use crate::filter::{Filter, FilterInvalid};
|
|
|
|
let f: Filter<FilterInvalid> = Filter::new($fc);
|
|
|
|
// Create a resolved filter, via the most unsafe means possible!
|
2020-01-09 11:07:14 +01:00
|
|
|
f.into_valid()
|
2019-05-24 07:11:06 +02:00
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! filter_resolved {
|
|
|
|
(
|
|
|
|
$fc:expr
|
|
|
|
) => {{
|
|
|
|
#[allow(unused_imports)]
|
2020-06-26 03:36:37 +02:00
|
|
|
use crate::filter::{f_and, f_andnot, f_eq, f_inc, f_lt, f_or, f_pres, f_sub};
|
2019-05-24 07:11:06 +02:00
|
|
|
use crate::filter::{Filter, FilterInvalid};
|
|
|
|
let f: Filter<FilterInvalid> = Filter::new($fc);
|
|
|
|
// Create a resolved filter, via the most unsafe means possible!
|
2020-01-09 11:07:14 +01:00
|
|
|
f.into_valid_resolved()
|
2019-05-24 07:11:06 +02:00
|
|
|
}};
|
|
|
|
}
|
2019-08-27 01:36:54 +02:00
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! pvalue_utf8 {
|
|
|
|
(
|
|
|
|
$v:expr
|
|
|
|
) => {{
|
|
|
|
use crate::value::PartialValue;
|
|
|
|
PartialValue::new_utf8(v.to_string())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! pvalue_iutf8 {
|
|
|
|
(
|
|
|
|
$v:expr
|
|
|
|
) => {{
|
|
|
|
use crate::value::PartialValue;
|
|
|
|
PartialValue::new_iutf8(v.to_string())
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(unused_macros)]
|
|
|
|
#[macro_export]
|
|
|
|
macro_rules! btreeset {
|
|
|
|
() => (
|
|
|
|
compile_error!("BTreeSet needs at least 1 element")
|
|
|
|
);
|
|
|
|
($e:expr) => ({
|
|
|
|
use std::collections::BTreeSet;
|
|
|
|
let mut x: BTreeSet<_> = BTreeSet::new();
|
|
|
|
assert!(x.insert($e));
|
|
|
|
x
|
|
|
|
});
|
|
|
|
($e:expr,) => ({
|
|
|
|
use std::collections::BTreeSet;
|
|
|
|
let mut x: BTreeSet<_> = BTreeSet::new();
|
|
|
|
assert!(x.insert($e));
|
|
|
|
x
|
|
|
|
});
|
|
|
|
($e:expr, $($item:expr),*) => ({
|
|
|
|
use std::collections::BTreeSet;
|
|
|
|
let mut x: BTreeSet<_> = BTreeSet::new();
|
|
|
|
assert!(x.insert($e));
|
|
|
|
$(assert!(x.insert($item));)*
|
|
|
|
x
|
|
|
|
});
|
|
|
|
}
|