Skip to main content

panoramic

Run Saluki's Panoramic correctness and integration tests non-interactively and investigate their machine-readable results. Read this before running `panoramic`, `make test-integration`, or `make test-correctness`, or when diagnosing a test from its artifacts.

설치로 이동

소스 정보

저장소
DataDog/saluki
최근 소스 활동
2026년 9월 5일 12:29
감지된 SKILL.md 언어
영어
스타
41
포크
13

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
panoramic
description
Run Saluki's Panoramic correctness and integration tests non-interactively and investigate their machine-readable results. Read this before running `panoramic`, `make test-integration`, or `make test-correctness`, or when diagnosing a test from its artifacts.
disable-model-invocation
false
# /panoramic `panoramic` runs correctness cases from `test/correctness/cases` and integration cases from `test/integration/cases`. Get the user's approval before running these system-level suites. ## Discover the current interface Check the current `Makefile` recipes and `panoramic --help` before choosing a command. Use `panoramic run --help` for runner options and `panoramic list --help` to discover selection options. This keeps commands aligned with the working tree as the harness changes. These human-facing documents provide optional background: - `docs/development/testing.md`: test types and CI entry points - `docs/development/testing-patterns.md`: conventions for Rust tests - `bin/correctness/README.md`: Panoramic and its supporting tools ## Choose the suite and runtime Prefer the Make targets when test dependencies need rebuilding. Confirm their current recipes in the `Makefile`; the standard entry points are: ```bash make test-correctness make test-correctness-case CASE=<case> make test-integration ``` `make test-integration-quick` skips image builds. Use it only after verifying that the local images match the working tree. `--runtime` scopes integration discovery. On macOS, assume the `linux` runtime through the local Docker setup unless the user explicitly requests native macOS tests; pass `--runtime linux` because the CLI defaults to `mac` there. Follow the current Make recipe for native macOS provisioning. Correctness cases choose their runtime from their case configuration. Use `panoramic list` with the intended test directory and runtime to discover eligible case names before selecting them. ## Run non-interactively The Panoramic test targets write artifacts beneath `{{saluki}}/target/test-output/panoramic/` by default. This in-tree path is visible to Docker on macOS. Set `SALUKI_TEST_OUTPUT_DIR` to relocate the shared test-output root or `PANORAMIC_LOG_DIR` to override Panoramic only. Use the same base for direct runs. ```bash make build-panoramic target/release/panoramic run \ -d "$(pwd)/test/integration/cases" \ --runtime linux \ -t <case-name> \ --no-tui -o json -l "$(pwd)/target/test-output/panoramic" ``` Use comma-separated names with `-t` and `-p 1` when one case needs attributable output. Each run creates a timestamped `panoramic-*` directory beneath the base. `make clean-test-logs` deletes the Panoramic directory under the shared test-output root; `make clean` includes that target. Stdout and `run.json` identify the directory for a run. ## Interpret the result Exit codes distinguish the run-level result: | Code | Meaning | |------|---------| | 0 | Every test passed | | 1 | At least one assertion failed | | 2 | The harness could not reach a verdict for at least one test | | 3 | The selection matched no tests | Treat code 2 as an environment or harness problem before investigating assertion differences. A completed run writes `run.json`; each test directory contains `result.json`, `result.log`, and its captured artifacts. Start with the non-passing entries in `run.json`, follow each entry's `log_dir`, then use the paths in `result.json` rather than constructing artifact paths yourself. ```bash jq -r '.tests[] | select(.outcome != "passed") | "\(.name) \(.outcome) \(.log_dir)"' run.json jq -r '.assertions[] | select(.passed == false) | .kind + ": " + .message' <case-log-dir>/result.json jq -r '.diagnostic_lines[]? | "\(.source):\(.line_number) \(.text)"' <case-log-dir>/result.json ``` `outcome` is the verdict: `passed`, `failed`, `errored`, or `timed_out`. For a timeout, read the `timeout` object to identify the deadline, active phase, and configured duration. For other failures, read `error`, failed `assertions`, and `diagnostic_lines`, then open the referenced artifacts for context. Correctness assertion details may point to uncapped files under `details/`. `run.json` includes `build_revision`: the source revision used to build Panoramic, with `-dirty` for a modified checkout and `unknown` when it cannot be determined. ## Read the traffic artifacts A correctness test records what it sent and what each side decoded under `<log_dir>/traffic/`. Start with `traffic/manifest.json`: it names each capture, reports its compressed size, and says whether the file is still on disk (`file.present`). A passing test keeps only the manifest; every other outcome keeps the captures. When `input` is `null`, read `input_unavailable_reason` - the `kubernetes_in_docker` runtime never produces an input capture. The captures are zstd-compressed JSON Lines, one record per line, so decompress before reading: ```bash zstd -dc traffic/input.jsonl.zst | head -5 zstd -dc traffic/baseline-decoded.jsonl.zst | jq -c 'select(.kind == "metric") | .value.context' ``` Input records are in send order, which is not packet order. Decoded records are grouped by kind and indexed within each kind, so `index` is a position within a kind, not a global receive order.
GitHub에서 보기