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 查看