Testing And Staging
Webhook drills
Required webhook delivery, retry, and replay validation drills.
Webhook drills
Operators should prove receiver behavior before production.
Preconditions
- webhook endpoint created in operator dashboard or operator API
- receiver secret stored on operator side
- signature verification enabled
- dedupe store enabled on
event_id
Required drills
1. Success drill
- subscribe endpoint to trade events
- trigger happy-path trade
- confirm receiver returns
2xx - confirm delivery status becomes
sent - confirm event stored exactly once by
event_id
2. Bad signature drill
- temporarily use wrong secret on receiver side
- trigger event
- confirm receiver returns
401 - confirm delivery status becomes
failed - restore correct secret
- replay delivery
- confirm replay becomes
sent
3. Retry drill
- configure receiver scenario to fail once
- trigger event
- confirm first delivery attempt returns
500 - wait for retry window
- confirm later attempt becomes
sent - confirm business effect applied once only
4. Dead-letter drill
- configure receiver to keep failing with
500 - trigger event
- let retries exhaust
- confirm delivery status becomes
dead_letter - fix receiver
- replay delivery
- confirm latest attempt becomes
sent
5. Duplicate protection drill
- replay already processed event
- confirm receiver returns duplicate response such as
409 - confirm no duplicate business side effect recorded
Built-in receiver scenarios
OpenPoly staging test receiver supports these scripted behaviors:
okfail-oncealways-500
Use them when OpenPoly provides staging receiver access during onboarding or internal joint testing.
Evidence to capture
event_idevent_type- first attempt timestamp UTC
- latest attempt timestamp UTC
- last status code
- delivery final status
- receiver log entry showing dedupe result
Pass criteria
- success path reaches
sent - transient failure retries without duplicate side effects
- persistent failure reaches
dead_letter - replay works after fix
- bad signature rejected before business processing
