Fixed registry JMAP helpers

This commit is contained in:
Maurus Decimus
2026-04-13 19:51:45 +02:00
parent 7564f51642
commit f3dfb7cb33
32 changed files with 487 additions and 282 deletions

View File

@@ -239,8 +239,8 @@ async fn manage_queue() {
let (sender, recipients) = envelopes.get(env_id.as_str()).unwrap();
assert_eq!(&message.return_path, sender);
'outer: for recipient in recipients {
for rcpt in message.recipients.iter() {
if &rcpt.address == recipient {
for (address, _) in message.recipients.iter() {
if address == recipient {
continue 'outer;
}
}
@@ -253,7 +253,7 @@ async fn manage_queue() {
let next_retry = created + hold_for;
let next_notify = created + 2000 + hold_for;
let expires = created + 3000 + hold_for;
for rcpt in message.recipients.iter() {
for (rcpt_address, rcpt) in message.recipients.iter() {
if env_id == "c" {
let mut dt = rcpt.retry_due;
dt.add_seconds(-1);
@@ -274,7 +274,7 @@ async fn manage_queue() {
&message,
);
assert_eq!(&rcpt.status, &RecipientStatus::Scheduled, "{message:#?}");
} else if rcpt.address == "success@foobar.org" {
} else if rcpt_address == "success@foobar.org" {
assert_eq!(rcpt.retry_count, 0);
assert!(
matches!(&rcpt.status, RecipientStatus::Completed(_)),
@@ -390,16 +390,15 @@ async fn manage_queue() {
.retry_count,
2
);
for rcpt in admin
for (rcpt_address, rcpt) in admin
.registry_get::<QueuedMessage>(id_map["a"])
.await
.recipients
.values()
{
let next_retry = rcpt.retry_due.to_string();
let matched =
["2200-01-01T00:00:00Z", "2199-12-31T23:59:59Z"].contains(&next_retry.as_str());
if rcpt.address.ends_with("example1.org") {
if rcpt_address.ends_with("example1.org") {
assert!(matched, "{next_retry}");
} else {
assert!(!matched, "{next_retry}");
@@ -456,18 +455,18 @@ async fn manage_queue() {
let message = admin.registry_get::<QueuedMessage>(id_map[id]).await;
assert!(!message.recipients.is_empty());
for rcpt in message.recipients {
for (rcpt_address, rcpt) in message.recipients {
match id {
"a" => {
if rcpt.address.ends_with("example2.org") {
if rcpt_address.ends_with("example2.org") {
assert!(matches!(&rcpt.status, RecipientStatus::PermanentFailure(_)));
} else {
assert!(matches!(&rcpt.status, RecipientStatus::Scheduled));
}
}
"c" => {
if rcpt.address.ends_with("example2.com") {
if rcpt.address == "rcpt6@example2.com" {
if rcpt_address.ends_with("example2.com") {
if rcpt_address == "rcpt6@example2.com" {
assert!(matches!(&rcpt.status, RecipientStatus::PermanentFailure(_)));
} else {
assert!(matches!(&rcpt.status, RecipientStatus::Scheduled));

View File

@@ -18,7 +18,7 @@ use crate::{
use ahash::AHashMap;
use common::{
BuildServer, Caches, Core, Data, DavResources, Inner, Server,
auth::FALLBACK_ADMIN_ID,
auth::RECOVERY_ADMIN_ID,
config::{
server::{Listeners, ServerProtocol},
storage::Storage,
@@ -29,6 +29,7 @@ use common::{
boot::{IpcReceivers, build_ipc},
defaults::BootstrapDefaults,
},
psl,
};
use email::message::metadata::MessageMetadata;
use groupware::cache::GroupwareCache;
@@ -42,8 +43,8 @@ use registry::{
enums::{DataStoreType, EventPolicy, NetworkListenerProtocol, TracingLevel},
prelude::{Object, ObjectType, SocketAddr},
structs::{
Authentication, Certificate, NetworkListener, PublicText, SecretKeyFile, SecretText,
Tracer, TracerStdout,
Authentication, Certificate, Domain, NetworkListener, PublicText, SecretKeyFile,
SecretText, SystemSettings, Tracer, TracerStdout,
},
},
types::{EnumImpl, datetime::UTCDateTime, map::Map},
@@ -91,7 +92,6 @@ pub struct TestServerBuilder {
impl TestServerBuilder {
pub async fn new(test_name: &str) -> Self {
//let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
let reset = std::env::var("NO_INSERT").is_err();
Self::new_with_role(test_name, "mail.example.org".to_string(), None, reset).await
@@ -265,6 +265,21 @@ impl TestServerBuilder {
.map(|log| TracingLevel::parse(&log).expect("Invalid log level"))
.ok();
// Add default domain
let default_domain = psl::domain_str(self.bootstrap.registry.local_hostname()).unwrap();
let default_domain_id = self
.insert_object(Domain {
name: default_domain.to_string(),
..Default::default()
})
.await;
self.insert_object(SystemSettings {
default_hostname: self.bootstrap.registry.local_hostname().to_string(),
default_domain_id,
..Default::default()
})
.await;
self.insert_object(Tracer::Stdout(TracerStdout {
enable: level.is_some() || self.logging_enabled,
level: level.unwrap_or(TracingLevel::Info),
@@ -432,7 +447,7 @@ impl TestServerBuilder {
"popolna_zapora",
&[],
"Recovery Admin",
Id::from(FALLBACK_ADMIN_ID),
Id::from(RECOVERY_ADMIN_ID),
);
admin.http_listener_port = self.http_listener_port;