Global/MVT acceptance tests: the rest of the config-level checks #125

Closed
opened 2026-08-15 07:22:29 +00:00 by art · 1 comment
Owner

Part of the #115 plan: the config-level (global) acceptance tests landed in #119 with two (every map_* table's geom column has a gist index; the densest z5 tile stays under 8 MB). This issue tracks the rest of the global/MVT checks the review comment asked for ("check that the MVT is sensible"). The general instruction from #115: a test is a sentence citing the R-number where relevant, a SQL query whose first column is the pass/fail boolean, and a timeout from {1, 10, 100, 1000}.

Candidates:

  • R30: a request below a layer's floor returns an empty tile, and a request above maxz serves the maxz table — callable per layer via the zxy_ functions on a fixed tile below the floor (cheap, and it exercises the MVT functions themselves, which no test does yet).
  • Per-source tile budgets: extend the z5 Stockholm check to each country source (zxy_is, zxy_se, zxy_pl, zxy_fi) and a couple of mid-zoom tiles, so a runaway layer in ONE country fails that country's run rather than the shared check.
  • Empty-vs-missing: an all-ocean tile must be genuinely empty (0 bytes) — R30's sibling, catches a layer serving its floor table to every request.
  • Index coverage for the per-country prefixes (ismap_, se_, pl_, fi_), not just map_* — once #12's orphan cleanup lands, the legacy tables stop being a reason to scope the check.
  • MVT attribute set: a decoded tile's keys must match the contract's mvt_exclude-adjusted attr_names (R121's structural half) — needs tile decoding in SQL, so likely a 1000s-bucket candidate or a mapsrv-side test.
Part of the #115 plan: the config-level (global) acceptance tests landed in #119 with two (every map_* table's geom column has a gist index; the densest z5 tile stays under 8 MB). This issue tracks the rest of the global/MVT checks the review comment asked for ("check that the MVT is sensible"). The general instruction from #115: a test is a sentence citing the R-number where relevant, a SQL query whose first column is the pass/fail boolean, and a timeout from {1, 10, 100, 1000}. Candidates: - R30: a request below a layer's floor returns an empty tile, and a request above maxz serves the maxz table — callable per layer via the zxy_<layer> functions on a fixed tile below the floor (cheap, and it exercises the MVT functions themselves, which no test does yet). - Per-source tile budgets: extend the z5 Stockholm check to each country source (zxy_is, zxy_se, zxy_pl, zxy_fi) and a couple of mid-zoom tiles, so a runaway layer in ONE country fails that country's run rather than the shared check. - Empty-vs-missing: an all-ocean tile must be genuinely empty (0 bytes) — R30's sibling, catches a layer serving its floor table to every request. - Index coverage for the per-country prefixes (ismap_*, se_*, pl_*, fi_*), not just map_* — once #12's orphan cleanup lands, the legacy tables stop being a reason to scope the check. - MVT attribute set: a decoded tile's keys must match the contract's mvt_exclude-adjusted attr_names (R121's structural half) — needs tile decoding in SQL, so likely a 1000s-bucket candidate or a mapsrv-side test.
Author
Owner

Result is in #140 — #140; the review note is the PR description. Shipped: R30 floor/ceiling via the zxy_map_* functions, per-country z5/z8 tile budgets, all-ocean empty check, index coverage extended to ismap_*. The MVT attribute-set (R121 decoded-tile) half cannot be a SQL test (MVT is protobuf, no decoder in Postgres) — recorded here and filed as #139 (mapsrv-side).

Result is in #140 — https://git.blahonga.org/art/ismap/pulls/140; the review note is the PR description. Shipped: R30 floor/ceiling via the zxy_map_* functions, per-country z5/z8 tile budgets, all-ocean empty check, index coverage extended to ismap_*. The MVT attribute-set (R121 decoded-tile) half cannot be a SQL test (MVT is protobuf, no decoder in Postgres) — recorded here and filed as #139 (mapsrv-side).
art 2026-08-16 05:40:02 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
art/ismap#125
No description provided.