Document IMAP expunge release coverage

This commit is contained in:
Mario Fetka
2026-07-29 14:41:11 +02:00
parent 3de6f0da6b
commit d0a838365b
4 changed files with 55 additions and 18 deletions
+2 -1
View File
@@ -65,7 +65,8 @@ one-off files in `/tmp`:
syntax, empty-mailbox behavior, synchronization, and cleanup.
- `upstream-imaptest-check.py` runs the generic Dovecot ImapTest project
against live Bongo IMAPS. Scripted mode stages a selected core, search,
`imap-01-11`, or complete upstream test set in a temporary directory;
`imap-01-11`, `imap-01-12`, or complete upstream test set in a temporary
directory;
`--isolate-groups` gives every selected group a separate process and
disposable mailbox before the same groups are run together to expose
cross-group state defects. Stress mode uses deterministic random input,
+1 -1
View File
@@ -179,7 +179,7 @@ review does not mark an open live test as passed.
| IMAP-09 | FETCH/UID FETCH body, headers, partials, flags, envelope, binary | [PASS](test-evidence/0.7-r1.md#imap-09) | | |
| IMAP-10 | STORE/UID STORE add/remove/replace flags and silent variants | [PASS](test-evidence/0.7-r1.md#imap-10) | | |
| IMAP-11 | COPY/UID COPY/MOVE/UID MOVE and UIDPLUS response codes | [PASS](test-evidence/0.7-r1.md#imap-11) | | |
| IMAP-12 | EXPUNGE/UID EXPUNGE preserve sequence and UID semantics | | | |
| IMAP-12 | EXPUNGE/UID EXPUNGE preserve sequence and UID semantics | [PASS](test-evidence/0.7-r1.md#imap-12) | | |
| IMAP-13 | SEARCH/UID SEARCH sets, flags, dates, sizes, HEADER/SUBJECT/FROM/TO | | | |
| IMAP-14 | SEARCH BODY/TEXT/NOT/OR/CHARSET, ESEARCH RETURN, saved `$` set | | | |
| IMAP-15 | IDLE notifications and DONE with concurrent delivery/disconnect | | | |
+48 -12
View File
@@ -3678,36 +3678,72 @@ the invariant. The complete native suite subsequently passed all 103 tests.
IMAP-11 PASS host=127.0.0.1:993 copy=sequence/uid move=sequence/uid/same-mailbox uidplus=copyuid/order/uidnext metadata=flags/keywords/internaldate sets=duplicate/nonexistent examine=copy/read-only-move syntax=trailing-rejected missing=trycreate cleanup=yes
```
## IMAP-01 through IMAP-11 Dovecot ImapTest corroboration
## IMAP-12
Result: **PASS**
Commit `44ccc52adfd527429e79b7fc5f1e48cfaf708bd2` was installed as the
Gentoo debug build and tested on 2026-07-29 with Dovecot ImapTest. The
release subset consists of 26 upstream scripted groups: `atoms`, `append`,
Commits `f714694b` and `3de6f0da` were installed as the Gentoo GCC 15.3.0
debug build and tested on 2026-07-29 with
`contrib/testing/imap-expunge-check.py`. The live test used two simultaneously
selected sessions and verified ordinary EXPUNGE, selective UID EXPUNGE,
duplicate and non-existent UIDs, an empty mailbox, read-only rejection, exact
32-bit non-zero UID-set syntax, unsolicited synchronization, and descending
sequence-number responses when several messages were removed.
The command and parser paths were compared directly with Dovecot 2.4.4
`src/imap/cmd-expunge.c`, `src/imap/imap-expunge.c`, and
`src/imap/imap-sync.c`, plus Cyrus IMAP 3.12.3 `imap/imapd.c` and
`imap/index.c`. Bongo now rejects trailing EXPUNGE arguments, requires exactly
one UID EXPUNGE set, validates the complete set before inspecting mailbox
contents, and rejects zero, leading-zero, junk-suffixed, and overflowing UID
endpoints.
The first live run exposed a wider allocator defect: the historical
`MemCalloc` compatibility macro called `g_malloc` and therefore did not
zero-initialize selection masks. It now delegates to an overflow-checked
`g_malloc0` wrapper. A native allocator regression test verifies both zeroing
and multiplication-overflow rejection. The complete native suite passed all
105 tests after this repair.
```text
IMAP-12 PASS host=127.0.0.1:993 expunge=all/deleted-only/descending uid-expunge=selective/duplicates/nonexistent/empty sessions=two/synchronized read-only=rejected syntax=arguments/uid-set/uint32 cleanup=yes
```
Dovecot ImapTest's independent `expunge` group also passed all 22 commands
against the installed server. The disposable live-test and upstream-test
mailboxes were removed after their runs.
## IMAP-01 through IMAP-12 Dovecot ImapTest corroboration
Result: **PASS**
Commits through `3de6f0da` were installed as the Gentoo debug build and tested
on 2026-07-29 with Dovecot ImapTest. The release subset consists of 27
upstream scripted groups: `atoms`, `append`,
`close`, `copy`, `fetch`, `fetch-body`, the three nested
`message/rfc822` body groups, `fetch-body-mime`, `fetch-bodystructure`,
`fetch-envelope`, `id`, `list`, `listext`, `logout`, `move`, `mutf7`, `nil`,
`pipeline`, `select`, `store`, `subscribe`, `uidplus`, `uidvalidity`, and
`uidvalidity-rename`.
`uidvalidity-rename`, plus `expunge`.
The first pass ran every group in a separate ImapTest process with a separate
disposable mailbox. All 26 groups passed with no missing-capability skips.
disposable mailbox. All 27 groups passed with no missing-capability skips.
The second pass ran the same corpus together against one disposable mailbox;
all 26 groups, 251 base-protocol commands, and 60 extension commands passed.
all 27 groups, 273 base-protocol commands, and 60 extension commands passed.
This combination distinguishes primary command failures from cascades while
also detecting state leakage and command-order interactions.
```text
PASS: Dovecot ImapTest imap-01-11 suite (26 scripted test groups, isolated)
26 test groups: 0 failed, 0 skipped due to missing capabilities
base protocol: 0/251 individual commands failed
PASS: Dovecot ImapTest imap-01-12 suite (27 scripted test groups, isolated)
27 test groups: 0 failed, 0 skipped due to missing capabilities
base protocol: 0/273 individual commands failed
extensions: 0/60 individual commands failed
PASS: Dovecot ImapTest imap-01-11 suite (26 scripted test groups, combined)
PASS: Dovecot ImapTest imap-01-12 suite (27 scripted test groups, combined)
```
The run found and verified the CLOSE watcher ordering, nested RFC822 MIME
offsets, recursive LIST/LSUB attributes, and same-mailbox MOVE UIDNEXT fixes.
offsets, recursive LIST/LSUB attributes, same-mailbox MOVE UIDNEXT, and strict
EXPUNGE/UID EXPUNGE fixes.
Credentials were supplied through a mode-0600 temporary user file. Every
temporary mailbox and staged corpus was removed on completion.
+4 -4
View File
@@ -40,8 +40,8 @@ export BONGO_TEST_PASSWORD='a-disposable-password-of-at-least-12-characters'
./contrib/testing/upstream-imaptest-check.py scripted --suite core
./contrib/testing/upstream-imaptest-check.py scripted --suite search
./contrib/testing/upstream-imaptest-check.py scripted \
--suite imap-01-11 --isolate-groups
./contrib/testing/upstream-imaptest-check.py scripted --suite imap-01-11
--suite imap-01-12 --isolate-groups
./contrib/testing/upstream-imaptest-check.py scripted --suite imap-01-12
./contrib/testing/upstream-imaptest-check.py stress --imap4rev2 \
--clients 4 --seconds 30 --seed 700
./contrib/testing/upstream-imaptest-check.py pop --seconds 30
@@ -51,8 +51,8 @@ The complete upstream suite can be selected with `--suite all`. Missing
optional capabilities are reported as skips by ImapTest; a failure in the
base protocol or an advertised extension fails the Bongo test.
For diagnosis, `--test-group append` selects one named upstream file and may
be repeated. The `imap-01-11` release subset contains the 26 upstream groups
which corroborate the first eleven Bongo IMAP matrix rows. Run it first with
be repeated. The `imap-01-12` release subset contains the 27 upstream groups
which corroborate the first twelve Bongo IMAP matrix rows. Run it first with
`--isolate-groups` so one damaged session cannot turn a primary defect into a
cascade of misleading failures, then without that option to detect shared
mailbox-state and ordering regressions. The adapter does not enable