From b25258330c8ccb148f83d0751abaf364d2f06eb4 Mon Sep 17 00:00:00 2001 From: John Coffey Date: Mon, 5 Oct 2026 22:16:23 -0700 Subject: [PATCH] Give the spam classifier test its own upload limits The quota test, which runs earlier in the same system suite, leaves uploads expiring after one second, at most three at a time, and the spam classifier test inherited that. It imports twenty samples, each an upload followed by an import; when the step between them takes longer than a second, the import fails with BlobNotFound. After the v0.16.25 merge this failed in two runs out of three, where main passed three out of three. Putting back the old midnight rounding of a training sample's deadline (upstream now uses now() + hold, which is now() in this suite since the purge test holds samples for zero seconds) made it pass, so that change is what tips the timing; exactly how it slows the import loop wasn't traced. The test now resets the upload TTL, count and quota to their defaults before it starts. Production isn't affected: uploads are kept for an hour by default and samples for ninety days. --- tests/src/system/antispam.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/src/system/antispam.rs b/tests/src/system/antispam.rs index d0378af..5db9eea 100644 --- a/tests/src/system/antispam.rs +++ b/tests/src/system/antispam.rs @@ -2,6 +2,8 @@ * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL + * + * Modified by Coffey Labs in 2026 for INBUXA. */ use crate::utils::{jmap::JmapUtils, server::TestServer}; @@ -11,8 +13,8 @@ use registry::{ enums::{Permission, TaskSpamFilterMaintenanceType, TaskStoreMaintenanceType}, prelude::{ObjectType, Property}, structs::{ - Permissions, PermissionsList, SpamTrainingSample, Task, TaskSpamFilterMaintenance, - TaskStatus, TaskStoreMaintenance, + Jmap, Permissions, PermissionsList, SpamTrainingSample, Task, + TaskSpamFilterMaintenance, TaskStatus, TaskStoreMaintenance, }, }, types::map::Map, @@ -26,6 +28,21 @@ pub async fn test(test: &mut TestServer) { // Create test accounts let admin = test.account("admin@example.org"); + + // inbuxa: the quota test leaves uploads expiring after one second, at + // most three at a time. This test imports twenty samples, and a debug + // build can take longer than that between upload and import. + admin + .registry_update_setting( + Jmap::default(), + &[ + Property::UploadQuota, + Property::MaxUploadCount, + Property::UploadTtl, + ], + ) + .await; + admin.reload_settings().await; let account = test .create_user_account( "admin@example.org",