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