Merge pull request 'openspec: архив nats-env-config (#31)' (#38) from chore/31-archive-nats-env-config into main
Reviewed-on: #38
This commit is contained in:
commit
d0d3c79824
@ -123,7 +123,7 @@ NATS и S3; воркер MUST NOT зависеть от конкретной р
|
|||||||
- **THEN** идентичность подтверждена, примеры валидны; при недоступном docs тест идентичности пропущен с предупреждением
|
- **THEN** идентичность подтверждена, примеры валидны; при недоступном docs тест идентичности пропущен с предупреждением
|
||||||
|
|
||||||
### Requirement: Соединение с NATS по правилам шаблона, без JetStream
|
### Requirement: Соединение с NATS по правилам шаблона, без JetStream
|
||||||
При пустых `NATS_SEED`/`NATS_JWT` сервис SHALL подключаться без учётных данных, иначе — с nkeys/JWT. Сервис MUST NOT
|
При пустых `NATS_SEED`/`NATS_JWT` сервис SHALL подключаться без учётных данных, иначе — с nkeys/JWT из `OPENBAO__NATS__NATS_SEED`/`NATS_JWT` (значения — секреты). Сервис MUST NOT
|
||||||
требовать stream'ов или consumer'ов JetStream; при разрыве соединения SHALL переподключаться автоматически и восстанавливать
|
требовать stream'ов или consumer'ов JetStream; при разрыве соединения SHALL переподключаться автоматически и восстанавливать
|
||||||
подписку; `/healthcheck` SHALL отражать состояние (`nats = ok | down`; `off` — NATS выключен флагом
|
подписку; `/healthcheck` SHALL отражать состояние (`nats = ok | down`; `off` — NATS выключен флагом
|
||||||
`NATS_ENABLED=false`).
|
`NATS_ENABLED=false`).
|
||||||
@ -131,3 +131,33 @@ NATS и S3; воркер MUST NOT зависеть от конкретной р
|
|||||||
#### Scenario: NATS перезапущен
|
#### Scenario: NATS перезапущен
|
||||||
- **WHEN** контейнер NATS перезапущен во время работы сервиса
|
- **WHEN** контейнер NATS перезапущен во время работы сервиса
|
||||||
- **THEN** в течение 20 с после старта NATS подписка восстановлена, `nats = ok`, новый запрос обрабатывается
|
- **THEN** в течение 20 с после старта NATS подписка восстановлена, `nats = ok`, новый запрос обрабатывается
|
||||||
|
|
||||||
|
### 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`): подписан на `tabular_request` (queue group `tabular-parser`), публикует ack и результат в `result`.
|
||||||
|
При старте SHALL проверяться все три имени (непустое, без пробельных символов, без `*` и `>`, без пустых токенов,
|
||||||
|
попарно различны); при нарушении приложение MUST NOT стартовать. Значения `NATS_JWT` и `NATS_SEED` MUST NOT попадать в
|
||||||
|
логи, `repr` настроек и тексты ошибок валидации. Используемые subject'ы SHALL писаться в лог при старте и отдаваться в
|
||||||
|
`/healthcheck` объектом `subjects` с ключами `tabular_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** тесты roundtrip (`tests/integration/test_roundtrip.py`) запускаются при работающих контейнерах стенда на том же NATS
|
||||||
|
- **THEN** тесты используют уникальные subject'ы из настроек и не получают и не забирают сообщения стенда
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user