3.7 KiB
ADDED Requirements
Requirement: Subject'ы и учётные данные NATS из настроек окружения
Сервис SHALL брать subject'ы обмена из OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT, NATS_IMAGE_REQUEST_SUBJECT,
NATS_RESULT_SUBJECT (умолчания files.tabular_uploaded, files.img_uploaded, files.tabular_parsed): подписан на image_request (queue group scan-gateway), публикует ack и результат в result.
При старте SHALL проверяться все три имени (непустое, без пробельных символов, без * и >, без пустых токенов,
попарно различны); при нарушении приложение MUST NOT стартовать. Значения NATS_JWT и NATS_SEED MUST NOT попадать в
логи, repr настроек и тексты ошибок валидации. Используемые subject'ы SHALL писаться в лог при старте и отдаваться в
/healthcheck объектом subjects с ключами image_request, result при любом значении nats (ok | down | off).
Scenario: Умолчания
- WHEN приложение стартует без ключей
OPENBAO__NATS__NATS_*_SUBJECT - THEN
/healthcheck.subjectsсодержит именаfiles.*по умолчанию, обмен идёт по ним
Scenario: Subject'ы окружения
- WHEN заданы
OPENBAO__NATS__NATS_TABULAR_REQUEST_SUBJECT=test.files.tabular_uploaded,OPENBAO__NATS__NATS_IMAGE_REQUEST_SUBJECT=test.files.img_uploaded,OPENBAO__NATS__NATS_RESULT_SUBJECT=test.files.tabular_parsed - THEN подписки и публикации идут только по этим subject'ам,
/healthcheck.subjectsих показывает
Scenario: Недопустимый subject
- WHEN
OPENBAO__NATS__NATS_RESULT_SUBJECTсовпадает с subject'ом запроса или содержит> - THEN приложение не стартует, ошибка называет ключ
Scenario: JWT не раскрывается
- WHEN заданы
NATS_JWTиNATS_SEED, а валидация настроек падает на другом поле - THEN текст ошибки и лог не содержат значений JWT и seed;
reprнастроек показывает их скрытыми
Scenario: Тесты на своих subject'ах
- WHEN тесты интеграционные (
tests/integration/) запускаются при работающих контейнерах стенда на том же NATS - THEN тесты используют уникальные subject'ы из настроек и не получают и не забирают сообщения стенда
MODIFIED Requirements
Requirement: Соединение с NATS без JetStream
При пустых NATS_SEED/NATS_JWT сервис SHALL подключаться без учётных данных, иначе — с nkeys/JWT из OPENBAO__NATS__NATS_SEED/NATS_JWT (значения — секреты); MUST NOT требовать
stream'ов и consumer'ов JetStream; при разрыве SHALL переподключаться и восстанавливать подписку; /healthcheck.nats
SHALL отражать состояние.
Scenario: NATS перезапущен
- WHEN контейнер NATS перезапущен во время работы сервиса
- THEN в течение 20 с после старта NATS подписка восстановлена,
nats = ok