Rediger

Del via


GenericRandomErrorPlugin

Fails requests with a random selected error from file containing mocked errors.

Screenshot of a command prompt with the Dev Proxy simulating one of the errors for an OpenAI API request as defined in the config file.

Configuration example

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "genericRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.openai.com/*"
  ],
  "genericRandomErrorPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors.json"
  }
}

Configuration properties

Property Description Default
errorsFile Path to the file that contains error responses. No default
rate The percentage of requests to fail with a random error. Value between 0 and 100. 50
retryAfterInSeconds The number of seconds to wait before retrying the request. Included on the Retry-After response header for dynamic throttling. 5

Command line options

Name Description Default
-f, --failure-rate <failure rate> The percentage of requests to fail with a random error. Value between 0 and 100. 50

Remarks

Per-response Retry-After values

By default, the Retry-After header uses the global retryAfterInSeconds value. You can override this value on a per-response basis using the @dynamic=N syntax in the error responses file, where N is the number of seconds to wait before retrying.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/genericrandomerrorplugin.errorsfile.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.openai.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Retry-After",
              "value": "@dynamic=17"
            }
          ],
          "body": {
            "error": {
              "message": "Rate limit exceeded. Wait 17 seconds."
            }
          }
        }
      ]
    }
  ]
}

In this example, the Retry-After header uses 17 seconds for this response, regardless of the global retryAfterInSeconds setting. The value increments on each subsequent throttled request, as with the plain @dynamic token.

Next step