Files
rust-xmpp/docs/VALIDATION-0.4.0.md
T
2026-10-20 15:59:55 +07:00

5.8 KiB
Raw Blame History

Проверка 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.