aminghadersohi commented on PR #45148:
URL: https://github.com/apache/superset/pull/45148#issuecomment-6088446399
## Acceptance test: PASS (Superset producer)
Tested head `5b48ec5dd771d3642b0f15ea02d0c1c3dbb965e7`; verified OPEN and
unchanged before reporting.
Ran the actual service from this worktree with
`SUPERSET_CONFIG_PATH=/tmp/accept45148/config.py .venv/bin/superset mcp run
--host 127.0.0.1 --port 15418`. Used a disposable migrated SQLite metadata DB,
real Admin user via `MCP_DEV_USERNAME`, and real DAO reads (no mocked
tool/DAO). A `fastmcp.Client('http://127.0.0.1:15418/mcp')` issued `list_tools`
and `call_tool('get_catalog', {'request': ...})` over HTTP. Fixtures contained
20 rows/type initially, then 99/100/101/250, with overlong descriptions and
names to trigger field and byte bounds.
| Criterion | Result | Commands / key evidence |
|---|---|---|
| Complete results must not be flagged truncated, including fewer than
requested and exactly at cap | PASS | `.venv/bin/python
/tmp/accept45148/client.py complete`: all four asset types, page sizes
10/20/50/100. Reported dataset case: `page_size=50`, 20 items,
`next_cursor=null`, `truncated=false`, `fields_shortened=true`. Page size 10:
IDs 1–10 then 11–20; shortening flag true then false. |
| Held-back rows always have usable continuation; requesting above the DAO
cap must not lose rows | PASS | `client.py lowcap` with
`SQLALCHEMY_DAO_MAX_PAGE_SIZE=20`: `page_size=50` returned IDs 1–19 with
cursor, then ID 20 with no cursor; both `truncated=false`. `client.py wide
99/100/101/250` with default DAO cap: database page counts respectively `[99]`,
`[100]`, `[100,1]`, `[100,100,50]`. Every traversal asserted exact expected ID
sequence (no gaps/duplicates). |
| Byte-bound truncation must resume immediately after the last returned row
| PASS | `client.py wide 250`: datasets returned IDs
`1–48,49–81,82–114,115–147,148–180,181–213,214–246,247–250`. All seven byte-cut
pages had `truncated=true` and a cursor; the final page had `truncated=false`,
no cursor. Charts/dashboards also traversed all 250 IDs. |
| Do not loosen page, byte, or field bounds | PASS | Every live page
asserted ≤100 items, compact JSON ≤32768 bytes, names ≤256 chars, descriptions
≤500 chars, URLs ≤2048 chars. Largest measured live page: 32613 bytes.
`check_bounds.py`: `page_size=101` rejected with `request.page_size: Must be at
most the allowed maximum`. |
| Regression coverage for exactly-at-cap, fewer-than-page-size,
more-than-cap, and byte-bound cases | PASS |
`SUPERSET_CONFIG_PATH=/tmp/accept45148/test_config.py .venv/bin/pytest -q
tests/unit_tests/mcp_service/catalog`: **84 passed in 30.41s**. Live boundary
runs above additionally covered all four asset types. Search/cursor traversal
returned IDs 10–19 in pages `[3,3,3,1]`. |
**Scope limitation:** The external gateway's
`get_workspace_catalog`/`provenance.complete` mapping was not tested against
this head: this worktree contains the Superset producer, not that separately
deployed gateway. The producer output was verified live; no claim of
gateway-side regression coverage or production rollout is made.
Permission-hidden rows and oversized-URL omission have focused unit-test
evidence, not separate live fixtures.
`pre-commit run --files` on the four PR-changed files passed. No source
changes, commits, or pushes; worktree remains clean. Screenshots: n/a (MCP
service only).
Teardown complete: MCP process stopped, disposable DB/config removed, and
`curl http://127.0.0.1:15418/health` fails with connection refused (exit 7). No
containers started.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]