Improved error handling - all tests passing

This commit is contained in:
mdecimus
2024-07-19 16:11:00 +02:00
parent d48523583b
commit f6ac35fd70
12 changed files with 105 additions and 61 deletions

View File

@@ -7,8 +7,9 @@
use ahash::AHashSet;
use directory::{
backend::internal::{
lookup::DirectoryStore, manage::ManageDirectory, PrincipalField, PrincipalUpdate,
PrincipalValue,
lookup::DirectoryStore,
manage::{self, ManageDirectory},
PrincipalField, PrincipalUpdate, PrincipalValue,
},
Principal, QueryBy, Type,
};
@@ -33,9 +34,7 @@ async fn internal_directory() {
// A principal without name should fail
assert_eq!(
store.create_account(Principal::default(), vec![]).await,
Err(DirectoryError::Management(ManagementError::MissingField(
PrincipalField::Name
)))
Err(manage::err_missing(PrincipalField::Name))
);
// Basic account creation
@@ -63,10 +62,7 @@ async fn internal_directory() {
vec![]
)
.await,
Err(DirectoryError::Management(ManagementError::AlreadyExists {
field: PrincipalField::Name,
value: "john".to_string()
}))
Err(manage::err_exists(PrincipalField::Name, "john".to_string()))
);
// An account using a non-existent domain should fail
@@ -81,9 +77,7 @@ async fn internal_directory() {
vec![]
)
.await,
Err(DirectoryError::Management(ManagementError::NotFound(
"example.org".to_string()
)))
Err(manage::not_found("example.org".to_string()))
);
// Create a domain name
@@ -121,9 +115,7 @@ async fn internal_directory() {
)],
)
.await,
Err(DirectoryError::Management(ManagementError::NotFound(
"otherdomain.org".to_string()
)))
Err(manage::not_found("otherdomain.org".to_string()))
);
// Create an account with an email address
@@ -197,10 +189,10 @@ async fn internal_directory() {
vec![]
)
.await,
Err(DirectoryError::Management(ManagementError::AlreadyExists {
field: PrincipalField::Emails,
value: "jane@example.org".to_string()
}))
Err(manage::err_exists(
PrincipalField::Emails,
"jane@example.org".to_string()
))
);
// Create a mailing list
@@ -348,9 +340,7 @@ async fn internal_directory() {
)],
)
.await,
Err(DirectoryError::Management(ManagementError::NotFound(
"accounting".to_string()
)))
Err(manage::not_found("accounting".to_string()))
);
// Remove a member from a group
@@ -502,10 +492,7 @@ async fn internal_directory() {
),],
)
.await,
Err(DirectoryError::Management(ManagementError::AlreadyExists {
field: PrincipalField::Name,
value: "jane".to_string()
}))
Err(manage::err_exists(PrincipalField::Name, "jane".to_string()))
);
assert_eq!(
store
@@ -517,10 +504,10 @@ async fn internal_directory() {
),],
)
.await,
Err(DirectoryError::Management(ManagementError::AlreadyExists {
field: PrincipalField::Emails,
value: "jane@example.org".to_string()
}))
Err(manage::err_exists(
PrincipalField::Emails,
"jane@example.org".to_string()
))
);
// List accounts

View File

@@ -5,7 +5,7 @@
*/
pub mod imap;
//pub mod internal;
pub mod internal;
pub mod ldap;
pub mod smtp;
pub mod sql;
@@ -392,8 +392,6 @@ pub fn dummy_tls_acceptor() -> Arc<TlsAcceptor> {
let cert_file = &mut BufReader::new(CERT.as_bytes());
let key_file = &mut BufReader::new(PK.as_bytes());
let todo = "fix interkal";
// convert files to key/cert objects
let cert_chain = certs(cert_file).map(|r| r.unwrap()).collect();
let mut keys: Vec<PrivateKeyDer> = pkcs8_private_keys(key_file)