muonsoft / openapi-mock

OpenAPI mock server with random data generation
MIT License
487 stars 55 forks source link

Response generation hangs indefinitely #62

Open crizzis opened 3 years ago

crizzis commented 3 years ago

Using the following config:

covidbevis-mock:
    image: muonsoft/openapi-mock
    environment:
      OPENAPI_MOCK_SPECIFICATION_URL: '/data/covidBevisApiSchema.json'
      OPENAPI_MOCK_PORT: 8453
      OPENAPI_MOCK_RESPONSE_TIMEOUT: '30.0'
      OPENAPI_MOCK_DEBUG: 'true'
      OPENAPI_MOCK_USE_EXAMPLES: 'if_present'
    ports:
      - '8453:8453'
    volumes:
      - ./resources:/data

where covidBevisApiSchema.json is defined as:

{
  "openapi": "3.0.0",
  "info": {
    "description": "This is the REST API description for the Swedish test proof solution.",
    "version": "0.1",
    "title": "Swedish Test proof REST API",
    "termsOfService": "Terms of service",
    "contact": {
      "name": "Myndigheten för Digital förvaltning",
      "url": "http://www.digg.se",
      "email": "info@digg.se"
    },
    "license": {
      "name": "MIT License",
      "url": "API license URL"
    }
  },
  "tags": [
    {
      "name": "test-submission-controller",
      "description": "Test Submission Controller"
    }
  ],
  "paths": {
    "/observation": {
      "post": {
        "tags": [
            "test-submission-controller"
        ],
        "summary": "Operation for submitting a test observation",
        "operationId": "submitObservationUsingPOST",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "request body",
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TestSubmissionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "//localhost:8453/"
    }
  ],
  "components": {
    "schemas": {
      "Coding": {
        "type": "object",
        "required": [
            "code",
            "display"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "display": {
            "type": "string"
          }
        },
        "title": "Coding"
      },
      "Delivery": {
        "type": "object",
        "required": [
            "serviceSupplier"
        ],
        "properties": {
          "delivered": {
            "type": "boolean"
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "serviceSupplier": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          }
        },
        "title": "Delivery"
      },
      "Proof": {
        "type": "object",
        "required": [
            "content",
            "mimetype"
        ],
        "properties": {
          "content": {
            "type": "string"
          },
          "delivery": {
            "$ref": "#/components/schemas/Delivery"
          },
          "mimetype": {
            "type": "string",
            "minLength": 3,
            "maxLength": 2147483647
          }
        },
        "title": "Proof"
      },
      "ProofQRCode": {
        "type": "object",
        "required": [
            "height",
            "image",
            "mimetype",
            "width"
        ],
        "properties": {
          "height": {
            "type": "integer",
            "format": "int32",
            "example": 400
          },
          "image": {
            "type": "string",
            "example": "data:image/png;base64,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PJLx8Jvs6qaX7k16AgIIIIAAAggggAACCCCAAAIIIIAAch+QNHgYPvycDgM+ukHG8iskDa//nB/Yqsdlp+O603Hk3SBpAmqGA2PO9ASbgNPsJyaPrxyk+B6k8gtqpVuQm7I9zBT28XSQ1UWi6fvl/0QAAggggAACCCCAAAIIIIAAAggggADyLcHFtL9WDCKCk/rh7rl4VYffVX4mzGfY5RibWT9yOZ7X4lWcoJL5mTCf4SbYhlk/cllj9SpO4abrSOtb3HuW2oJXe6wuwkxvyulDFvY9ChBAAAEEEEAAAQQQQAABBBBAAAEEkPuCuMHH1SDFwUUfpDrcLq+Qz/bjmt3hdzffcvHYavNRW3hC+/tx9Sao7HzLBeSo3RKO4h6G5f24qo/v8D7/jPe44j169U23u+ll+T8FgAACCCCAAAIIIIAAAggggAACCCCAPAfk/QBVM353nkg4LyT9+7JeRIafw/oPP7xtjquww99Z+iH9+3pchorXp/UfZr7CH+jiJsjCBF369zeVoHLj9WG+QeUr3tfubmEj3MOLnxkY4vjP6gPuvqlWN8X8NMh1KBgggAACCCCAAAIIIIAAAggggAACCCC3BVHBtuLgYj48OAuuPiC46LUvssPv6Xht+YHD+hE7/N4Mcs70hIagqceW1o/YCapmkDPbcvZ0y0tBDvOel6ZwV4OkN+VPDwGr/icEEEAAAQQQQAABBBBAAAEEEEAAAQSQ54LI+o/F89OHC/L44KJb/+HOTy/Of0iQp4Xf8w/g1XNU5z/SL9i8PYh7iTcvt+TtcSnc8ptgN8isBbndQw6AAAIIIIAAAggggAACCCCAAAIIIE8GCfMDNoiZ/1i+9o9fIb3tma4fwKznSMPx7trCefEpSHsDs9OsFxkqX+IlrPx5KNkXMgcJV9riT/a/UvM6iueh7OGW/XiQ7oce0s+T/lMECCCAAAIIIIAAAggggAACCCCAAAJIAHLz4cQqP3E0g6h8jAp2yvM9Rne42gzvK5BwXog9f92sL3H7cclyhNsPuI/nhZjz1936ku6f785J2/POzXqReP76X1/dQ72q3w8QQAABBBBAAAEEEEAAAQQQQAABBBBAAAHkGSD/AeN4u0XcCFjhAAAAV3RFWHRjb21tZW50AEZpbGUgc291cmNlOiBodHRwOi8vYm9vZmN2Lm9yZy9pbmRleC5waHA/dGl0bGU9RmlsZTpFeGFtcGxlX3JlbmRlcmVkX3FyY29kZS5wbmfj2F4lAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTAxLTE5VDIyOjAwOjMyLTA4OjAwxcqQ1AAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wMS0xOVQyMjowMDozMi0wODowMLSXKGgAAABHdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuNy43LTEwIDIwMTctMDctMzEgUTE2IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnSW9S5wAAABh0RVh0VGh1bWI6OkRvY3VtZW50OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6OkltYWdlOjpoZWlnaHQANTAwN8UAPAAAABd0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAA1MDDraVOxAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADE1MTY0MjgwMzJ1Pn10AAAAE3RFWHRUaHVtYjo6U2l6ZQA0LjA0S0JCqTs4QQAAAABJRU5ErkJggg=="
          },
          "mimetype": {
            "type": "string",
            "minLength": 3,
            "maxLength": 2147483647,
            "example": "image/png"
          },
          "width": {
            "type": "integer",
            "format": "int32",
            "example": 400
          }
        },
        "title": "ProofQRCode"
      },
      "Test": {
        "type": "object",
        "required": [
            "id",
            "targetDisease",
            "testResult",
            "typeOfTest"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "sampleCollectionDateTime": {
            "type": "string",
            "format": "date-time"
          },
          "targetDisease": {
            "$ref": "#/components/schemas/Coding"
          },
          "testManufacturer": {
            "$ref": "#/components/schemas/Coding"
          },
          "testName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "testResult": {
            "$ref": "#/components/schemas/Coding"
          },
          "typeOfTest": {
            "$ref": "#/components/schemas/Coding"
          }
        },
        "title": "Test"
      },
      "TestPersonData": {
        "type": "object",
        "properties": {
          "birthDate": {
            "type": "string",
            "format": "date"
          },
          "familyName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "givenName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "identity": {
            "type": "string",
            "minLength": 12,
            "maxLength": 12,
            "pattern": "^((18|19|20)[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[0-9]{4})$"
          }
        },
        "title": "TestPersonData"
      },
      "TestProof": {
        "type": "object",
        "required": [
            "metadata",
            "qrCode",
            "subject",
            "test"
        ],
        "properties": {
          "metadata": {
            "$ref": "#/components/schemas/TestProofMetadata"
          },
          "qrCode": {
            "$ref": "#/components/schemas/ProofQRCode"
          },
          "subject": {
            "$ref": "#/components/schemas/TestPersonData"
          },
          "test": {
            "$ref": "#/components/schemas/Test"
          }
        },
        "title": "TestProof"
      },
      "TestProofMetadata": {
        "type": "object",
        "required": [
            "country",
            "issuanceDate",
            "issuer",
            "uvci",
            "validThrough"
        ],
        "properties": {
          "country": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2147483647
          },
          "issuanceDate": {
            "type": "string",
            "format": "date"
          },
          "issuer": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "uvci": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2147483647
          },
          "validThrough": {
            "type": "string",
            "format": "date-time",
            "example": "2017-07-21T17:32:28Z"
          }
        },
        "title": "TestProofMetadata"
      },
      "TestSubmissionResponse": {
        "type": "object",
        "required": [
            "proofTypes",
            "testProof"
        ],
        "properties": {
          "proofTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Proof"
            }
          },
          "testProof": {
            "$ref": "#/components/schemas/TestProof"
          }
        },
        "title": "TestSubmissionResponse"
      }
    }
  }
}

The following request:

Zrzut ekranu 2021-08-4 o 11 29 56

Results in the mock taking all the available time to respond (=30 sec), then responding with 503 Error

Container logs:

time="2021-08-04T09:28:05Z" level=info msg="OpenAPI specification was successfully loaded from '/data/covidBevisApiSchema.json'"
time="2021-08-04T09:28:05Z" level=info msg="OpenAPI mock server was created" CORSEnabled=false Debug=true DefaultMaxFloat=1.073741823e+09 DefaultMaxInt=2147483647 DefaultMinFloat=-1.073741823e+09 DefaultMinInt=0 LogFormat=tty LogLevel=trace NullProbability=0.5 Port=8453 ResponseTimeout=30s SpecificationURL=/data/covidBevisApiSchema.json SuppressErrors=false UseExamples=if_present
time="2021-08-04T09:28:05Z" level=info msg="[HTTP]: 2021/08/04 09:28:05 3628537b5fbc - Starting server on port :8453"
time="2021-08-04T09:32:28Z" level=info msg="[contentTypeNegotiator] best media type 'application/json' was negotiated for accept header '*/*'" requestId=35cdc14c-fcab-4bf7-8b80-b8ff68dd383c