Skip to main content

configure-webhook-bdd-test

Configure the Docker Compose webhook receivers required by the VIOS webhook notification BDD tests, including the custom body template cases. Use when preparing deployment/stream-processing/docker-compose/configs/notification_config.json for test_webhook_notifications.py or test_webhook_custom_body.py, or when those tests time out waiting for camera_add, camera_streaming, camera_remove, or a custom body delivery.

インストールへ移動

ソース情報

リポジトリ
NVIDIA-AI-Blueprints/video-search-and-summarization
ソースの最終更新活動
2026年8月27日 10:19
検出された SKILL.md の言語
英語
スター
1,873
フォーク
395

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
2 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
configure-webhook-bdd-test
description
Configure the Docker Compose webhook receivers required by the VIOS webhook notification BDD tests, including the custom body template cases. Use when preparing deployment/stream-processing/docker-compose/configs/notification_config.json for test_webhook_notifications.py or test_webhook_custom_body.py, or when those tests time out waiting for camera_add, camera_streaming, camera_remove, or a custom body delivery.
# Configure Webhook BDD Test Every BDD webhook receiver is declared in one file: `test/bdd_tests/data/webhook_bdd_config.json`. It is the single source of truth shared by three consumers: - `test/bdd_tests/scripts/update_notification_config.py` applies it to the deployed `notification_config.json`. - `tests/notification/test_webhook_custom_body.py` reads `custom_body_cases` to know each case's path, method, and template. - The `standard_receivers` paths must match `webhook_paths` in `test/bdd_tests/config.json` (the script warns on divergence). **Never hand-edit the BDD receivers in `notification_config.json`.** Change `webhook_bdd_config.json` (or accept it as-is) and run the script: ```bash cd test/bdd_tests && python3 scripts/update_notification_config.py ``` By default it updates `deployment/stream-processing/docker-compose/configs/notification_config.json`; pass `--notification-config <path>` for another deployment, or `--dry-run` to preview. The script sets `webhooks.enabled: true`, owns the three items `wh-001`/`wh-002`/`wh-003` (`camera_add`/`camera_streaming`/`camera_remove` — the ids are asserted as `webhook_id` by the tests), rewrites BDD requests in place matched by URL, prunes stale `/bdd/webhooks/` receivers, and preserves every non-BDD item and receiver. It refuses to run if the existing config is not valid JSON — restore a valid file first. ## What the declared receivers cover - **File-sensor receivers** (`camera_type: ["file"]`) at `/bdd/webhooks/camera/{add,streaming,remove}` — used by the file upload scenarios in `webhook_notifications.feature`. - **RTSP receivers** (`camera_type: ["rtsp"]`) at the `/rtsp-only` paths — used by the RTSP scenario (skipped unless `tests.notification_tests.test_parameters.rtsp_sensor` is set in `test/bdd_tests/config.json`), and as the negative filter case: `camera_add/rtsp-only` must receive *nothing* for a file sensor. Keep it filtered to `["rtsp"]` exactly. - **Unfiltered receiver** at `/bdd/webhooks/camera/add/unfiltered` — proves an omitted `camera_type` accepts every type. - **Custom body cases** (`custom_body_cases`) at `/bdd/webhooks/custom/...` — used by `webhook_custom_body.feature`: - `valid`: scalar/object/array placeholders, missing paths rendering as `""`, preserved literal types, an empty `{}` body, the 32-level depth boundary, the default-shaped `camera_streaming` body whose metadata placeholders resolve, `body` winning over a configured `user_defined_metadata`, the body-less `user_defined_metadata` passthrough (merged verbatim into `event.metadata` of the default tagged body), and the Elasticsearch delete-by-query body on `camera_remove` with receiver-specific `query_params` (a case may override the shared `request_defaults` keys). Each delivered body must equal the body computed by the reference implementations in `webhook_test_utils.py` from the default receiver's capture of the same event. - `invalid`: malformed/embedded/empty placeholders, braces in property names, bare reserved braces, and a 33-level body. These requests must be present in the config so the tests can prove VST skips them at load while the valid sibling receivers still deliver. When adding a case, give it a unique `case` name and a unique path under `/bdd/webhooks/custom/` (invalid cases under `/bdd/webhooks/custom/invalid/`), then rerun the script. Test code and data are bind-mounted into the BDD container, so no container rebuild is needed. All BDD requests share `request_defaults`: the `streamId` header (the tests read it case-insensitively but do not accept `x-stream-id`), the `change` query parameter, `timeout_ms`, and `retry`. Omit `auth`; the in-process receiver does not verify signatures and an unresolved `{{secrets.*}}` placeholder only adds a failure path (the script strips item-level `auth` from the BDD items). ## After applying the config 1. Confirm the deployed image actually supports webhooks. Images built before the webhook feature ignore this config entirely, and the only symptom is every scenario timing out with zero captured requests: ```bash docker exec streamprocessing-ms-1 grep -ac "notification_config.json" /home/vst/vst_release/launch_vst ``` `0` means the running image predates the feature regardless of its tag — rebuild (`./build.sh container module=sensor,streamprocessing tag=<tag>`) and redeploy before running the tests. `1` or more means webhook support is present. Custom body templates additionally require an image built from a branch containing `renderBodyTemplate` in `src/framework/notification/webhook/webhook_notifier.cpp`. 2. Tell the user to restart VST if it was already running; VST loads this config at startup, and the invalid-template skip happens at that load. 3. Do not run pytest unless requested. Finish by giving the commands, to be run from `test/bdd_tests`: ```bash poetry run pytest tests/notification/ poetry run pytest tests/notification/test_webhook_notifications.py -v --tb=short --log-cli-level=INFO poetry run pytest tests/notification/test_webhook_custom_body.py -v --tb=short --log-cli-level=INFO ```
GitHubで見る