1# 2# Schema to validate a YAML file describing a Zephyr test platform 3# 4# We load this with pykwalify 5# (http://pykwalify.readthedocs.io/en/unstable/validation-rules.html), 6# a YAML structure validator, to validate the YAML files that describe 7# Zephyr test platforms 8# 9# The original spec comes from Zephyr's twister script 10# 11schema;scenario-schema: 12 type: map 13 # has to be not-required, otherwise the parser gets 14 # confused and things it never found it 15 required: false 16 mapping: 17 "arch_exclude": 18 type: any 19 required: false 20 "arch_allow": 21 type: any 22 required: false 23 "vendor_exclude": 24 type: seq 25 required: false 26 sequence: 27 - type: str 28 "vendor_allow": 29 type: seq 30 required: false 31 sequence: 32 - type: str 33 "testcases": 34 type: seq 35 required: false 36 sequence: 37 - type: str 38 "build_only": 39 type: bool 40 required: false 41 "build_on_all": 42 type: bool 43 required: false 44 "depends_on": 45 type: any 46 required: false 47 "extra_args": 48 type: any 49 required: false 50 "extra_configs": 51 type: seq 52 required: false 53 sequence: 54 - type: str 55 "extra_conf_files": 56 type: seq 57 required: false 58 sequence: 59 - type: str 60 "extra_overlay_confs": 61 type: seq 62 required: false 63 sequence: 64 - type: str 65 "extra_dtc_overlay_files": 66 type: seq 67 required: false 68 sequence: 69 - type: str 70 "extra_sections": 71 type: any 72 required: false 73 "expect_reboot": 74 type: bool 75 required: false 76 "required_snippets": 77 type: seq 78 required: false 79 sequence: 80 - type: str 81 "filter": 82 type: str 83 required: false 84 "levels": 85 type: seq 86 required: false 87 sequence: 88 - type: str 89 enum: ["smoke", "unit", "integration", "acceptance", "system", "regression"] 90 "integration_platforms": 91 type: seq 92 required: false 93 sequence: 94 - type: str 95 "integration_toolchains": 96 type: seq 97 required: false 98 sequence: 99 - type: str 100 "ignore_faults": 101 type: bool 102 required: false 103 "ignore_qemu_crash": 104 type: bool 105 required: false 106 "harness": 107 type: str 108 required: false 109 "harness_config": 110 type: map 111 required: false 112 mapping: 113 "power_measurements": 114 type: any 115 required: false 116 "shell_commands_file": 117 type: str 118 required: false 119 "shell_commands": 120 type: seq 121 required: false 122 sequence: 123 - type: map 124 mapping: 125 "command": 126 type: str 127 required: true 128 "expected": 129 type: str 130 "display_capture_config": 131 type: str 132 required: false 133 "type": 134 type: str 135 required: false 136 "fixture": 137 type: str 138 required: false 139 "ordered": 140 type: bool 141 required: false 142 "pytest_root": 143 type: seq 144 required: false 145 sequence: 146 - type: str 147 "pytest_args": 148 type: seq 149 required: false 150 sequence: 151 - type: str 152 "pytest_dut_scope": 153 type: str 154 enum: ["function", "class", "module", "package", "session"] 155 required: false 156 "ctest_args": 157 type: seq 158 required: false 159 sequence: 160 - type: str 161 "regex": 162 type: seq 163 required: false 164 sequence: 165 - type: str 166 "robot_testsuite": 167 type: any 168 required: false 169 "robot_option": 170 type: any 171 required: false 172 "record": 173 type: map 174 required: false 175 mapping: 176 "regex": 177 type: seq 178 required: true 179 sequence: 180 - type: str 181 "merge": 182 type: bool 183 required: false 184 "as_json": 185 type: seq 186 required: false 187 sequence: 188 - type: str 189 "bsim_exe_name": 190 type: str 191 required: false 192 "ztest_suite_repeat": 193 type: int 194 required: false 195 "ztest_test_repeat": 196 type: int 197 required: false 198 "ztest_test_shuffle": 199 type: bool 200 required: false 201 "min_ram": 202 type: int 203 required: false 204 "min_flash": 205 type: int 206 required: false 207 "modules": 208 type: seq 209 required: false 210 sequence: 211 - type: str 212 "platform_exclude": 213 type: any 214 required: false 215 "platform_allow": 216 type: any 217 required: false 218 "platform_type": 219 type: seq 220 required: false 221 sequence: 222 - type: str 223 enum: ["mcu", "qemu", "sim", "unit", "native"] 224 "platform_key": 225 required: false 226 type: seq 227 matching: "all" 228 sequence: 229 - type: str 230 "simulation_exclude": 231 type: seq 232 required: false 233 sequence: 234 - type: str 235 enum: 236 [ 237 "qemu", 238 "simics", 239 "xt-sim", 240 "renode", 241 "nsim", 242 "mdb-nsim", 243 "tsim", 244 "armfvp", 245 "native", 246 "custom", 247 ] 248 "tags": 249 type: any 250 required: false 251 "timeout": 252 type: int 253 required: false 254 "toolchain_exclude": 255 type: any 256 required: false 257 "toolchain_allow": 258 type: any 259 required: false 260 "type": 261 type: str 262 enum: ["unit"] 263 "skip": 264 type: bool 265 required: false 266 "slow": 267 type: bool 268 required: false 269 "sysbuild": 270 type: bool 271 required: false 272 273type: map 274mapping: 275 "common": 276 include: scenario-schema 277 # The sample descriptor, if present 278 "sample": 279 type: map 280 required: false 281 mapping: 282 "name": 283 type: str 284 required: true 285 "description": 286 type: str 287 required: false 288 # The list of testcases -- IDK why this is a sequence of 289 # maps maps, shall just be a sequence of maps 290 # maybe it is just an artifact? 291 "tests": 292 type: map 293 required: true 294 matching-rule: "any" 295 mapping: 296 # The key for the testname is any, so 297 # regex;(([a-zA-Z0-9_]+)) for this to work, note below we 298 # make it required: false 299 regex;(([a-zA-Z0-9_]+)): 300 include: scenario-schema 301