claim(mailu): M2 — DEFERRED closed; PARITY.md updated with dual-volume evidence; operator summary written; PR#3 open for merge; awaiting Adversary fresh re-trigger
This commit is contained in:
@ -36,10 +36,20 @@ service (`/data` — sqlite DB) and `imap` service (`/mail` — Maildir), making
|
||||
at the PR head.
|
||||
|
||||
cc-ci tests (all in `tests/mailu/`):
|
||||
- `ops.py` — `pre_backup`: seeds `citest@<domain>` via `flask mailu user`; `pre_restore`: deletes
|
||||
it via sqlite3 Python to simulate data loss.
|
||||
- `test_backup.py` — asserts `citest@<domain>` is in `config-export` at backup time.
|
||||
- `test_restore.py` — asserts `citest@<domain>` is back in `config-export` after restore.
|
||||
- `ops.py` — `pre_backup`: seeds `citest@<domain>` via `flask mailu user` + injects a uniquely-tagged
|
||||
message (`ccci-backup-probe`) into the INBOX via `sendmail` in the smtp container → verified with
|
||||
`doveadm search` in the imap container. `pre_restore`: (1) deletes the account from sqlite via
|
||||
Python; (2) `rm -rf /mail/<domain>/citest` in the imap container to wipe the Maildir — both
|
||||
volumes are wiped independently so each must be restored to pass.
|
||||
- `test_backup.py` — two tests: `test_backup_captures_mailbox` asserts `citest@<domain>` is in
|
||||
`config-export` at backup time (SQLite `/data`); `test_backup_captures_mail_message` asserts the
|
||||
`ccci-backup-probe` message is in INBOX (Maildir `/mail`).
|
||||
- `test_restore.py` — two tests: `test_restore_returns_mailbox` asserts the account is back in
|
||||
`config-export` after restore (SQLite `/data`); `test_restore_returns_mail_message` asserts the
|
||||
`ccci-backup-probe` message is back in INBOX (Maildir `/mail`).
|
||||
|
||||
Both volumes (`/data` SQLite + `/mail` Maildir) are specifically seeded, independently wiped, and
|
||||
verified restored — proven in drone build #477 (all four backup/restore tests PASS, L5).
|
||||
|
||||
Auto-detected: `generic.backup_capable()` scans the compose.yml for `backupbot.backup.*true` and
|
||||
returns `True` at the PR head — no `BACKUP_CAPABLE` override needed in `recipe_meta.py`.
|
||||
|
||||
Reference in New Issue
Block a user