test(api): the blackhole trigger is detached — bound the poll, not the dispatch
Two fixes from Ed's run. ## The assertion I called load-bearing was measuring nothing `backend_migration` is a DETACHED job: the trigger spawns the handler and returns 202 in milliseconds, carrying no outcome and no run_id. I had modelled it on `admin_jobs.hurl`, where the jobs are synchronous and the response IS the outcome. So `duration < 120000` on the trigger would have passed against the ORIGINAL unbounded behaviour — it timed the dispatch, not the migration. The one assert the file existed for proved nothing. The bound is now a polling budget: `/runs?limit=1` with `retry: 60`, `retry-interval: 2000`. 120s, then hurl fails on the last assert. Against a 15-minute hang the row sits in `Running` and the budget exhausts, which is the failure this file is for. `run_id` comes from `$[0].id` (runs are `ORDER BY started_at DESC`), since the 202 body has none. ## A count assert on a registry, again `storage_multi_entry.hurl` asserted `$.entries count == 3` and `s3_blackhole` made it 4. The failure reads "expected 3, got 4", naming neither the entry that appeared nor whether it belonged. Replaced with per-name `contains`, which is what a registry wants: membership asserted per item, so declaring a new entry does not break an unrelated file. Positional asserts stay — entry ORDER is a separate property and a real one, since the boot fallback picks `[0]` when no active pointer exists. Its comment also said "Two entries declared" while asserting three: the drift a count invites, visible in the same three lines. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -43,8 +43,21 @@ Authorization: Bearer {{admin_token}}
|
||||
|
||||
HTTP 200
|
||||
[Asserts]
|
||||
# Two entries declared, in _ENTRIES order.
|
||||
jsonpath "$.entries" count == 3
|
||||
# Membership, asserted per entry rather than by counting them.
|
||||
#
|
||||
# A `count ==` here breaks every time anyone declares a new entry in
|
||||
# server.env, and the failure says "expected 3, got 4" — which names
|
||||
# neither the entry that appeared nor whether it was supposed to. This
|
||||
# is a registry; it grows. `s3_blackhole` was the fourth and broke it
|
||||
# exactly this way.
|
||||
jsonpath "$.entries[*].name" contains "local_main"
|
||||
jsonpath "$.entries[*].name" contains "s3_stub"
|
||||
jsonpath "$.entries[*].name" contains "azurite"
|
||||
jsonpath "$.entries[*].name" contains "s3_blackhole"
|
||||
|
||||
# Position, which is a SEPARATE property from membership and is
|
||||
# deliberately still pinned: entries come back in _ENTRIES order, and
|
||||
# the boot fallback below depends on `[0]` being the first declared.
|
||||
jsonpath "$.entries[0].name" == "local_main"
|
||||
jsonpath "$.entries[1].name" == "s3_stub"
|
||||
jsonpath "$.entries[2].name" == "azurite"
|
||||
|
||||
Reference in New Issue
Block a user