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.

Aller à l'installation

Informations de source

Dépôt
NVIDIA-AI-Blueprints/video-search-and-summarization
Dernière activité de la source
27 août 2026 à 10:19
Langue détectée de SKILL.md
anglais
Étoiles
1 865
Forks
390

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
2 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
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 ```
Voir sur GitHub