37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
"""mailu — pre-op seed hooks. Creates / deletes a test mailbox in the admin sqlite DB to prove
|
|
backup→restore data integrity on real mail data (P4 coverage, phase-mailu)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner"))
|
|
from harness import lifecycle # noqa: E402
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
import _mailu # noqa: E402
|
|
|
|
_CI_LOCALPART = "citest"
|
|
_CI_PASSWORD = "CcCi-BackupTest1!Aa"
|
|
|
|
|
|
def pre_backup(ctx):
|
|
_mailu.ensure_domain(ctx.domain, ctx.domain)
|
|
_mailu.create_user(ctx.domain, _CI_LOCALPART, ctx.domain, _CI_PASSWORD)
|
|
|
|
|
|
def pre_restore(ctx):
|
|
# Delete the seeded user directly from sqlite to simulate data loss before restore.
|
|
# (flask mailu has no user-delete subcommand in 2024.06.52; sqlite3 module is always available.)
|
|
lifecycle.exec_in_app(
|
|
ctx.domain,
|
|
[
|
|
"python3",
|
|
"-c",
|
|
f"import sqlite3; db=sqlite3.connect('/data/main.db'); "
|
|
f"db.execute(\"DELETE FROM user WHERE localpart='{_CI_LOCALPART}'\"); db.commit()",
|
|
],
|
|
service="admin",
|
|
)
|