{
  "$defs": {
    "teststep": {
      "description": "Teststeps configuration",
      "oneOf": [
        {
          "required": [
            "type"
          ]
        },
        {
          "required": [
            "repeat_block"
          ]
        }
      ],
      "properties": {
        "desc": {
          "description": "Description of teststep",
          "type": "string"
        },
        "params": {
          "description": "Parameter given of teststep",
          "properties": {},
          "type": "object"
        },
        "repeat_block": {
          "description": "Repeat teststep x times",
          "properties": {
            "teststeps": {
              "items": {
                "$ref": "#/$defs/teststep"
              },
              "type": "array"
            },
            "times": {
              "description": "Repeat teststep x times",
              "minimum": 2,
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": {
          "description": "Name of teststep",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "$id": "recursion.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "A json testsuite schema",
  "properties": {
    "configs": {
      "description": "Additional config parameters used by teststeps",
      "patternProperties": {
        "^[a-z_]+": {}
      },
      "type": "object",
      "uniqueItems": true
    },
    "shutdown_steps": {
      "description": "Shutdown steps done after every testcase",
      "items": {
        "$ref": "#/$defs/teststep"
      },
      "type": "array"
    },
    "startup_steps": {
      "description": "Startup steps done before every testcase",
      "items": {
        "$ref": "#/$defs/teststep"
      },
      "type": "array"
    },
    "testcases": {
      "description": "Testcases creating a Testsuite",
      "items": {
        "properties": {
          "comment": {
            "description": "Commentary to the testcase",
            "type": "string"
          },
          "desc": {
            "description": "Description of teststep",
            "type": "string"
          },
          "name": {
            "description": "Short name of teststep. Must start with testnumber e.g. \"01 - Testname\"",
            "pattern": "^[0-9]+ - .*",
            "type": "string"
          },
          "parameterized_tests": {
            "description": "Execute testcase with different parameters",
            "patternProperties": {
              "[a-z_]": {
                "items": {},
                "minItems": 1,
                "type": "array"
              }
            },
            "type": "object",
            "uniqueItems": true
          },
          "req": {
            "description": "Reference to requirements",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "teststeps": {
            "description": "Steps done for testcase",
            "items": {
              "$ref": "#/$defs/teststep"
            },
            "minItems": 1,
            "type": "array"
          },
          "type": {
            "description": "Testtype",
            "enum": [
              "regression",
              "long_running",
              "skip",
              "known_failure"
            ]
          }
        },
        "required": [
          "name",
          "type",
          "teststeps"
        ],
        "type": "object"
      },
      "minItems": 1,
      "type": "array",
      "uniqueItems": true
    }
  },
  "required": [
    "testcases"
  ],
  "title": "Testsuite",
  "type": "object"
}