{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "cli": {
      "type": "object",
      "properties": {
        "linter": {
          "type": "object",
          "properties": {
            "disable": {
              "type": "boolean"
            },
            "ignored-warnings": {
              "type": "array",
              "items": {
                "type": "null"
              }
            },
            "lint-and-exit": {
              "type": "boolean"
            },
            "warn-on-unfamiliar-fields": {
              "type": "boolean"
            }
          }
        }
      }
    },
    "cli-aliases": {
      "type": "object",
      "properties": {
        "cloud": {
          "type": "object",
          "properties": {
            "provisioning": {
              "type": "string"
            }
          }
        },
        "detach": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "cloud": {
                  "type": "object",
                  "properties": {
                    "detach": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "func": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "console": {
                  "type": "object",
                  "properties": {
                    "disable": {
                      "type": "boolean"
                    }
                  }
                }
              }
            },
            "settings": {
              "type": "object",
              "properties": {
                "aggregator": {
                  "type": "string"
                }
              }
            }
          }
        },
        "gui": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "jmeter": {
                  "type": "object",
                  "properties": {
                    "gui": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "install-tools": {
          "type": "object",
          "properties": {
            "services": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "lint": {
          "type": "object",
          "properties": {
            "cli": {
              "type": "object",
              "properties": {
                "linter": {
                  "type": "object",
                  "properties": {
                    "lint-and-exit": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "local": {
          "type": "object",
          "properties": {
            "provisioning": {
              "type": "string"
            }
          }
        },
        "locations": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "cloud": {
                  "type": "object",
                  "properties": {
                    "dump-locations": {
                      "type": "boolean"
                    }
                  }
                }
              }
            },
            "provisioning": {
              "type": "string"
            }
          }
        },
        "nolint": {
          "type": "object",
          "properties": {
            "cli": {
              "type": "object",
              "properties": {
                "linter": {
                  "type": "object",
                  "properties": {
                    "disable": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "public": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "blazemeter": {
                  "type": "object",
                  "properties": {
                    "public-report": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        },
        "report": {
          "type": "object",
          "properties": {
            "reporting": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "sequential": {
          "type": "object",
          "properties": {
            "modules": {
              "type": "object",
              "properties": {
                "local": {
                  "type": "object",
                  "properties": {
                    "sequential": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "execution": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "concurrency": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "local": {
                    "type": "integer"
                  }
                }
              },
              {
                "type": "integer"
              }
            ]
          },
          "executor": {
            "type": "string"
          },
          "hold-for": {
            "type": "string"
          },
          "scenario": {
            "type": "string",
            "pattern": "[a-zA-Z0-9-_]"
          },
          "throughput": {
            "type": "object",
            "properties": {
              "local": {
                "type": "integer"
              }
            }
          }
        }
      }
    },
    "executor": {
      "type": "string",
      "enum": [
        "ab",
        "apiritif",
        "gatling",
        "grinder",
        "jmeter",
        "junit",
        "locust",
        "mocha",
        "molotov",
        "newman",
        "nunit",
        "pbench",
        "pytest",
        "rspec",
        "selenium",
        "siege",
        "tsung",
        "wdio"
      ]
    },
    "included-configs": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "modules": {
      "type": "object",
      "properties": {
        "ab": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "android-emulator": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "apiritif": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "appium": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "blazemeter": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "capturehar": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "cloud": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "default-location": {
              "type": "string"
            }
          }
        },
        "console": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "disable": {
              "type": "boolean"
            },
            "screen": {
              "type": "string"
            }
          }
        },
        "consolidator": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "percentiles": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          }
        },
        "external-results-loader": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "final-stats": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "final_stats": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "functional-consolidator": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "gatling": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "java-opts": {
              "type": "string"
            },
            "version": {
              "type": "string"
            },
            "properties": {
              "type": "object",
              "properties": {
                "gatling.data.file.bufferSize": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "grinder": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "properties": {
              "type": "object",
              "properties": {
                "grinder.useConsole": {
                  "type": "boolean"
                }
              }
            }
          }
        },
        "install-checker": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "jmeter": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            },
            "plugins": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "properties": {
              "type": "object",
              "properties": {
                "jmeter.save.saveservice.autoflush": {
                  "type": "string"
                },
                "jmeter.save.saveservice.connect_time": {
                  "type": "string"
                },
                "jmeterengine.force.system.exit": {
                  "type": "string"
                },
                "summariser.name": {
                  "type": "string"
                }
              }
            },
            "protocol-handlers": {
              "type": "object",
              "properties": {
                "http": {
                  "type": "string"
                }
              }
            }
          }
        },
        "junit": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "junit-xml": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "local": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "locust": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "mocha": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "molotov": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "monitoring": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "newman": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "nunit": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "passfail": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "pbench": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "proxy2jmx": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "pytest": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "robot": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "rspec": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "screenshoter": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "selenium": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "shellexec": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "siege": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "testng": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "tsung": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "unpacker": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "virtual-display": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        },
        "wdio": {
          "type": "object",
          "properties": {
            "class": {
              "type": "string"
            }
          }
        }
      }
    },
    "provisioning": {
      "type": "string",
      "enum": ["local", "cloud"]
    },
    "reporting": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "items": {
              "type": "object",
              "properties": {
                "module": {
                  "$ref": "#/definitions/reporting-modules"
                },
                "criteria": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/reporting-modules"
            }
          }
        ]
      }
    },
    "reporting-modules": {
      "type": "string",
      "enum": ["final-stats", "console", "blazemeter", "junit-xml"]
    },
    "scenarios": {
      "type": "object",
      "patternProperties": {
        "[a-zA-Z0-9-_]": {
          "type": "object",
          "properties": {
            "default-address": {
              "type": "string"
            },
            "headers": {
              "type": "object",
              "properties": {
                "Accept": {
                  "type": "string"
                },
                "Connection": {
                  "type": "string"
                }
              }
            },
            "requests": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "assert": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "contains": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "not": {
                          "type": "boolean"
                        },
                        "regexp": {
                          "type": "boolean"
                        },
                        "subject": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "follow-redirects": {
                    "type": "boolean"
                  },
                  "headers": {
                    "type": "object",
                    "properties": {
                      "Content-Type": {
                        "type": "string"
                      }
                    }
                  },
                  "url": {
                    "type": "string"
                  }
                }
              }
            },
            "simulation": {
              "type": "string"
            }
          }
        }
      }
    },
    "services": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "local": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "metrics": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "module": {
            "type": "string"
          }
        }
      }
    },
    "settings": {
      "type": "object",
      "properties": {
        "aggregator": {
          "type": "string",
          "enum": ["consolidator"]
        },
        "artifacts-dir": {
          "type": "string"
        },
        "check-updates": {
          "type": "boolean"
        },
        "check-interval": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            }
          ]
        },
        "default-executor": {
          "$ref": "#/definitions/executor"
        },
        "env": {
          "type": "object"
        },
        "proxy": {
          "type": "object",
          "properties": {
            "address": {
              "type": "string"
            },
            "username": {
              "type": "string"
            },
            "password": {
              "type": "string"
            },
            "ssl-cert": {
              "type": "string"
            },
            "ssl-client-cert": {
              "type": "string"
            }
          }
        },
        "verbose": {
          "type": "boolean"
        }
      }
    },
    "version": {
      "type": "string"
    }
  },
  "id": "https://json.schemastore.org/taurus.json",
  "properties": {
    "execution": {
      "$ref": "#/definitions/execution"
    },
    "reporting": {
      "$ref": "#/definitions/reporting"
    },
    "services": {
      "$ref": "#/definitions/services"
    },
    "modules": {
      "$ref": "#/definitions/modules"
    },
    "settings": {
      "$ref": "#/definitions/settings"
    },
    "included-configs": {
      "$ref": "#/definitions/included-configs"
    }
  },
  "type": "object"
}
