# Vss E2e Smoke

> Run this skill whenever the user asks to verify my VSS install works, smoke test VSS, check whether the deployment succeeded, or run an end-to-end test of summary/search for the video-search-and-summarization sample app. It provides one-command smoke tests that use the real Pipeline Manager and Search service APIs to upload a video, trigger summary or search embedding work, poll results, and print PASS/FAIL. Use it proactively for fresh deployments, mode changes, or suspected broken VSS services.

- Skill: `open-edge-platform/vss-e2e-smoke` (Agent Skill, multi-file: 16 files)
- Install (CLI): `npx skillmds@latest add open-edge-platform/vss-e2e-smoke`
- Raw SKILL.md: https://api.skillmd.com/api/skills/open-edge-platform/vss-e2e-smoke/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: open-edge-platform (https://skillmd.com/u/open-edge-platform)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/open-edge-platform/vss-e2e-smoke

---


# VSS end-to-end smoke tests

Use this skill for the Video Search & Summarization sample application when a user wants a quick, real deployment check rather than unit tests. The bundled scripts exercise the same public APIs exposed by the running app.

## Environment setup (run first)

This skill drives the Video Search & Summarization app through its real source
files, so the VSS application must be present and you must run commands from its
app root. **Do this before anything else**, and it works whether or not the VSS
source is already in your workspace.

Run the bundled bootstrap. It first tries to find an existing VSS checkout -
walking up from the current directory and inspecting the enclosing git repo - and
reuses it **without ever re-cloning**. Only when no checkout is found does it do a
shallow, single-branch, sparse checkout of just
`sample-applications/video-search-and-summarization` from `main`. It prints the
resolved app root on stdout:

```bash
# SKILL_DIR is THIS skill's own directory (shown to you when the skill loads);
# in-repo it is .github/skills/vss-e2e-smoke. Works the same if the skill is installed standalone.
SKILL_DIR=".github/skills/vss-e2e-smoke"
APP_ROOT="$(bash "$SKILL_DIR/scripts/vss-bootstrap.sh")"
cd "$APP_ROOT"
```

Every command below assumes the working directory is this `APP_ROOT`. To pull
from a fork/branch or reuse a specific checkout dir, override `VSS_REPO_URL`,
`VSS_REPO_BRANCH`, or `VSS_CLONE_DIR` before running it.

## Which smoke test to run

- **Summary mode (`source setup.sh --summary`)**: run `scripts/e2e_summary.sh`. It uploads a video through Pipeline Manager, starts the summary pipeline, polls state, verifies chunking, and requires a non-empty final summary.
- **Search mode (`source setup.sh --search`)**: run `scripts/e2e_search.sh`. It uploads a video through Pipeline Manager, creates search embeddings, queries the search service, and requires non-empty hits.
- **Dual mode (`source setup.sh --summary --search` or `--dual`)**: run both scripts. Summary and frame-search are independent capabilities.
- **Unified mode (`source setup.sh --summary-and-search`, `--search-and-summary`, `--all`, or `--unified`)**: run `scripts/e2e_summary.sh` first, then `scripts/e2e_search.sh`. Unified mode uses both summary and search services; if search is configured over summary text, the summary pass confirms the source content exists.

## Prerequisites

- Start VSS first with `source setup.sh --summary`, `--search`, `--dual`, or `--unified`.
- Default external API base is `http://localhost:12345/manager` through nginx (`APP_HOST_PORT=12345`). The scripts also accept a host root such as `http://localhost:12345` and will detect `/manager`.
- `curl`, `bash`, and `python3` must be available.
- Provide a streamable MP4 if the repository sample fallback is not suitable. The checked `APP_ROOT/data` directory currently contains no sample videos; see `references/sample-assets.md`.

## Commands

From this skill directory:

```bash
# Summary smoke; optional first arg is a video path, optional second arg is Pipeline Manager API base
./scripts/e2e_summary.sh [video.mp4] [http://localhost:12345/manager]

# Search smoke; optional first arg is a video path, optional second arg is Pipeline Manager API base
./scripts/e2e_search.sh [video.mp4] [http://localhost:12345/manager]
```

Useful environment overrides:

```bash
VSS_API_BASE=http://localhost:12345/manager   # upload, summary, embeddings, manager search
VSS_SEARCH_BASE=http://localhost:7890         # optional direct video-search service base for /query
VSS_QUERY='person walking near shelves'       # natural-language query for search smoke
VSS_TIMEOUT_SECONDS=1800                      # summary/search polling timeout
VSS_POLL_INTERVAL_SECONDS=5                   # poll interval
VSS_CHUNK_DURATION=10                         # summary sampling.chunkDuration
VSS_SAMPLING_FRAME=5                          # summary sampling.samplingFrame
VSS_FRAME_OVERLAP=0                           # summary sampling.frameOverlap; multiFrame is derived
VSS_EVAM_PIPELINE=object_detection            # summary evam.evamPipeline; API also allows video_ingestion
```

## Interpreting results

- `PASS` means the script reached the expected final condition using real HTTP calls.
- `FAIL` means the deployment is not ready, the wrong mode is running, the video was rejected, processing timed out, or a backend component returned an error.
- For summary, check the printed `videoId`, `stateId`, chunk counts, statuses, and summary excerpt.
- For search, check the printed `videoId`, embedding response, query text, and hit count.
- A failing health check usually points at `APP_HOST_PORT`, nginx, or Pipeline Manager. A failing search query with successful embedding usually points at `video-search`, VDMS, or embedding/dataprep services.

## Grounding

These scripts are grounded in the current app code:

- Pipeline Manager OpenAPI: `docs/user-guide/_assets/vss-api.yaml`
- nginx API prefix: `docs/user-guide/api-reference.md` says Pipeline Manager paths are prefixed with `/manager/` through nginx
- Upload: `POST /manager/videos` multipart field `video`
- Summary: `POST /manager/summary`, poll `GET /manager/states/{stateId}`
- Search embeddings: `POST /manager/videos/search-embeddings/{videoId}`
- Search query: direct search service `POST /query` with a list of `{query_id, query}`, or manager shim `POST /manager/search/query`

