From 1d29a2f28999535d18852b97f007028ca1dcb25b Mon Sep 17 00:00:00 2001 From: dtzp555 Date: Sun, 5 Jul 2026 22:51:55 +1000 Subject: [PATCH] feat: aci-sim query helper + onboarding fixes (v0.17.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clean-room README test found a newcomer hits failures in the first 5 min — all doc/script, not sim bugs. Fixes: - scripts/run.sh: use ./.venv/bin/python (was bare `python` → ModuleNotFoundError: uvicorn unless the venv was activated; now matches sandbox-up.sh). - NEW `aci-sim query CLASS [--dn/--host/--json]`: stdlib aaaLogin→cookie→query helper so newcomers don't hand-roll auth cookies (the old README smoke test `curl class/fabricNode.json` had no auth → returned an APIC error envelope). - README: 60-second quickstart + embedded topology screenshot (docs/images/ topology.png), port-mode leads with `aci-sim run`, smoke test uses `aci-sim query`, install notes git+https is package-only. 900 tests pass (+12 for aci-sim query). Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 32 ++++++ CLAUDE.md | 2 +- CONTRIBUTING.md | 2 +- README.md | 129 +++++++++++++++++++++-- aci_sim/cli.py | 222 +++++++++++++++++++++++++++++++++++++++ docs/images/topology.png | Bin 0 -> 104925 bytes pyproject.toml | 2 +- scripts/run.sh | 4 +- tests/test_cli.py | 97 +++++++++++++++++ 9 files changed, 480 insertions(+), 10 deletions(-) create mode 100644 docs/images/topology.png diff --git a/CHANGELOG.md b/CHANGELOG.md index fe922d0..0690829 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) (pre-1.0: minor bumps may include breaking changes to the sim's behavior). +## [0.17.0] - 2026-07-05 + +### Added +- **`aci-sim query CLASS`** — a zero-friction, stdlib-only authenticated MIT + query helper (`aci_sim/cli.py`'s `cmd_query`), closing a clean-room + onboarding gap: the README's smoke test (`curl .../class/fabricNode.json`) + returned an APIC 403 error envelope, not the fabric, because — like real + APIC — the sim requires `aaaLogin` before any query. `aci-sim query` + does the `aaaLogin` -> `APIC-cookie` -> `GET /api/class|mo/...` dance for + you (via `urllib.request`/`ssl`/`http.cookies`, no new dependency — httpx + stays dev-only) and prints a compact table (`--json` for the raw + envelope). Supports `--dn DN` for a single-MO query, `--host`/`--user`/ + `--password` overrides, and a friendly hint ("is the sim running? start + it with `aci-sim run`") on a connection error instead of a traceback. + +### Fixed +- **`scripts/run.sh` failed with `ModuleNotFoundError: uvicorn` outside an + activated venv.** It invoked bare `python` (whatever that resolves to on + `$PATH`), unlike `scripts/sandbox-up.sh` which already resolves + `./.venv/bin/python`. Now `scripts/run.sh` uses the same + `PY="./.venv/bin/python"` (falling back to `python3`) pattern, so + `bash scripts/run.sh` works from a fresh, non-activated shell right after + `pip install -e '.[dev]'` — no `source .venv/bin/activate` required. +- **README quickstart + smoke test now copy-paste-correct.** Added a + 60-second quickstart (`pip install` -> `aci-sim run` -> `aci-sim query + fabricNode`) verified end-to-end in a clean-room test; the old smoke test + (`curl` with no login) is replaced with `aci-sim query fabricNode` (or the + full authenticated curl, shown as an alternative). Also embeds a rendered + `aci-sim graph` topology screenshot (`docs/images/topology.png`) near the + top and in the `aci-sim graph` CLI section, and documents `aci-sim query` + in §5 with a live sample transcript. + ## [0.16.0] - 2026-07-05 ### Changed diff --git a/CLAUDE.md b/CLAUDE.md index 6a227da..5bbf161 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ per device on `:443`, needed for NDO auto-discovery clients that hardcode port 443). Primary public use case: running Ansible `cisco.aci` playbooks against it directly — see `examples/ansible/`. -Test suite: `.venv/bin/python -m pytest -q` (888 tests, must stay green). +Test suite: `.venv/bin/python -m pytest -q` (900 tests, must stay green). Lint: `ruff check .` (non-blocking in CI — pre-existing baseline, see `.github/workflows/ci.yml`). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75ed9a7..025a69e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ pip install -e '.[dev]' # installs aci_sim + fastapi/uvicorn/pydantic/p .venv/bin/python -m pytest -q ``` -The suite currently has **888 tests** and must stay green. If you add a +The suite currently has **900 tests** and must stay green. If you add a feature or fix a bug, add or extend tests under `tests/` in the same PR — most existing tests are organized by PR/feature (`tests/test_pr*.py`, `tests/test_.py`); follow that convention for new ones. diff --git a/README.md b/README.md index c078626..3202a0c 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,25 @@ entire fabric — nodes, tenants, VRFs/BDs/EPGs, contracts, L3Outs, faults, endpoints, and the whole NDO schema tree — is generated deterministically from a single `topology.yaml`. +![aci-sim topology](docs/images/topology.png) + +*A 2-site, 15-node fabric rendered by `aci-sim graph` — spines (blue), +leaves/border-leaves (green), controllers (amber), and the inter-site ISN +cloud (slate). See §5's `aci-sim graph` for how to generate your own.* + +### 60-second quickstart + +```bash +pip install git+https://github.com/dtzp555-max/aci-sim.git +aci-sim run & +aci-sim query fabricNode # shows the 7-node LAB1 fabric +``` + +That's it — no cert generation, no manual `aaaLogin`/cookie handling, no +clone required. See §4 for the full install/run options (including the +from-source/clone path needed for `scripts/`, `examples/`, and Ansible) and +§5 for the full `aci-sim` CLI reference. + --- ## 1. Purpose @@ -225,16 +244,25 @@ pip install -e '.[dev]' # installs aci_sim + fastapi/uvicorn/pydantic/p `pip install aci-sim` will work once the project is published to PyPI (not yet published — use one of the two forms above until then). +> **Note:** `pip install git+https://...` installs the **package only** — +> `aci_sim` (the library + the `aci-sim` CLI). It does NOT check out +> `scripts/`, `examples/`, `deploy/`, or `topology.yaml` (those live in the +> git repo, not the installed package). That's fine for everyday use — +> `aci-sim run` / `aci-sim query` / `aci-sim new` / `aci-sim graph` work +> standalone and scaffold their own `topology.yaml` — but if you want +> `scripts/sandbox-up.sh`, the Ansible examples, or the systemd/launchd +> deploy sketches, use the "from source" clone below instead. + ### Port mode (default) ```bash -bash scripts/run.sh -# or, equivalently, via the aci-sim CLI (see §5): aci-sim run +# or, equivalently, from a clone (see scripts/run.sh): +bash scripts/run.sh ``` -Generates a self-signed cert on first run (`scripts/gen_certs.sh`) and -starts: +Generates a self-signed cert on first run (`scripts/gen_certs.sh`'s logic, +either via `aci-sim run` or `scripts/run.sh`) and starts: ``` [sim] APIC LAB1 (asn 65001) → https://127.0.0.1:8443 @@ -242,10 +270,33 @@ starts: [sim] NDO → https://127.0.0.1:8445 ``` -Smoke test: +Smoke test — like real APIC, every query requires `aaaLogin` first (a bare +`curl .../class/fabricNode.json` returns a 403 APIC error envelope, not the +fabric); `aci-sim query` does the login+cookie dance for you: ```bash -curl -sk https://127.0.0.1:8443/api/class/fabricNode.json | python -m json.tool +aci-sim query fabricNode +``` + +```console +CLASS NAME/KEY EXTRA DN +fabricNode LAB1-ACI-SP01 spine topology/pod-1/node-201 +fabricNode LAB1-ACI-SP02 spine topology/pod-1/node-202 +fabricNode LAB1-ACI-LF101 leaf topology/pod-1/node-101 +fabricNode LAB1-ACI-LF102 leaf topology/pod-1/node-102 +fabricNode LAB1-ACI-LF103 leaf topology/pod-1/node-103 +fabricNode LAB1-ACI-LF104 leaf topology/pod-1/node-104 +fabricNode LAB1-ACI-APIC01 controller topology/pod-1/node-1 +``` + +Equivalently, the full authenticated curl (if you don't have `aci-sim` on +`PATH`, e.g. scripting against a remote sim): + +```bash +TOKEN=$(curl -sk https://127.0.0.1:8443/api/aaaLogin.json \ + -X POST -d '{"aaaUser":{"attributes":{"name":"admin","pwd":"cisco"}}}' \ + | python3 -c 'import json,sys; print(json.load(sys.stdin)["imdata"][0]["aaaLogin"]["attributes"]["token"])') +curl -sk https://127.0.0.1:8443/api/class/fabricNode.json -H "Cookie: APIC-cookie=$TOKEN" | python3 -m json.tool ``` ### Sandbox mode (real per-device IPs on :443) @@ -417,10 +468,76 @@ $ aci-sim graph lab3.topology.yaml -o lab3.svg [aci-sim] wrote topology diagram: lab3.svg ``` +What the diagram looks like (this repo's default `topology.yaml`, exported to +PNG): + +![aci-sim topology](docs/images/topology.png) + +*2 sites, 15 nodes total — spines (blue), leaves/border-leaves (green), +controllers (amber), ISN cloud (slate).* + Flags: `TOPOLOGY` positional (default `./topology.yaml`), `-o/--output` (default `topology.html`; `.html`/`.htm` writes an HTML wrapper, `.svg` writes raw SVG). +### `aci-sim query [CLASS]` + +A zero-friction, **authenticated** MIT query helper — the ACI/NDO REST API +requires `aaaLogin` before any query (§10's error-handling section, real-APIC +behavior), so a bare `curl .../class/fabricNode.json` returns a 403 APIC +error envelope instead of data. `aci-sim query` does the +`aaaLogin` -> `APIC-cookie` -> `GET /api/class|mo/...` dance for you, with no +new dependency (stdlib `urllib.request`/`ssl`/`http.cookies` only — `httpx` +stays a dev/test-only extra, see §3). + +`CLASS` (e.g. `fabricNode`, `fvTenant`, `topSystem`) runs a class query; +`--dn DN` runs a single-MO query instead. Default output is a compact table +(one row per MO); `--json` prints the raw APIC envelope. + +```console +$ aci-sim query fabricNode +CLASS NAME/KEY EXTRA DN +fabricNode LAB1-ACI-SP01 spine topology/pod-1/node-201 +fabricNode LAB1-ACI-SP02 spine topology/pod-1/node-202 +fabricNode LAB1-ACI-LF101 leaf topology/pod-1/node-101 +fabricNode LAB1-ACI-LF102 leaf topology/pod-1/node-102 +fabricNode LAB1-ACI-LF103 leaf topology/pod-1/node-103 +fabricNode LAB1-ACI-LF104 leaf topology/pod-1/node-104 +fabricNode LAB1-ACI-APIC01 controller topology/pod-1/node-1 + +$ aci-sim query fvTenant +CLASS NAME/KEY EXTRA DN +fvTenant mgmt - uni/tn-mgmt +fvTenant MS-TN1 - uni/tn-MS-TN1 +fvTenant SF-TN1-LAB1 - uni/tn-SF-TN1-LAB1 + +$ aci-sim query --dn uni/tn-mgmt --json +{ + "imdata": [ + { + "fvTenant": { + "attributes": { + "dn": "uni/tn-mgmt", + "name": "mgmt" + } + } + } + ], + "totalCount": "1" +} +``` + +Flags: `CLASS` positional (omit if using `--dn`), `--dn DN` (mo-query a +single DN instead of a class query), `--host` (default `127.0.0.1:8443`, +port-mode LAB1), `--user`/`--password` (default `admin`/`cisco`), `--json` +(raw APIC envelope instead of the table). On a connection error (sim not +running), prints a friendly hint instead of a traceback: + +```console +$ aci-sim query fabricNode +ERROR: could not connect to 127.0.0.1:8443 — is the sim running? start it with `aci-sim run` +``` + ### `aci-sim run [TOPOLOGY]` A thin wrapper around `python -m aci_sim.runtime.supervisor` — it diff --git a/aci_sim/cli.py b/aci_sim/cli.py index 5163333..d0c61d3 100644 --- a/aci_sim/cli.py +++ b/aci_sim/cli.py @@ -30,6 +30,7 @@ import ipaddress import json import os import re +import ssl import sys from collections.abc import Callable from pathlib import Path @@ -442,6 +443,215 @@ def cmd_lldp(args: argparse.Namespace) -> int: return 0 +# --------------------------------------------------------------------------- +# query — zero-friction authenticated MIT query (aaaLogin -> cookie -> GET), +# so newcomers never have to hand-roll the login/cookie dance themselves. +# stdlib-only (urllib.request + ssl + http.cookies) — httpx is dev-only (see +# pyproject.toml's [project.optional-dependencies] dev extra), and `aci-sim +# query` must work from a bare `pip install aci-sim` with no dev extras. +# --------------------------------------------------------------------------- + +DEFAULT_QUERY_HOST = "127.0.0.1:8443" +DEFAULT_QUERY_USER = "admin" +DEFAULT_QUERY_PASSWORD = "cisco" + + +class QueryConnectionError(Exception): + """Raised when the sim cannot be reached at all (connection refused/timeout).""" + + +def _unverified_ssl_context() -> ssl.SSLContext: + """A permissive SSL context that accepts the sim's self-signed cert. + + Mirrors `curl -k` / `httpx.Client(verify=False)` used elsewhere in this + repo (examples/ci/assert_mit.py, scripts/e2e_*.py) — the sim's cert is + self-signed by scripts/gen_certs.sh, so hostname/CA verification is + deliberately skipped for this local dev tool. + """ + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ctx.check_hostname = False + ctx.verify_mode = ssl.CERT_NONE + return ctx + + +def _aaa_login(host: str, user: str, password: str, timeout: float = 5.0) -> str: + """POST /api/aaaLogin.json; return the APIC-cookie token string. + + Raises QueryConnectionError on a connection-level failure (sim not + running), or ValueError if the sim answered but login failed (bad + credentials / malformed envelope). + """ + import json as _json + import urllib.error + import urllib.request + + url = f"https://{host}/api/aaaLogin.json" + body = _json.dumps({"aaaUser": {"attributes": {"name": user, "pwd": password}}}).encode("utf-8") + req = urllib.request.Request( + url, data=body, method="POST", headers={"Content-Type": "application/json"} + ) + try: + with urllib.request.urlopen(req, timeout=timeout, context=_unverified_ssl_context()) as resp: + resp_body = resp.read().decode("utf-8") + set_cookie = resp.headers.get_all("Set-Cookie") or [] + except urllib.error.HTTPError as exc: + resp_body = exc.read().decode("utf-8") + text = _error_text_from_envelope(resp_body) or f"HTTP {exc.code}" + raise ValueError(f"aaaLogin failed: {text}") from exc + except (urllib.error.URLError, OSError, TimeoutError) as exc: + raise QueryConnectionError(str(exc)) from exc + + token = _extract_cookie(set_cookie, "APIC-cookie") + if token is not None: + return token + + # Fall back to the token embedded in the aaaLogin response body itself + # (docs/CONTRACT.md: imdata[0].aaaLogin.attributes.token) in case + # Set-Cookie parsing ever misses it. + try: + data = _json.loads(resp_body) + return data["imdata"][0]["aaaLogin"]["attributes"]["token"] + except (KeyError, IndexError, ValueError) as exc: + raise ValueError(f"aaaLogin succeeded but no token found in response: {resp_body[:200]}") from exc + + +def _extract_cookie(set_cookie_headers: list[str], name: str) -> str | None: + """Pull cookie *name*'s value out of one or more raw Set-Cookie header strings.""" + from http.cookies import SimpleCookie + + for header in set_cookie_headers: + jar: SimpleCookie = SimpleCookie() + jar.load(header) + if name in jar: + return jar[name].value + return None + + +def _error_text_from_envelope_dict(data: Any) -> str | None: + """If *data* (already-parsed) is an APIC error envelope, return its human-readable text.""" + imdata = data.get("imdata") if isinstance(data, dict) else None + if not imdata or not isinstance(imdata, list): + return None + first = imdata[0] + if isinstance(first, dict) and "error" in first: + attrs = first["error"].get("attributes", {}) + code = attrs.get("code", "") + text = attrs.get("text", "") + return f"{text} (code {code})" if code else text + return None + + +def _error_text_from_envelope(raw_body: str) -> str | None: + """If *raw_body* is an APIC error envelope, return its human-readable text.""" + import json as _json + + try: + data = _json.loads(raw_body) + except ValueError: + return None + return _error_text_from_envelope_dict(data) + + +def _query_mit( + host: str, token: str, *, cls: str | None, dn: str | None, timeout: float = 5.0 +) -> dict[str, Any]: + """GET /api/class/{cls}.json or /api/mo/{dn}.json with the APIC-cookie; return parsed JSON.""" + import json as _json + import urllib.error + import urllib.request + + if dn is not None: + url = f"https://{host}/api/mo/{dn}.json" + else: + url = f"https://{host}/api/class/{cls}.json" + + req = urllib.request.Request(url, method="GET", headers={"Cookie": f"APIC-cookie={token}"}) + try: + with urllib.request.urlopen(req, timeout=timeout, context=_unverified_ssl_context()) as resp: + raw = resp.read().decode("utf-8") + except urllib.error.HTTPError as exc: + raw = exc.read().decode("utf-8") + except (urllib.error.URLError, OSError, TimeoutError) as exc: + raise QueryConnectionError(str(exc)) from exc + + return _json.loads(raw) + + +# A handful of well-known attributes worth surfacing as extra table columns, +# tried in this order — the first one present on the MO wins (keeps the +# table useful across very different classes without a per-class mapping). +_QUERY_KEY_ATTR_CANDIDATES = ("name", "dn", "id") +_QUERY_EXTRA_ATTR_CANDIDATES = ("role", "state", "status", "adSt", "operSt", "descr") + + +def _format_query_text(cls_label: str, imdata: list[dict[str, Any]]) -> str: + """Render a compact one-row-per-MO table, in `aci-sim lldp`'s tabular style.""" + if not imdata: + return f"No {cls_label} objects found." + + rows: list[dict[str, str]] = [] + for entry in imdata: + if not isinstance(entry, dict) or not entry: + continue + class_name, body = next(iter(entry.items())) + attrs = body.get("attributes", {}) if isinstance(body, dict) else {} + key = next((attrs[a] for a in _QUERY_KEY_ATTR_CANDIDATES if attrs.get(a)), "-") + extra = next((attrs[a] for a in _QUERY_EXTRA_ATTR_CANDIDATES if attrs.get(a)), "-") + rows.append({"class": class_name, "key": key, "extra": extra, "dn": attrs.get("dn", "-")}) + + lines = [f"{'CLASS':<16} {'NAME/KEY':<28} {'EXTRA':<12} DN"] + for r in rows: + lines.append(f"{r['class']:<16} {r['key']:<28} {r['extra']:<12} {r['dn']}") + return "\n".join(lines) + + +def cmd_query(args: argparse.Namespace) -> int: + host = args.host + user = args.user + password = args.password + + if not args.dn and not args.cls: + print("ERROR: provide a CLASS (e.g. `aci-sim query fabricNode`) or --dn DN", file=sys.stderr) + return 1 + + try: + token = _aaa_login(host, user, password) + except QueryConnectionError: + print( + f"ERROR: could not connect to {host} — is the sim running? " + f"start it with `aci-sim run`", + file=sys.stderr, + ) + return 1 + except ValueError as exc: + print(f"ERROR: {exc}", file=sys.stderr) + return 1 + + try: + data = _query_mit(host, token, cls=args.cls if not args.dn else None, dn=args.dn) + except QueryConnectionError: + print( + f"ERROR: could not connect to {host} — is the sim running? " + f"start it with `aci-sim run`", + file=sys.stderr, + ) + return 1 + + imdata = data.get("imdata", []) if isinstance(data, dict) else [] + error_text = _error_text_from_envelope_dict(data) + if error_text is not None: + print(f"ERROR: {error_text}", file=sys.stderr) + return 1 + + if args.json: + print(json.dumps(data, indent=2)) + return 0 + + label = args.dn if args.dn else args.cls + print(_format_query_text(label, imdata)) + return 0 + + # --------------------------------------------------------------------------- # run # --------------------------------------------------------------------------- @@ -1668,6 +1878,18 @@ def build_parser() -> argparse.ArgumentParser: p_lldp.add_argument("--json", action="store_true", help="Emit machine-readable JSON instead of text.") p_lldp.set_defaults(func=cmd_lldp) + p_query = sub.add_parser( + "query", + help="Authenticated MIT query (aaaLogin -> cookie -> GET) against a running sim — no manual cookie handling.", + ) + p_query.add_argument("cls", metavar="CLASS", nargs="?", default=None, help="MO class to query, e.g. fabricNode, fvTenant, topSystem") + p_query.add_argument("--dn", default=None, help="Query a single MO by DN instead of a class query") + p_query.add_argument("--host", default=DEFAULT_QUERY_HOST, help=f"APIC host:port (default: {DEFAULT_QUERY_HOST}, i.e. port-mode LAB1)") + p_query.add_argument("--user", default=DEFAULT_QUERY_USER, help=f"Admin username (default: {DEFAULT_QUERY_USER})") + p_query.add_argument("--password", default=DEFAULT_QUERY_PASSWORD, help=f"Admin password (default: {DEFAULT_QUERY_PASSWORD})") + p_query.add_argument("--json", action="store_true", help="Emit the raw APIC JSON envelope instead of a compact table.") + p_query.set_defaults(func=cmd_query) + p_graph = sub.add_parser( "graph", help="Render a self-contained SVG/HTML topology diagram (no server, no CDN)." ) diff --git a/docs/images/topology.png b/docs/images/topology.png new file mode 100644 index 0000000000000000000000000000000000000000..8261958118c8580f3a8339569c7f02a39e87e425 GIT binary patch literal 104925 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 J1%CPV{{Yl%1E~N2 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index a3abaa7..e6c4765 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "aci-sim" -version = "0.16.0" +version = "0.17.0" description = "Faithful REST simulator of a 2-site Cisco ACI fabric (per-site APIC + ND/NDO)" readme = "README.md" license = "MIT" diff --git a/scripts/run.sh b/scripts/run.sh index 35b2750..6842d74 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -4,7 +4,9 @@ # unchanged. set -euo pipefail cd "$(dirname "$0")/.." +PY="./.venv/bin/python" +[ -x "$PY" ] || PY="python3" if [ ! -f certs/sim.crt ] || [ ! -f certs/sim.key ]; then bash scripts/gen_certs.sh fi -python -m aci_sim.runtime.supervisor +"$PY" -m aci_sim.runtime.supervisor diff --git a/tests/test_cli.py b/tests/test_cli.py index b55590c..9c9b94e 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -16,9 +16,14 @@ from pathlib import Path import yaml from aci_sim.cli import ( + QueryConnectionError, _ensure_certs, + _error_text_from_envelope, + _error_text_from_envelope_dict, + _format_query_text, build_parser, build_run_env_argv, + cmd_query, generate_topology, main, ) @@ -459,3 +464,95 @@ class TestRunEnvArgv: assert cert.read_text(encoding="utf-8") == "existing-cert" assert key.read_text(encoding="utf-8") == "existing-key" + + +# --------------------------------------------------------------------------- +# query — pure-logic helpers only (no live socket binding, same philosophy +# as TestRunEnvArgv above); the actual aaaLogin->cookie->GET round trip +# against a live sim is exercised manually (see README §4 quickstart) and by +# examples/ci/assert_mit.py-style E2E scripts, not by this unit suite. +# --------------------------------------------------------------------------- + + +class TestQuery: + def test_format_query_text_class_query(self) -> None: + imdata = [ + {"fabricNode": {"attributes": {"dn": "topology/pod-1/node-201", "name": "LAB1-SP01", "role": "spine"}}}, + {"fabricNode": {"attributes": {"dn": "topology/pod-1/node-101", "name": "LAB1-LF101", "role": "leaf"}}}, + ] + text = _format_query_text("fabricNode", imdata) + assert "LAB1-SP01" in text + assert "spine" in text + assert "topology/pod-1/node-201" in text + # Header row present + assert "CLASS" in text and "DN" in text + + def test_format_query_text_empty(self) -> None: + text = _format_query_text("fvTenant", []) + assert "No fvTenant objects found." == text + + def test_format_query_text_falls_back_to_dn_when_no_name(self) -> None: + imdata = [{"fvCtx": {"attributes": {"dn": "uni/tn-X/ctx-vrf1"}}}] + text = _format_query_text("fvCtx", imdata) + assert "uni/tn-X/ctx-vrf1" in text + + def test_error_text_from_envelope_dict_detects_error(self) -> None: + envelope = {"imdata": [{"error": {"attributes": {"text": "Token was invalid", "code": "403"}}}], "totalCount": "1"} + assert _error_text_from_envelope_dict(envelope) == "Token was invalid (code 403)" + + def test_error_text_from_envelope_dict_none_for_ok_envelope(self) -> None: + envelope = {"imdata": [{"fabricNode": {"attributes": {"dn": "topology/pod-1/node-201"}}}], "totalCount": "1"} + assert _error_text_from_envelope_dict(envelope) is None + + def test_error_text_from_envelope_string_wrapper(self) -> None: + raw = json.dumps({"imdata": [{"error": {"attributes": {"text": "bad creds", "code": "401"}}}]}) + assert _error_text_from_envelope(raw) == "bad creds (code 401)" + + def test_error_text_from_envelope_malformed_json_is_none(self) -> None: + assert _error_text_from_envelope("not json") is None + + def test_cmd_query_requires_class_or_dn(self, capsys) -> None: + rc = main(["query", "--host", "127.0.0.1:1"]) + err = capsys.readouterr().err + assert rc == 1 + assert "CLASS" in err or "--dn" in err + + def test_cmd_query_connection_error_is_friendly(self, capsys) -> None: + # Port 1 should refuse/timeout immediately on any dev machine — no + # live sim required for this test, matching TestRunEnvArgv's + # no-live-socket philosophy. + rc = main(["query", "fabricNode", "--host", "127.0.0.1:1"]) + out_err = capsys.readouterr().err + assert rc == 1 + assert "is the sim running" in out_err + assert "aci-sim run" in out_err + + def test_query_parser_wiring_defaults(self) -> None: + parser = build_parser() + args = parser.parse_args(["query", "fabricNode"]) + assert args.cls == "fabricNode" + assert args.dn is None + assert args.host == "127.0.0.1:8443" + assert args.user == "admin" + assert args.password == "cisco" + assert args.json is False + assert args.func is cmd_query + + def test_query_parser_wiring_dn_and_overrides(self) -> None: + parser = build_parser() + args = parser.parse_args( + ["query", "--dn", "uni/tn-mgmt", "--host", "10.0.0.1:9999", "--user", "bob", "--password", "hunter2", "--json"] + ) + assert args.cls is None + assert args.dn == "uni/tn-mgmt" + assert args.host == "10.0.0.1:9999" + assert args.user == "bob" + assert args.password == "hunter2" + assert args.json is True + + def test_query_connection_error_is_a_distinct_exception_type(self) -> None: + # Sanity: QueryConnectionError must not be a bare Exception subclass + # confusable with ValueError (used for auth-failure vs connection + # failure branching in cmd_query). + assert issubclass(QueryConnectionError, Exception) + assert not issubclass(QueryConnectionError, ValueError)