5.8 KiB
Проверка 0.4.0
Проверено 2026-10-20 в Linux x86_64, Rust 1.99.1. После всех изменений
артефакты самого проекта удалены через cargo clean -p rust-xmpp;
сборка и проверки выполнены заново. Старый отчёт сохранён отдельно в
VALIDATION-0.3.0.md. Машинные результаты находятся в validation-results.json.
| Проверка | Результат |
|---|---|
cargo test --locked |
148 passed, 0 failed, 8 ignored |
cargo clippy --locked --all-targets -- -D warnings |
Успешно, без предупреждений |
cargo fmt --check |
Успешно |
cargo build --release --locked |
Успешно |
| Native storage/auth oracle | Оригинальная Prosody читает и изменяет Rust данные и пароли SHA-1/SHA-256; Rust читает результат |
| Native PEP, MUC/MAM, CSI | Оригинальные модули работают с тестовыми данными Rust; правила CSI сверяются с оригиналом |
| Native push body lookup | Оригинальный util.stanza подтверждает исключение foreign namespace и вложенного extension body |
| Native federation | Настоящая Prosody cafd74b9c5ea обменивается сообщениями с Rust по двум TCP STARTTLS + SASL EXTERNAL соединениям; trust и identity включены |
| Большой архив | Потоковое чтение архива больше 128 MiB, отдельный ignored test |
| TCP integration | Контакты/подписки, IQ routing, CSI, MAM, блокировки, OMEMO PEP, MUC, offline, SM resume и SIGTERM |
| Offline/routing regression | Отсутствующий ресурс использует bare-JID fallback; no-permanent-store доставляется offline и исключается из MAM; bodyless receipt доставляется; offline headline не создаёт ошибку |
| SASL network SHA-1/SHA-256 | Независимый SCRAM, SASL1/SASL2, SSDP, подпись сервера, неверный пароль |
| SASL2 Bind2 | Канонический модуль, inline SM/CSI/Carbons/MAM, tag/resource privacy, malformed/auth failures, same UUIDv4 replacement и изоляция аккаунтов |
| WSS/HTTPS BOSH/upload | Авторизация, bind, CSI, namespaces, контакты, сообщения, upload PUT/GET/reuse |
| BOSH disconnected retry | Настоящий TCP reset до ответа; RID повторяется во время обработки и после неё, stanza выполняется однократно |
| Data directory lock | Межпроцессный отказ, тот же inode через symlink, освобождение guard и сохранность существующих файлов |
| Shell/Python syntax | Проверено для новых/изменённых сценариев |
Из восьми ignored tests отдельно успешно выполнены семь: пять native
storage/module checks, federation с настоящей Prosody и большой архив.
Оставшийся AF_UNIX admin socket test попытались выполнить: среда запретила
bind с Operation not permitted. Это не проверка готовности Unix socket
на целевом Docker/хосте. In-memory admin protocol tests проходят обычно.
Нагрузочные сценарии
Оба сценария используют отдельное тестовое хранилище, 100 настоящих тестовых аккаунтов и 500 TLS-соединений с разными ресурсами. Авторизация — TLS + PLAIN. Проверяются адреса отправителей, IDs и содержимое направленных сообщений.
- Без MAM: 100 раундов ping и сообщений — 50 000 ping и 50 000 доставок.
- С MAM: 10 раундов — 5000 ping, 5000 доставок и ровно 10 000 записей в архивах отправителей/получателей, распределённых между 100 файлами.
Сырые задержки, CPU/RSS и количество дескрипторов записаны в JSON. Это короткие loopback-прогоны на машине разработки; они не подтверждают длительную работу полного набора модулей или отсутствие утечек памяти. MUC/PEP/push не нагружаются этим сценарием на всех 500 соединениях.
Воспроизведение
bash scripts/verify-local.sh
python3 scripts/load_smoke.py --clients 500 --accounts 100 --rounds 100 --message-rounds 100
python3 scripts/load_smoke.py --clients 500 --accounts 100 --rounds 10 --message-rounds 10 --archive
Для native проверок нужны присланные исходники Prosody и Lua dependencies: инструкции в scripts/prosody_compat/README.md. Docker в среде разработки отсутствует: образ, UID/GID и Compose на целевом хосте не запускались. Не проверены реальные Monal/Conversations/Gajim, APNs/FCM push-шлюз, рабочие сертификаты/данные, загрузка 10 GiB, длительная нагрузка и откат конкретной установки. Функциональные ограничения остаются в COMPATIBILITY.md. Это экспериментальный сервер, а не подтверждённая полная замена Prosody.