Loading
HttpCtrl: __is_satisfy must rstrip trailing / from BOTH stub and request URLs
`HttpStubContainer.__is_satisfy` compared the registered stub URL
against `criteria.url.rstrip("/")` (request side stripped) but kept
`stub.criteria.url` as-is. A stub registered with a trailing `/` —
e.g. `Set Stub Reply POST /ngsi-ld/v1/entities/{id}/attrs/ 204` —
could therefore never match a request whose path also ended with `/`,
because the comparison reduced to `.../attrs/` (stub) vs `.../attrs`
(request). The mock then silently dropped the request and the broker
under test treated the forward as a transport failure.
Three comparison sites were affected:
- GET branch with `?` in the stub URL (line ~90).
- Non-GET branch with `?` in the request URL (line ~130).
- Final fallback equality check (line ~146).
All three now `rstrip("/")` both sides, so a stub URL with trailing
`/` matches a request with trailing `/` and a stub URL without
trailing `/` still matches a request with trailing `/` (the
pre-existing behaviour).
Surfaced by swBroker against D003_01_inc: with the test's
`Set Stub Reply POST /ngsi-ld/v1/entities/{id}/attrs/ 204` the
mock returned no response, so the broker counted the forward as
failed and returned `207 Multi-Status` instead of the expected
`204`. With the fix the forward matches the stub, the mock
replies 204, and the broker returns 204.
Same pattern affects (at least) D003_01_exc/inc/red, D003_02_exc/inc/red,
D004_01_red — all register stubs with trailing `/attrs/`.
Co-Authored-By:
Claude Opus 4.7 <noreply@anthropic.com>