{
  "_comment": [
    "Copy to mock_gw.json. Re-read on every request, so edits take effect with no deploy.",
    "modes for 'authen': ok | error | fault | hang | empty",
    "modes for 'send'  : ok | error | expired | null | fault | garbage | hang | empty",
    "  ok      -> A-<ref>@<host>   the send is accepted",
    "  error   -> E-<ref>@<host>   gen_decl writes declStatus ERROR",
    "  expired -> ERROR:Access code is expired  -> parser returns null -> gen_decl retries",
    "  null    -> NULL             -> parser returns null -> gen_decl retries",
    "  fault   -> soap fault       -> parser returns null -> gen_decl retries",
    "  garbage -> non-XML body     -> xpath() on false -> PHP 5.6 FATAL (that is the point)",
    "  hang    -> sleeps past the caller's 30s CURLOPT_TIMEOUT, then still answers",
    "  empty   -> empty body",
    "delay_ms is applied BEFORE answering and is what you use to model prod-like latency.",
    "'refs' overrides one referenceNo; 'sequence' applies its entries to successive",
    "calls for that ref (last entry repeats), which is how you reproduce the",
    "duplicate-submission case: attempt 1 hangs past the consumer timeout, attempt 2",
    "arrives while attempt 1 is still in flight."
  ],

  "log": true,
  "access_code": "MOCK-ACCESS-CODE",
  "host": "mockgw",

  "authen": { "mode": "ok", "delay_ms": 0 },
  "send":   { "mode": "ok", "delay_ms": 0 },

  "refs": {
    "_example_slow_once": {
      "sequence": [
        { "mode": "ok", "delay_ms": 150000 },
        { "mode": "ok", "delay_ms": 0 }
      ]
    },
    "_example_always_reject": { "mode": "error" }
  }
}
