assert-pre-internal.h: add BT_ASSERT_PRE_VALID_INDEX()
[babeltrace.git] / tests / lib / test_bt_ctf_field_type_validation.c
CommitLineData
0b93f4ea 1/*
50842bdc 2 * test_bt_field_type_validation.c
0b93f4ea
PP
3 *
4 * Babeltrace CTF IR field type validation test
5 *
6 * Copyright (c) 2016 Philippe Proulx <pproulx@efficios.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; under version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 */
21
9d408fca 22#include <babeltrace/ref.h>
2e33ac5a 23#include <babeltrace/ctf-ir/field-types.h>
b011f6b0 24#include <babeltrace/ctf-ir/field-path.h>
0b93f4ea 25#include <babeltrace/ctf-ir/event.h>
272df73e 26#include <babeltrace/ctf-ir/event-class.h>
0b93f4ea
PP
27#include <babeltrace/ctf-ir/stream-class.h>
28#include <babeltrace/ctf-ir/trace.h>
25583cd0 29#include <babeltrace/assert-internal.h>
c55a9f58 30#include <stdbool.h>
0b93f4ea
PP
31#include <string.h>
32#include <stdarg.h>
33#include <glib.h>
34#include "tap/tap.h"
35
36static
3dca2276 37struct bt_field_type *get_good_packet_header_field_type(void)
0b93f4ea
PP
38{
39 /*
40 Generated by bt-ctfirtg using the following input:
41
42 class: struct
43 fields:
44 magic:
45 class: int
46 size: 32
47 uuid:
48 class: array
49 length: 16
50 element-type:
51 class: int
52 size: 8
53 stream_id:
54 class: int
55 size: 32
56 iron:
57 class: struct
58 fields:
59 listen:
60 class: string
61 dust:
62 class: int
63 size: 23
64 parallel:
65 class: enum
66 value-type:
67 class: int
68 size: 10
69 members:
70 - RED
71 - BLUE
72 - YELLOW
73 fire:
74 class: struct
75 fields:
76 word:
77 class: int
78 size: 17
79 rabbit:
80 class: string
81 keen:
82 class: array
83 length: word
84 element-type:
85 class: variant
86 tag: iron.parallel
87 types:
88 RED:
89 class: string
90 BLUE:
91 class: array
92 length: magic
93 element-type:
94 class: int
95 size: 5
96 YELLOW:
97 class: struct
98 report:
99 class: array
100 length: trace.packet.header.iron.dust
101 element-type:
102 class: string
103 group:
104 class: array
105 length: trace.packet.header.stream_id
106 element-type:
107 class: string
108 serious:
109 class: int
110 size: 1
111
112 */
113
50842bdc
PP
114 struct bt_field_type *root = NULL;
115 struct bt_field_type *root_magic = NULL;
116 struct bt_field_type *root_uuid = NULL;
117 struct bt_field_type *root_uuid_elem = NULL;
118 struct bt_field_type *root_stream_id = NULL;
119 struct bt_field_type *root_iron = NULL;
120 struct bt_field_type *root_iron_listen = NULL;
121 struct bt_field_type *root_iron_dust = NULL;
122 struct bt_field_type *root_iron_parallel = NULL;
123 struct bt_field_type *root_iron_parallel_int = NULL;
124 struct bt_field_type *root_iron_fire = NULL;
125 struct bt_field_type *root_iron_fire_word = NULL;
126 struct bt_field_type *root_iron_fire_rabbit = NULL;
127 struct bt_field_type *root_iron_fire_keen = NULL;
128 struct bt_field_type *root_iron_fire_keen_elem = NULL;
129 struct bt_field_type *root_iron_fire_keen_elem_RED = NULL;
130 struct bt_field_type *root_iron_fire_keen_elem_BLUE = NULL;
131 struct bt_field_type *root_iron_fire_keen_elem_BLUE_elem = NULL;
132 struct bt_field_type *root_iron_fire_keen_elem_YELLOW = NULL;
133 struct bt_field_type *root_iron_report = NULL;
134 struct bt_field_type *root_iron_report_elem = NULL;
135 struct bt_field_type *root_iron_group = NULL;
136 struct bt_field_type *root_iron_group_elem = NULL;
137 struct bt_field_type *root_serious = NULL;
0b93f4ea
PP
138
139 int ret;
50842bdc 140 root = bt_field_type_structure_create();
25583cd0 141 BT_ASSERT(root);
50842bdc 142 ret = bt_field_type_set_alignment(root, 8);
25583cd0 143 BT_ASSERT(ret == 0);
50842bdc 144 root_magic = bt_field_type_integer_create(32);
25583cd0 145 BT_ASSERT(root_magic);
3dca2276 146 ret = bt_field_type_integer_set_is_signed(root_magic, 0);
25583cd0 147 BT_ASSERT(ret == 0);
50842bdc 148 ret = bt_field_type_integer_set_base(root_magic, 10);
25583cd0 149 BT_ASSERT(ret == 0);
50842bdc 150 ret = bt_field_type_integer_set_encoding(root_magic, BT_STRING_ENCODING_NONE);
25583cd0 151 BT_ASSERT(ret == 0);
50842bdc 152 ret = bt_field_type_set_byte_order(root_magic, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 153 BT_ASSERT(ret == 0);
50842bdc 154 ret = bt_field_type_set_alignment(root_magic, 8);
25583cd0 155 BT_ASSERT(ret == 0);
50842bdc 156 ret = bt_field_type_structure_add_field(root, root_magic, "magic");
25583cd0 157 BT_ASSERT(ret == 0);
50842bdc 158 root_uuid_elem = bt_field_type_integer_create(8);
25583cd0 159 BT_ASSERT(root_uuid_elem);
3dca2276 160 ret = bt_field_type_integer_set_is_signed(root_uuid_elem, 0);
25583cd0 161 BT_ASSERT(ret == 0);
50842bdc 162 ret = bt_field_type_integer_set_base(root_uuid_elem, 10);
25583cd0 163 BT_ASSERT(ret == 0);
50842bdc 164 ret = bt_field_type_integer_set_encoding(root_uuid_elem, BT_STRING_ENCODING_NONE);
25583cd0 165 BT_ASSERT(ret == 0);
50842bdc 166 ret = bt_field_type_set_byte_order(root_uuid_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 167 BT_ASSERT(ret == 0);
50842bdc 168 ret = bt_field_type_set_alignment(root_uuid_elem, 8);
25583cd0 169 BT_ASSERT(ret == 0);
50842bdc 170 root_uuid = bt_field_type_array_create(root_uuid_elem, 16);
25583cd0 171 BT_ASSERT(root_uuid);
50842bdc 172 ret = bt_field_type_structure_add_field(root, root_uuid, "uuid");
25583cd0 173 BT_ASSERT(ret == 0);
50842bdc 174 root_stream_id = bt_field_type_integer_create(32);
25583cd0 175 BT_ASSERT(root_stream_id);
3dca2276 176 ret = bt_field_type_integer_set_is_signed(root_stream_id, 0);
25583cd0 177 BT_ASSERT(ret == 0);
50842bdc 178 ret = bt_field_type_integer_set_base(root_stream_id, 10);
25583cd0 179 BT_ASSERT(ret == 0);
50842bdc 180 ret = bt_field_type_integer_set_encoding(root_stream_id, BT_STRING_ENCODING_NONE);
25583cd0 181 BT_ASSERT(ret == 0);
50842bdc 182 ret = bt_field_type_set_byte_order(root_stream_id, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 183 BT_ASSERT(ret == 0);
50842bdc 184 ret = bt_field_type_set_alignment(root_stream_id, 8);
25583cd0 185 BT_ASSERT(ret == 0);
50842bdc 186 ret = bt_field_type_structure_add_field(root, root_stream_id, "stream_id");
25583cd0 187 BT_ASSERT(ret == 0);
50842bdc 188 root_iron = bt_field_type_structure_create();
25583cd0 189 BT_ASSERT(root_iron);
50842bdc 190 ret = bt_field_type_set_alignment(root_iron, 8);
25583cd0 191 BT_ASSERT(ret == 0);
50842bdc 192 root_iron_listen = bt_field_type_string_create();
25583cd0 193 BT_ASSERT(root_iron_listen);
50842bdc 194 ret = bt_field_type_string_set_encoding(root_iron_listen, BT_STRING_ENCODING_UTF8);
25583cd0 195 BT_ASSERT(ret == 0);
50842bdc 196 ret = bt_field_type_structure_add_field(root_iron, root_iron_listen, "listen");
25583cd0 197 BT_ASSERT(ret == 0);
50842bdc 198 root_iron_dust = bt_field_type_integer_create(23);
25583cd0 199 BT_ASSERT(root_iron_dust);
3dca2276 200 ret = bt_field_type_integer_set_is_signed(root_iron_dust, 0);
25583cd0 201 BT_ASSERT(ret == 0);
50842bdc 202 ret = bt_field_type_integer_set_base(root_iron_dust, 10);
25583cd0 203 BT_ASSERT(ret == 0);
50842bdc 204 ret = bt_field_type_integer_set_encoding(root_iron_dust, BT_STRING_ENCODING_NONE);
25583cd0 205 BT_ASSERT(ret == 0);
50842bdc 206 ret = bt_field_type_set_byte_order(root_iron_dust, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 207 BT_ASSERT(ret == 0);
50842bdc 208 ret = bt_field_type_set_alignment(root_iron_dust, 1);
25583cd0 209 BT_ASSERT(ret == 0);
50842bdc 210 ret = bt_field_type_structure_add_field(root_iron, root_iron_dust, "dust");
25583cd0 211 BT_ASSERT(ret == 0);
50842bdc 212 root_iron_parallel_int = bt_field_type_integer_create(10);
25583cd0 213 BT_ASSERT(root_iron_parallel_int);
3dca2276 214 ret = bt_field_type_integer_set_is_signed(root_iron_parallel_int, 0);
25583cd0 215 BT_ASSERT(ret == 0);
50842bdc 216 ret = bt_field_type_integer_set_base(root_iron_parallel_int, 10);
25583cd0 217 BT_ASSERT(ret == 0);
50842bdc 218 ret = bt_field_type_integer_set_encoding(root_iron_parallel_int, BT_STRING_ENCODING_NONE);
25583cd0 219 BT_ASSERT(ret == 0);
50842bdc 220 ret = bt_field_type_set_byte_order(root_iron_parallel_int, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 221 BT_ASSERT(ret == 0);
50842bdc 222 ret = bt_field_type_set_alignment(root_iron_parallel_int, 1);
25583cd0 223 BT_ASSERT(ret == 0);
50842bdc 224 root_iron_parallel = bt_field_type_enumeration_create(root_iron_parallel_int);
25583cd0 225 BT_ASSERT(root_iron_parallel);
3dca2276 226 ret = bt_field_type_enumeration_unsigned_add_mapping(root_iron_parallel, "RED", 0, 0);
25583cd0 227 BT_ASSERT(ret == 0);
3dca2276 228 ret = bt_field_type_enumeration_unsigned_add_mapping(root_iron_parallel, "BLUE", 1, 1);
25583cd0 229 BT_ASSERT(ret == 0);
3dca2276 230 ret = bt_field_type_enumeration_unsigned_add_mapping(root_iron_parallel, "YELLOW", 2, 2);
25583cd0 231 BT_ASSERT(ret == 0);
50842bdc 232 ret = bt_field_type_structure_add_field(root_iron, root_iron_parallel, "parallel");
25583cd0 233 BT_ASSERT(ret == 0);
50842bdc 234 root_iron_fire = bt_field_type_structure_create();
25583cd0 235 BT_ASSERT(root_iron_fire);
50842bdc 236 ret = bt_field_type_set_alignment(root_iron_fire, 8);
25583cd0 237 BT_ASSERT(ret == 0);
50842bdc 238 root_iron_fire_word = bt_field_type_integer_create(17);
25583cd0 239 BT_ASSERT(root_iron_fire_word);
3dca2276 240 ret = bt_field_type_integer_set_is_signed(root_iron_fire_word, 0);
25583cd0 241 BT_ASSERT(ret == 0);
50842bdc 242 ret = bt_field_type_integer_set_base(root_iron_fire_word, 10);
25583cd0 243 BT_ASSERT(ret == 0);
50842bdc 244 ret = bt_field_type_integer_set_encoding(root_iron_fire_word, BT_STRING_ENCODING_NONE);
25583cd0 245 BT_ASSERT(ret == 0);
50842bdc 246 ret = bt_field_type_set_byte_order(root_iron_fire_word, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 247 BT_ASSERT(ret == 0);
50842bdc 248 ret = bt_field_type_set_alignment(root_iron_fire_word, 1);
25583cd0 249 BT_ASSERT(ret == 0);
50842bdc 250 ret = bt_field_type_structure_add_field(root_iron_fire, root_iron_fire_word, "word");
25583cd0 251 BT_ASSERT(ret == 0);
50842bdc 252 root_iron_fire_rabbit = bt_field_type_string_create();
25583cd0 253 BT_ASSERT(root_iron_fire_rabbit);
50842bdc 254 ret = bt_field_type_string_set_encoding(root_iron_fire_rabbit, BT_STRING_ENCODING_UTF8);
25583cd0 255 BT_ASSERT(ret == 0);
50842bdc 256 ret = bt_field_type_structure_add_field(root_iron_fire, root_iron_fire_rabbit, "rabbit");
25583cd0 257 BT_ASSERT(ret == 0);
50842bdc 258 root_iron_fire_keen_elem = bt_field_type_variant_create(NULL, "iron.parallel");
25583cd0 259 BT_ASSERT(root_iron_fire_keen_elem);
50842bdc 260 root_iron_fire_keen_elem_RED = bt_field_type_string_create();
25583cd0 261 BT_ASSERT(root_iron_fire_keen_elem_RED);
50842bdc 262 ret = bt_field_type_string_set_encoding(root_iron_fire_keen_elem_RED, BT_STRING_ENCODING_UTF8);
25583cd0 263 BT_ASSERT(ret == 0);
50842bdc 264 ret = bt_field_type_variant_add_field(root_iron_fire_keen_elem, root_iron_fire_keen_elem_RED, "RED");
25583cd0 265 BT_ASSERT(ret == 0);
50842bdc 266 root_iron_fire_keen_elem_BLUE_elem = bt_field_type_integer_create(5);
25583cd0 267 BT_ASSERT(root_iron_fire_keen_elem_BLUE_elem);
3dca2276 268 ret = bt_field_type_integer_set_is_signed(root_iron_fire_keen_elem_BLUE_elem, 0);
25583cd0 269 BT_ASSERT(ret == 0);
50842bdc 270 ret = bt_field_type_integer_set_base(root_iron_fire_keen_elem_BLUE_elem, 10);
25583cd0 271 BT_ASSERT(ret == 0);
50842bdc 272 ret = bt_field_type_integer_set_encoding(root_iron_fire_keen_elem_BLUE_elem, BT_STRING_ENCODING_NONE);
25583cd0 273 BT_ASSERT(ret == 0);
50842bdc 274 ret = bt_field_type_set_byte_order(root_iron_fire_keen_elem_BLUE_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 275 BT_ASSERT(ret == 0);
50842bdc 276 ret = bt_field_type_set_alignment(root_iron_fire_keen_elem_BLUE_elem, 1);
25583cd0 277 BT_ASSERT(ret == 0);
50842bdc 278 root_iron_fire_keen_elem_BLUE = bt_field_type_sequence_create(root_iron_fire_keen_elem_BLUE_elem, "magic");
25583cd0 279 BT_ASSERT(root_iron_fire_keen_elem_BLUE);
50842bdc 280 ret = bt_field_type_variant_add_field(root_iron_fire_keen_elem, root_iron_fire_keen_elem_BLUE, "BLUE");
25583cd0 281 BT_ASSERT(ret == 0);
50842bdc 282 root_iron_fire_keen_elem_YELLOW = bt_field_type_structure_create();
25583cd0 283 BT_ASSERT(root_iron_fire_keen_elem_YELLOW);
50842bdc 284 ret = bt_field_type_set_alignment(root_iron_fire_keen_elem_YELLOW, 1);
25583cd0 285 BT_ASSERT(ret == 0);
50842bdc 286 ret = bt_field_type_variant_add_field(root_iron_fire_keen_elem, root_iron_fire_keen_elem_YELLOW, "YELLOW");
25583cd0 287 BT_ASSERT(ret == 0);
50842bdc 288 root_iron_fire_keen = bt_field_type_sequence_create(root_iron_fire_keen_elem, "word");
25583cd0 289 BT_ASSERT(root_iron_fire_keen);
50842bdc 290 ret = bt_field_type_structure_add_field(root_iron_fire, root_iron_fire_keen, "keen");
25583cd0 291 BT_ASSERT(ret == 0);
50842bdc 292 ret = bt_field_type_structure_add_field(root_iron, root_iron_fire, "fire");
25583cd0 293 BT_ASSERT(ret == 0);
50842bdc 294 root_iron_report_elem = bt_field_type_string_create();
25583cd0 295 BT_ASSERT(root_iron_report_elem);
50842bdc 296 ret = bt_field_type_string_set_encoding(root_iron_report_elem, BT_STRING_ENCODING_UTF8);
25583cd0 297 BT_ASSERT(ret == 0);
50842bdc 298 root_iron_report = bt_field_type_sequence_create(root_iron_report_elem, "trace.packet.header.iron.dust");
25583cd0 299 BT_ASSERT(root_iron_report);
50842bdc 300 ret = bt_field_type_structure_add_field(root_iron, root_iron_report, "report");
25583cd0 301 BT_ASSERT(ret == 0);
50842bdc 302 root_iron_group_elem = bt_field_type_string_create();
25583cd0 303 BT_ASSERT(root_iron_group_elem);
50842bdc 304 ret = bt_field_type_string_set_encoding(root_iron_group_elem, BT_STRING_ENCODING_UTF8);
25583cd0 305 BT_ASSERT(ret == 0);
50842bdc 306 root_iron_group = bt_field_type_sequence_create(root_iron_group_elem, "trace.packet.header.stream_id");
25583cd0 307 BT_ASSERT(root_iron_group);
50842bdc 308 ret = bt_field_type_structure_add_field(root_iron, root_iron_group, "group");
25583cd0 309 BT_ASSERT(ret == 0);
50842bdc 310 ret = bt_field_type_structure_add_field(root, root_iron, "iron");
25583cd0 311 BT_ASSERT(ret == 0);
50842bdc 312 root_serious = bt_field_type_integer_create(1);
25583cd0 313 BT_ASSERT(root_serious);
3dca2276 314 ret = bt_field_type_integer_set_is_signed(root_serious, 0);
25583cd0 315 BT_ASSERT(ret == 0);
50842bdc 316 ret = bt_field_type_integer_set_base(root_serious, 10);
25583cd0 317 BT_ASSERT(ret == 0);
50842bdc 318 ret = bt_field_type_integer_set_encoding(root_serious, BT_STRING_ENCODING_NONE);
25583cd0 319 BT_ASSERT(ret == 0);
50842bdc 320 ret = bt_field_type_set_byte_order(root_serious, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 321 BT_ASSERT(ret == 0);
50842bdc 322 ret = bt_field_type_set_alignment(root_serious, 1);
25583cd0 323 BT_ASSERT(ret == 0);
50842bdc 324 ret = bt_field_type_structure_add_field(root, root_serious, "serious");
25583cd0 325 BT_ASSERT(ret == 0);
0b93f4ea
PP
326
327 BT_PUT(root_magic);
328 BT_PUT(root_uuid);
329 BT_PUT(root_uuid_elem);
330 BT_PUT(root_stream_id);
331 BT_PUT(root_iron);
332 BT_PUT(root_iron_listen);
333 BT_PUT(root_iron_dust);
334 BT_PUT(root_iron_parallel);
335 BT_PUT(root_iron_parallel_int);
336 BT_PUT(root_iron_fire);
337 BT_PUT(root_iron_fire_word);
338 BT_PUT(root_iron_fire_rabbit);
339 BT_PUT(root_iron_fire_keen);
340 BT_PUT(root_iron_fire_keen_elem);
341 BT_PUT(root_iron_fire_keen_elem_RED);
342 BT_PUT(root_iron_fire_keen_elem_BLUE);
343 BT_PUT(root_iron_fire_keen_elem_BLUE_elem);
344 BT_PUT(root_iron_fire_keen_elem_YELLOW);
345 BT_PUT(root_iron_report);
346 BT_PUT(root_iron_report_elem);
347 BT_PUT(root_iron_group);
348 BT_PUT(root_iron_group_elem);
349 BT_PUT(root_serious);
350
351 return root;
352}
353
354static
3dca2276 355struct bt_field_type *get_good_packet_context_field_type(void)
0b93f4ea
PP
356{
357 /*
358 Generated by bt-ctfirtg using the following input:
359
360 class: struct
361 fields:
362 placid:
363 class: int
364 size: 32
365 meow:
366 class: string
367 serious:
368 class: int
369 size: 11
370 naive:
371 class: array
372 length: 17
373 element-type:
374 class: array
375 length: placid
376 element-type:
377 class: string
378 clover:
379 class: struct
380 fields:
381 oval:
382 class: int
383 size: 17
384 whole:
385 class: variant
386 tag: iron.parallel
387 types:
388 BLUE:
389 class: array
390 length: trace.packet.header.iron.fire.word
391 element-type:
392 class: string
393 RED:
394 class: int
395 size: 44
396 YELLOW:
397 class: string
398 egg:
399 class: array
400 length: stream.packet.context.clover.oval
401 element-type:
402 class: int
403 size: 55
404 square:
405 class: enum
406 value-type:
407 class: int
408 size: 12
409 members:
410 - YOUNG
411 - OLD
412 useful:
413 class: array
414 length: serious
415 element-type:
416 class: int
417 size: 2
418 tart:
419 class: string
420
421 */
422
50842bdc
PP
423 struct bt_field_type *root = NULL;
424 struct bt_field_type *root_placid = NULL;
425 struct bt_field_type *root_meow = NULL;
426 struct bt_field_type *root_serious = NULL;
427 struct bt_field_type *root_naive = NULL;
428 struct bt_field_type *root_naive_elem = NULL;
429 struct bt_field_type *root_naive_elem_elem = NULL;
430 struct bt_field_type *root_clover = NULL;
431 struct bt_field_type *root_clover_oval = NULL;
432 struct bt_field_type *root_clover_whole = NULL;
433 struct bt_field_type *root_clover_whole_BLUE = NULL;
434 struct bt_field_type *root_clover_whole_BLUE_elem = NULL;
435 struct bt_field_type *root_clover_whole_RED = NULL;
436 struct bt_field_type *root_clover_whole_YELLOW = NULL;
437 struct bt_field_type *root_clover_egg = NULL;
438 struct bt_field_type *root_clover_egg_elem = NULL;
439 struct bt_field_type *root_clover_square = NULL;
440 struct bt_field_type *root_clover_square_int = NULL;
441 struct bt_field_type *root_clover_useful = NULL;
442 struct bt_field_type *root_clover_useful_elem = NULL;
443 struct bt_field_type *root_tart = NULL;
0b93f4ea
PP
444
445 int ret;
50842bdc 446 root = bt_field_type_structure_create();
25583cd0 447 BT_ASSERT(root);
50842bdc 448 ret = bt_field_type_set_alignment(root, 8);
25583cd0 449 BT_ASSERT(ret == 0);
50842bdc 450 root_placid = bt_field_type_integer_create(32);
25583cd0 451 BT_ASSERT(root_placid);
3dca2276 452 ret = bt_field_type_integer_set_is_signed(root_placid, 0);
25583cd0 453 BT_ASSERT(ret == 0);
50842bdc 454 ret = bt_field_type_integer_set_base(root_placid, 10);
25583cd0 455 BT_ASSERT(ret == 0);
50842bdc 456 ret = bt_field_type_integer_set_encoding(root_placid, BT_STRING_ENCODING_NONE);
25583cd0 457 BT_ASSERT(ret == 0);
50842bdc 458 ret = bt_field_type_set_byte_order(root_placid, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 459 BT_ASSERT(ret == 0);
50842bdc 460 ret = bt_field_type_set_alignment(root_placid, 8);
25583cd0 461 BT_ASSERT(ret == 0);
50842bdc 462 ret = bt_field_type_structure_add_field(root, root_placid, "placid");
25583cd0 463 BT_ASSERT(ret == 0);
50842bdc 464 root_meow = bt_field_type_string_create();
25583cd0 465 BT_ASSERT(root_meow);
50842bdc 466 ret = bt_field_type_string_set_encoding(root_meow, BT_STRING_ENCODING_UTF8);
25583cd0 467 BT_ASSERT(ret == 0);
50842bdc 468 ret = bt_field_type_structure_add_field(root, root_meow, "meow");
25583cd0 469 BT_ASSERT(ret == 0);
50842bdc 470 root_serious = bt_field_type_integer_create(11);
25583cd0 471 BT_ASSERT(root_serious);
3dca2276 472 ret = bt_field_type_integer_set_is_signed(root_serious, 0);
25583cd0 473 BT_ASSERT(ret == 0);
50842bdc 474 ret = bt_field_type_integer_set_base(root_serious, 10);
25583cd0 475 BT_ASSERT(ret == 0);
50842bdc 476 ret = bt_field_type_integer_set_encoding(root_serious, BT_STRING_ENCODING_NONE);
25583cd0 477 BT_ASSERT(ret == 0);
50842bdc 478 ret = bt_field_type_set_byte_order(root_serious, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 479 BT_ASSERT(ret == 0);
50842bdc 480 ret = bt_field_type_set_alignment(root_serious, 1);
25583cd0 481 BT_ASSERT(ret == 0);
50842bdc 482 ret = bt_field_type_structure_add_field(root, root_serious, "serious");
25583cd0 483 BT_ASSERT(ret == 0);
50842bdc 484 root_naive_elem_elem = bt_field_type_string_create();
25583cd0 485 BT_ASSERT(root_naive_elem_elem);
50842bdc 486 ret = bt_field_type_string_set_encoding(root_naive_elem_elem, BT_STRING_ENCODING_UTF8);
25583cd0 487 BT_ASSERT(ret == 0);
50842bdc 488 root_naive_elem = bt_field_type_sequence_create(root_naive_elem_elem, "placid");
25583cd0 489 BT_ASSERT(root_naive_elem);
50842bdc 490 root_naive = bt_field_type_array_create(root_naive_elem, 17);
25583cd0 491 BT_ASSERT(root_naive);
50842bdc 492 ret = bt_field_type_structure_add_field(root, root_naive, "naive");
25583cd0 493 BT_ASSERT(ret == 0);
50842bdc 494 root_clover = bt_field_type_structure_create();
25583cd0 495 BT_ASSERT(root_clover);
50842bdc 496 ret = bt_field_type_set_alignment(root_clover, 1);
25583cd0 497 BT_ASSERT(ret == 0);
50842bdc 498 root_clover_oval = bt_field_type_integer_create(17);
25583cd0 499 BT_ASSERT(root_clover_oval);
3dca2276 500 ret = bt_field_type_integer_set_is_signed(root_clover_oval, 0);
25583cd0 501 BT_ASSERT(ret == 0);
50842bdc 502 ret = bt_field_type_integer_set_base(root_clover_oval, 10);
25583cd0 503 BT_ASSERT(ret == 0);
50842bdc 504 ret = bt_field_type_integer_set_encoding(root_clover_oval, BT_STRING_ENCODING_NONE);
25583cd0 505 BT_ASSERT(ret == 0);
50842bdc 506 ret = bt_field_type_set_byte_order(root_clover_oval, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 507 BT_ASSERT(ret == 0);
50842bdc 508 ret = bt_field_type_set_alignment(root_clover_oval, 1);
25583cd0 509 BT_ASSERT(ret == 0);
50842bdc 510 ret = bt_field_type_structure_add_field(root_clover, root_clover_oval, "oval");
25583cd0 511 BT_ASSERT(ret == 0);
50842bdc 512 root_clover_whole = bt_field_type_variant_create(NULL, "iron.parallel");
25583cd0 513 BT_ASSERT(root_clover_whole);
50842bdc 514 root_clover_whole_BLUE_elem = bt_field_type_string_create();
25583cd0 515 BT_ASSERT(root_clover_whole_BLUE_elem);
50842bdc 516 ret = bt_field_type_string_set_encoding(root_clover_whole_BLUE_elem, BT_STRING_ENCODING_UTF8);
25583cd0 517 BT_ASSERT(ret == 0);
50842bdc 518 root_clover_whole_BLUE = bt_field_type_sequence_create(root_clover_whole_BLUE_elem, "trace.packet.header.iron.fire.word");
25583cd0 519 BT_ASSERT(root_clover_whole_BLUE);
50842bdc 520 ret = bt_field_type_variant_add_field(root_clover_whole, root_clover_whole_BLUE, "BLUE");
25583cd0 521 BT_ASSERT(ret == 0);
50842bdc 522 root_clover_whole_RED = bt_field_type_integer_create(44);
25583cd0 523 BT_ASSERT(root_clover_whole_RED);
3dca2276 524 ret = bt_field_type_integer_set_is_signed(root_clover_whole_RED, 0);
25583cd0 525 BT_ASSERT(ret == 0);
50842bdc 526 ret = bt_field_type_integer_set_base(root_clover_whole_RED, 10);
25583cd0 527 BT_ASSERT(ret == 0);
50842bdc 528 ret = bt_field_type_integer_set_encoding(root_clover_whole_RED, BT_STRING_ENCODING_NONE);
25583cd0 529 BT_ASSERT(ret == 0);
50842bdc 530 ret = bt_field_type_set_byte_order(root_clover_whole_RED, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 531 BT_ASSERT(ret == 0);
50842bdc 532 ret = bt_field_type_set_alignment(root_clover_whole_RED, 1);
25583cd0 533 BT_ASSERT(ret == 0);
50842bdc 534 ret = bt_field_type_variant_add_field(root_clover_whole, root_clover_whole_RED, "RED");
25583cd0 535 BT_ASSERT(ret == 0);
50842bdc 536 root_clover_whole_YELLOW = bt_field_type_string_create();
25583cd0 537 BT_ASSERT(root_clover_whole_YELLOW);
50842bdc 538 ret = bt_field_type_string_set_encoding(root_clover_whole_YELLOW, BT_STRING_ENCODING_UTF8);
25583cd0 539 BT_ASSERT(ret == 0);
50842bdc 540 ret = bt_field_type_variant_add_field(root_clover_whole, root_clover_whole_YELLOW, "YELLOW");
25583cd0 541 BT_ASSERT(ret == 0);
50842bdc 542 ret = bt_field_type_structure_add_field(root_clover, root_clover_whole, "whole");
25583cd0 543 BT_ASSERT(ret == 0);
50842bdc 544 root_clover_egg_elem = bt_field_type_integer_create(55);
25583cd0 545 BT_ASSERT(root_clover_egg_elem);
3dca2276 546 ret = bt_field_type_integer_set_is_signed(root_clover_egg_elem, 0);
25583cd0 547 BT_ASSERT(ret == 0);
50842bdc 548 ret = bt_field_type_integer_set_base(root_clover_egg_elem, 10);
25583cd0 549 BT_ASSERT(ret == 0);
50842bdc 550 ret = bt_field_type_integer_set_encoding(root_clover_egg_elem, BT_STRING_ENCODING_NONE);
25583cd0 551 BT_ASSERT(ret == 0);
50842bdc 552 ret = bt_field_type_set_byte_order(root_clover_egg_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 553 BT_ASSERT(ret == 0);
50842bdc 554 ret = bt_field_type_set_alignment(root_clover_egg_elem, 1);
25583cd0 555 BT_ASSERT(ret == 0);
50842bdc 556 root_clover_egg = bt_field_type_sequence_create(root_clover_egg_elem, "stream.packet.context.clover.oval");
25583cd0 557 BT_ASSERT(root_clover_egg);
50842bdc 558 ret = bt_field_type_structure_add_field(root_clover, root_clover_egg, "egg");
25583cd0 559 BT_ASSERT(ret == 0);
50842bdc 560 root_clover_square_int = bt_field_type_integer_create(12);
25583cd0 561 BT_ASSERT(root_clover_square_int);
3dca2276 562 ret = bt_field_type_integer_set_is_signed(root_clover_square_int, 0);
25583cd0 563 BT_ASSERT(ret == 0);
50842bdc 564 ret = bt_field_type_integer_set_base(root_clover_square_int, 10);
25583cd0 565 BT_ASSERT(ret == 0);
50842bdc 566 ret = bt_field_type_integer_set_encoding(root_clover_square_int, BT_STRING_ENCODING_NONE);
25583cd0 567 BT_ASSERT(ret == 0);
50842bdc 568 ret = bt_field_type_set_byte_order(root_clover_square_int, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 569 BT_ASSERT(ret == 0);
50842bdc 570 ret = bt_field_type_set_alignment(root_clover_square_int, 1);
25583cd0 571 BT_ASSERT(ret == 0);
50842bdc 572 root_clover_square = bt_field_type_enumeration_create(root_clover_square_int);
25583cd0 573 BT_ASSERT(root_clover_square);
3dca2276 574 ret = bt_field_type_enumeration_unsigned_add_mapping(root_clover_square, "YOUNG", 0, 0);
25583cd0 575 BT_ASSERT(ret == 0);
3dca2276 576 ret = bt_field_type_enumeration_unsigned_add_mapping(root_clover_square, "OLD", 1, 1);
25583cd0 577 BT_ASSERT(ret == 0);
50842bdc 578 ret = bt_field_type_structure_add_field(root_clover, root_clover_square, "square");
25583cd0 579 BT_ASSERT(ret == 0);
50842bdc 580 root_clover_useful_elem = bt_field_type_integer_create(2);
25583cd0 581 BT_ASSERT(root_clover_useful_elem);
3dca2276 582 ret = bt_field_type_integer_set_is_signed(root_clover_useful_elem, 0);
25583cd0 583 BT_ASSERT(ret == 0);
50842bdc 584 ret = bt_field_type_integer_set_base(root_clover_useful_elem, 10);
25583cd0 585 BT_ASSERT(ret == 0);
50842bdc 586 ret = bt_field_type_integer_set_encoding(root_clover_useful_elem, BT_STRING_ENCODING_NONE);
25583cd0 587 BT_ASSERT(ret == 0);
50842bdc 588 ret = bt_field_type_set_byte_order(root_clover_useful_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 589 BT_ASSERT(ret == 0);
50842bdc 590 ret = bt_field_type_set_alignment(root_clover_useful_elem, 1);
25583cd0 591 BT_ASSERT(ret == 0);
50842bdc 592 root_clover_useful = bt_field_type_sequence_create(root_clover_useful_elem, "serious");
25583cd0 593 BT_ASSERT(root_clover_useful);
50842bdc 594 ret = bt_field_type_structure_add_field(root_clover, root_clover_useful, "useful");
25583cd0 595 BT_ASSERT(ret == 0);
50842bdc 596 ret = bt_field_type_structure_add_field(root, root_clover, "clover");
25583cd0 597 BT_ASSERT(ret == 0);
50842bdc 598 root_tart = bt_field_type_string_create();
25583cd0 599 BT_ASSERT(root_tart);
50842bdc 600 ret = bt_field_type_string_set_encoding(root_tart, BT_STRING_ENCODING_UTF8);
25583cd0 601 BT_ASSERT(ret == 0);
50842bdc 602 ret = bt_field_type_structure_add_field(root, root_tart, "tart");
25583cd0 603 BT_ASSERT(ret == 0);
0b93f4ea
PP
604
605 BT_PUT(root_placid);
606 BT_PUT(root_meow);
607 BT_PUT(root_serious);
608 BT_PUT(root_naive);
609 BT_PUT(root_naive_elem);
610 BT_PUT(root_naive_elem_elem);
611 BT_PUT(root_clover);
612 BT_PUT(root_clover_oval);
613 BT_PUT(root_clover_whole);
614 BT_PUT(root_clover_whole_BLUE);
615 BT_PUT(root_clover_whole_BLUE_elem);
616 BT_PUT(root_clover_whole_RED);
617 BT_PUT(root_clover_whole_YELLOW);
618 BT_PUT(root_clover_egg);
619 BT_PUT(root_clover_egg_elem);
620 BT_PUT(root_clover_square);
621 BT_PUT(root_clover_square_int);
622 BT_PUT(root_clover_useful);
623 BT_PUT(root_clover_useful_elem);
624 BT_PUT(root_tart);
625
626 return root;
627}
628
629
630static
3dca2276 631struct bt_field_type *get_good_event_header_field_type(void)
0b93f4ea
PP
632{
633 /*
634 Generated by bt-ctfirtg using the following input:
635
636 class: struct
637 fields:
638 id:
639 class: int
640 size: 17
641 timestamp:
642 class: int
643 size: 64
644 action:
645 class: struct
646 fields:
647 special:
648 class: int
649 size: 17
650 lucky:
651 class: array
652 length: stream.packet.context.placid
653 element-type:
654 class: string
655 dream:
656 class: string
657 grandiose:
658 class: array
659 length: trace.packet.header.serious
660 element-type:
661 class: int
662 size: 3
663 stiff:
664 class: array
665 length: clover.whole.RED
666 element-type:
667 class: string
668 fruit:
669 class: struct
670 fields:
671 apple:
672 class: array
673 length: action.special
674 element-type:
675 class: int
676 size: 5
677
678 */
679
50842bdc
PP
680 struct bt_field_type *root = NULL;
681 struct bt_field_type *root_id = NULL;
682 struct bt_field_type *root_timestamp = NULL;
683 struct bt_field_type *root_action = NULL;
684 struct bt_field_type *root_action_special = NULL;
685 struct bt_field_type *root_action_lucky = NULL;
686 struct bt_field_type *root_action_lucky_elem = NULL;
687 struct bt_field_type *root_action_dream = NULL;
688 struct bt_field_type *root_action_grandiose = NULL;
689 struct bt_field_type *root_action_grandiose_elem = NULL;
690 struct bt_field_type *root_stiff = NULL;
691 struct bt_field_type *root_stiff_elem = NULL;
692 struct bt_field_type *root_fruit = NULL;
693 struct bt_field_type *root_fruit_apple = NULL;
694 struct bt_field_type *root_fruit_apple_elem = NULL;
0b93f4ea
PP
695
696 int ret;
50842bdc 697 root = bt_field_type_structure_create();
25583cd0 698 BT_ASSERT(root);
50842bdc 699 ret = bt_field_type_set_alignment(root, 8);
25583cd0 700 BT_ASSERT(ret == 0);
50842bdc 701 root_id = bt_field_type_integer_create(17);
25583cd0 702 BT_ASSERT(root_id);
3dca2276 703 ret = bt_field_type_integer_set_is_signed(root_id, 0);
25583cd0 704 BT_ASSERT(ret == 0);
50842bdc 705 ret = bt_field_type_integer_set_base(root_id, 10);
25583cd0 706 BT_ASSERT(ret == 0);
50842bdc 707 ret = bt_field_type_integer_set_encoding(root_id, BT_STRING_ENCODING_NONE);
25583cd0 708 BT_ASSERT(ret == 0);
50842bdc 709 ret = bt_field_type_set_byte_order(root_id, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 710 BT_ASSERT(ret == 0);
50842bdc 711 ret = bt_field_type_set_alignment(root_id, 1);
25583cd0 712 BT_ASSERT(ret == 0);
50842bdc 713 ret = bt_field_type_structure_add_field(root, root_id, "id");
25583cd0 714 BT_ASSERT(ret == 0);
50842bdc 715 root_timestamp = bt_field_type_integer_create(64);
25583cd0 716 BT_ASSERT(root_timestamp);
3dca2276 717 ret = bt_field_type_integer_set_is_signed(root_timestamp, 0);
25583cd0 718 BT_ASSERT(ret == 0);
50842bdc 719 ret = bt_field_type_integer_set_base(root_timestamp, 10);
25583cd0 720 BT_ASSERT(ret == 0);
50842bdc 721 ret = bt_field_type_integer_set_encoding(root_timestamp, BT_STRING_ENCODING_NONE);
25583cd0 722 BT_ASSERT(ret == 0);
50842bdc 723 ret = bt_field_type_set_byte_order(root_timestamp, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 724 BT_ASSERT(ret == 0);
50842bdc 725 ret = bt_field_type_set_alignment(root_timestamp, 8);
25583cd0 726 BT_ASSERT(ret == 0);
50842bdc 727 ret = bt_field_type_structure_add_field(root, root_timestamp, "timestamp");
25583cd0 728 BT_ASSERT(ret == 0);
50842bdc 729 root_action = bt_field_type_structure_create();
25583cd0 730 BT_ASSERT(root_action);
50842bdc 731 ret = bt_field_type_set_alignment(root_action, 8);
25583cd0 732 BT_ASSERT(ret == 0);
50842bdc 733 root_action_special = bt_field_type_integer_create(17);
25583cd0 734 BT_ASSERT(root_action_special);
3dca2276 735 ret = bt_field_type_integer_set_is_signed(root_action_special, 0);
25583cd0 736 BT_ASSERT(ret == 0);
50842bdc 737 ret = bt_field_type_integer_set_base(root_action_special, 10);
25583cd0 738 BT_ASSERT(ret == 0);
50842bdc 739 ret = bt_field_type_integer_set_encoding(root_action_special, BT_STRING_ENCODING_NONE);
25583cd0 740 BT_ASSERT(ret == 0);
50842bdc 741 ret = bt_field_type_set_byte_order(root_action_special, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 742 BT_ASSERT(ret == 0);
50842bdc 743 ret = bt_field_type_set_alignment(root_action_special, 1);
25583cd0 744 BT_ASSERT(ret == 0);
50842bdc 745 ret = bt_field_type_structure_add_field(root_action, root_action_special, "special");
25583cd0 746 BT_ASSERT(ret == 0);
50842bdc 747 root_action_lucky_elem = bt_field_type_string_create();
25583cd0 748 BT_ASSERT(root_action_lucky_elem);
50842bdc 749 ret = bt_field_type_string_set_encoding(root_action_lucky_elem, BT_STRING_ENCODING_UTF8);
25583cd0 750 BT_ASSERT(ret == 0);
50842bdc 751 root_action_lucky = bt_field_type_sequence_create(root_action_lucky_elem, "stream.packet.context.placid");
25583cd0 752 BT_ASSERT(root_action_lucky);
50842bdc 753 ret = bt_field_type_structure_add_field(root_action, root_action_lucky, "lucky");
25583cd0 754 BT_ASSERT(ret == 0);
50842bdc 755 root_action_dream = bt_field_type_string_create();
25583cd0 756 BT_ASSERT(root_action_dream);
50842bdc 757 ret = bt_field_type_string_set_encoding(root_action_dream, BT_STRING_ENCODING_UTF8);
25583cd0 758 BT_ASSERT(ret == 0);
50842bdc 759 ret = bt_field_type_structure_add_field(root_action, root_action_dream, "dream");
25583cd0 760 BT_ASSERT(ret == 0);
50842bdc 761 root_action_grandiose_elem = bt_field_type_integer_create(3);
25583cd0 762 BT_ASSERT(root_action_grandiose_elem);
3dca2276 763 ret = bt_field_type_integer_set_is_signed(root_action_grandiose_elem, 0);
25583cd0 764 BT_ASSERT(ret == 0);
50842bdc 765 ret = bt_field_type_integer_set_base(root_action_grandiose_elem, 10);
25583cd0 766 BT_ASSERT(ret == 0);
50842bdc 767 ret = bt_field_type_integer_set_encoding(root_action_grandiose_elem, BT_STRING_ENCODING_NONE);
25583cd0 768 BT_ASSERT(ret == 0);
50842bdc 769 ret = bt_field_type_set_byte_order(root_action_grandiose_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 770 BT_ASSERT(ret == 0);
50842bdc 771 ret = bt_field_type_set_alignment(root_action_grandiose_elem, 1);
25583cd0 772 BT_ASSERT(ret == 0);
50842bdc 773 root_action_grandiose = bt_field_type_sequence_create(root_action_grandiose_elem, "trace.packet.header.serious");
25583cd0 774 BT_ASSERT(root_action_grandiose);
50842bdc 775 ret = bt_field_type_structure_add_field(root_action, root_action_grandiose, "grandiose");
25583cd0 776 BT_ASSERT(ret == 0);
50842bdc 777 ret = bt_field_type_structure_add_field(root, root_action, "action");
25583cd0 778 BT_ASSERT(ret == 0);
50842bdc 779 root_stiff_elem = bt_field_type_string_create();
25583cd0 780 BT_ASSERT(root_stiff_elem);
50842bdc 781 ret = bt_field_type_string_set_encoding(root_stiff_elem, BT_STRING_ENCODING_UTF8);
25583cd0 782 BT_ASSERT(ret == 0);
50842bdc 783 root_stiff = bt_field_type_sequence_create(root_stiff_elem, "clover.whole.RED");
25583cd0 784 BT_ASSERT(root_stiff);
50842bdc 785 ret = bt_field_type_structure_add_field(root, root_stiff, "stiff");
25583cd0 786 BT_ASSERT(ret == 0);
50842bdc 787 root_fruit = bt_field_type_structure_create();
25583cd0 788 BT_ASSERT(root_fruit);
50842bdc 789 ret = bt_field_type_set_alignment(root_fruit, 1);
25583cd0 790 BT_ASSERT(ret == 0);
50842bdc 791 root_fruit_apple_elem = bt_field_type_integer_create(5);
25583cd0 792 BT_ASSERT(root_fruit_apple_elem);
3dca2276 793 ret = bt_field_type_integer_set_is_signed(root_fruit_apple_elem, 0);
25583cd0 794 BT_ASSERT(ret == 0);
50842bdc 795 ret = bt_field_type_integer_set_base(root_fruit_apple_elem, 10);
25583cd0 796 BT_ASSERT(ret == 0);
50842bdc 797 ret = bt_field_type_integer_set_encoding(root_fruit_apple_elem, BT_STRING_ENCODING_NONE);
25583cd0 798 BT_ASSERT(ret == 0);
50842bdc 799 ret = bt_field_type_set_byte_order(root_fruit_apple_elem, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 800 BT_ASSERT(ret == 0);
50842bdc 801 ret = bt_field_type_set_alignment(root_fruit_apple_elem, 1);
25583cd0 802 BT_ASSERT(ret == 0);
50842bdc 803 root_fruit_apple = bt_field_type_sequence_create(root_fruit_apple_elem, "action.special");
25583cd0 804 BT_ASSERT(root_fruit_apple);
50842bdc 805 ret = bt_field_type_structure_add_field(root_fruit, root_fruit_apple, "apple");
25583cd0 806 BT_ASSERT(ret == 0);
50842bdc 807 ret = bt_field_type_structure_add_field(root, root_fruit, "fruit");
25583cd0 808 BT_ASSERT(ret == 0);
0b93f4ea
PP
809
810 BT_PUT(root_id);
811 BT_PUT(root_timestamp);
812 BT_PUT(root_action);
813 BT_PUT(root_action_special);
814 BT_PUT(root_action_lucky);
815 BT_PUT(root_action_lucky_elem);
816 BT_PUT(root_action_dream);
817 BT_PUT(root_action_grandiose);
818 BT_PUT(root_action_grandiose_elem);
819 BT_PUT(root_stiff);
820 BT_PUT(root_stiff_elem);
821 BT_PUT(root_fruit);
822 BT_PUT(root_fruit_apple);
823 BT_PUT(root_fruit_apple_elem);
824
825 return root;
826}
827
828static
3dca2276 829struct bt_field_type *get_good_stream_event_context_field_type(void)
0b93f4ea
PP
830{
831 /*
832 Generated by bt-ctfirtg using the following input:
833
834 class: struct
835 fields:
836 face:
837 class: struct
838 fields:
839 branch:
840 class: array
841 length: serious
842 element-type:
843 class: string
844 income:
845 class: array
846 length: magic
847 element-type:
848 class: string
849 magic:
850 class: int
851 size: 23
852 lucky:
853 class: array
854 length: magic
855 element-type:
856 class: string
857 cats:
858 class: int
859 size: 5
860 dream:
861 class: array
862 length: stream.packet.context.placid
863 element-type:
864 class: array
865 length: trace.packet.header.iron.dust
866 element-type:
867 class: array
868 length: stream.event.context.face.magic
869 element-type:
870 class: string
871 stream_id:
872 class: int
873 size: 9
874
875 */
876
50842bdc
PP
877 struct bt_field_type *root = NULL;
878 struct bt_field_type *root_face = NULL;
879 struct bt_field_type *root_face_branch = NULL;
880 struct bt_field_type *root_face_branch_elem = NULL;
881 struct bt_field_type *root_face_income = NULL;
882 struct bt_field_type *root_face_income_elem = NULL;
883 struct bt_field_type *root_face_magic = NULL;
884 struct bt_field_type *root_face_lucky = NULL;
885 struct bt_field_type *root_face_lucky_elem = NULL;
886 struct bt_field_type *root_cats = NULL;
887 struct bt_field_type *root_dream = NULL;
888 struct bt_field_type *root_dream_elem = NULL;
889 struct bt_field_type *root_dream_elem_elem = NULL;
890 struct bt_field_type *root_dream_elem_elem_elem = NULL;
891 struct bt_field_type *root_stream_id = NULL;
0b93f4ea
PP
892
893 int ret;
50842bdc 894 root = bt_field_type_structure_create();
25583cd0 895 BT_ASSERT(root);
50842bdc 896 ret = bt_field_type_set_alignment(root, 8);
25583cd0 897 BT_ASSERT(ret == 0);
50842bdc 898 root_face = bt_field_type_structure_create();
25583cd0 899 BT_ASSERT(root_face);
50842bdc 900 ret = bt_field_type_set_alignment(root_face, 8);
25583cd0 901 BT_ASSERT(ret == 0);
50842bdc 902 root_face_branch_elem = bt_field_type_string_create();
25583cd0 903 BT_ASSERT(root_face_branch_elem);
50842bdc 904 ret = bt_field_type_string_set_encoding(root_face_branch_elem, BT_STRING_ENCODING_UTF8);
25583cd0 905 BT_ASSERT(ret == 0);
50842bdc 906 root_face_branch = bt_field_type_sequence_create(root_face_branch_elem, "serious");
25583cd0 907 BT_ASSERT(root_face_branch);
50842bdc 908 ret = bt_field_type_structure_add_field(root_face, root_face_branch, "branch");
25583cd0 909 BT_ASSERT(ret == 0);
50842bdc 910 root_face_income_elem = bt_field_type_string_create();
25583cd0 911 BT_ASSERT(root_face_income_elem);
50842bdc 912 ret = bt_field_type_string_set_encoding(root_face_income_elem, BT_STRING_ENCODING_UTF8);
25583cd0 913 BT_ASSERT(ret == 0);
50842bdc 914 root_face_income = bt_field_type_sequence_create(root_face_income_elem, "magic");
25583cd0 915 BT_ASSERT(root_face_income);
50842bdc 916 ret = bt_field_type_structure_add_field(root_face, root_face_income, "income");
25583cd0 917 BT_ASSERT(ret == 0);
50842bdc 918 root_face_magic = bt_field_type_integer_create(23);
25583cd0 919 BT_ASSERT(root_face_magic);
3dca2276 920 ret = bt_field_type_integer_set_is_signed(root_face_magic, 0);
25583cd0 921 BT_ASSERT(ret == 0);
50842bdc 922 ret = bt_field_type_integer_set_base(root_face_magic, 10);
25583cd0 923 BT_ASSERT(ret == 0);
50842bdc 924 ret = bt_field_type_integer_set_encoding(root_face_magic, BT_STRING_ENCODING_NONE);
25583cd0 925 BT_ASSERT(ret == 0);
50842bdc 926 ret = bt_field_type_set_byte_order(root_face_magic, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 927 BT_ASSERT(ret == 0);
50842bdc 928 ret = bt_field_type_set_alignment(root_face_magic, 1);
25583cd0 929 BT_ASSERT(ret == 0);
50842bdc 930 ret = bt_field_type_structure_add_field(root_face, root_face_magic, "magic");
25583cd0 931 BT_ASSERT(ret == 0);
50842bdc 932 root_face_lucky_elem = bt_field_type_string_create();
25583cd0 933 BT_ASSERT(root_face_lucky_elem);
50842bdc 934 ret = bt_field_type_string_set_encoding(root_face_lucky_elem, BT_STRING_ENCODING_UTF8);
25583cd0 935 BT_ASSERT(ret == 0);
50842bdc 936 root_face_lucky = bt_field_type_sequence_create(root_face_lucky_elem, "magic");
25583cd0 937 BT_ASSERT(root_face_lucky);
50842bdc 938 ret = bt_field_type_structure_add_field(root_face, root_face_lucky, "lucky");
25583cd0 939 BT_ASSERT(ret == 0);
50842bdc 940 ret = bt_field_type_structure_add_field(root, root_face, "face");
25583cd0 941 BT_ASSERT(ret == 0);
50842bdc 942 root_cats = bt_field_type_integer_create(5);
25583cd0 943 BT_ASSERT(root_cats);
3dca2276 944 ret = bt_field_type_integer_set_is_signed(root_cats, 0);
25583cd0 945 BT_ASSERT(ret == 0);
50842bdc 946 ret = bt_field_type_integer_set_base(root_cats, 10);
25583cd0 947 BT_ASSERT(ret == 0);
50842bdc 948 ret = bt_field_type_integer_set_encoding(root_cats, BT_STRING_ENCODING_NONE);
25583cd0 949 BT_ASSERT(ret == 0);
50842bdc 950 ret = bt_field_type_set_byte_order(root_cats, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 951 BT_ASSERT(ret == 0);
50842bdc 952 ret = bt_field_type_set_alignment(root_cats, 1);
25583cd0 953 BT_ASSERT(ret == 0);
50842bdc 954 ret = bt_field_type_structure_add_field(root, root_cats, "cats");
25583cd0 955 BT_ASSERT(ret == 0);
50842bdc 956 root_dream_elem_elem_elem = bt_field_type_string_create();
25583cd0 957 BT_ASSERT(root_dream_elem_elem_elem);
50842bdc 958 ret = bt_field_type_string_set_encoding(root_dream_elem_elem_elem, BT_STRING_ENCODING_UTF8);
25583cd0 959 BT_ASSERT(ret == 0);
50842bdc 960 root_dream_elem_elem = bt_field_type_sequence_create(root_dream_elem_elem_elem, "stream.event.context.face.magic");
25583cd0 961 BT_ASSERT(root_dream_elem_elem);
50842bdc 962 root_dream_elem = bt_field_type_sequence_create(root_dream_elem_elem, "trace.packet.header.iron.dust");
25583cd0 963 BT_ASSERT(root_dream_elem);
50842bdc 964 root_dream = bt_field_type_sequence_create(root_dream_elem, "stream.packet.context.placid");
25583cd0 965 BT_ASSERT(root_dream);
50842bdc 966 ret = bt_field_type_structure_add_field(root, root_dream, "dream");
25583cd0 967 BT_ASSERT(ret == 0);
50842bdc 968 root_stream_id = bt_field_type_integer_create(9);
25583cd0 969 BT_ASSERT(root_stream_id);
3dca2276 970 ret = bt_field_type_integer_set_is_signed(root_stream_id, 0);
25583cd0 971 BT_ASSERT(ret == 0);
50842bdc 972 ret = bt_field_type_integer_set_base(root_stream_id, 10);
25583cd0 973 BT_ASSERT(ret == 0);
50842bdc 974 ret = bt_field_type_integer_set_encoding(root_stream_id, BT_STRING_ENCODING_NONE);
25583cd0 975 BT_ASSERT(ret == 0);
50842bdc 976 ret = bt_field_type_set_byte_order(root_stream_id, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 977 BT_ASSERT(ret == 0);
50842bdc 978 ret = bt_field_type_set_alignment(root_stream_id, 1);
25583cd0 979 BT_ASSERT(ret == 0);
50842bdc 980 ret = bt_field_type_structure_add_field(root, root_stream_id, "stream_id");
25583cd0 981 BT_ASSERT(ret == 0);
0b93f4ea
PP
982
983 BT_PUT(root_face);
984 BT_PUT(root_face_branch);
985 BT_PUT(root_face_branch_elem);
986 BT_PUT(root_face_income);
987 BT_PUT(root_face_income_elem);
988 BT_PUT(root_face_magic);
989 BT_PUT(root_face_lucky);
990 BT_PUT(root_face_lucky_elem);
991 BT_PUT(root_cats);
992 BT_PUT(root_dream);
993 BT_PUT(root_dream_elem);
994 BT_PUT(root_dream_elem_elem);
995 BT_PUT(root_dream_elem_elem_elem);
996 BT_PUT(root_stream_id);
997
998 return root;
999}
1000
1001static
3dca2276 1002struct bt_field_type *get_good_event_context_field_type(void)
0b93f4ea
PP
1003{
1004 /*
1005 Generated by bt-ctfirtg using the following input:
1006
1007 class: struct
1008 fields:
1009 film:
1010 class: int
1011 size: 19
1012 berry:
1013 class: struct
1014 fields:
1015 pine:
1016 class: array
1017 length: stream_id
1018 element-type:
1019 class: string
1020 porter:
1021 class: array
1022 length: face.magic
1023 element-type:
1024 class: string
1025 mice:
1026 class: array
1027 length: action.special
1028 element-type:
1029 class: string
1030 third:
1031 class: int
1032 size: 18
1033 guard:
1034 class: array
1035 length: clover.oval
1036 element-type:
1037 class: string
1038 one:
1039 class: array
1040 length: iron.fire.word
1041 element-type:
1042 class: string
1043 cats:
1044 class: int
1045 size: 55
1046 loud:
1047 class: struct
1048 fields:
1049 toys:
1050 class: array
1051 length: trace.packet.header.iron.fire.word
1052 element-type:
1053 class: string
1054 spoon:
1055 class: array
1056 length: stream.packet.context.clover.oval
1057 element-type:
1058 class: string
1059 turkey:
1060 class: array
1061 length: stream.event.header.action.special
1062 element-type:
1063 class: string
1064 inform:
1065 class: array
1066 length: stream.event.context.face.magic
1067 element-type:
1068 class: string
1069 odd:
1070 class: array
1071 length: berry.third
1072 element-type:
1073 class: string
1074 amuck:
1075 class: array
1076 length: event.context.film
1077 element-type:
1078 class: string
1079
1080 */
1081
50842bdc
PP
1082 struct bt_field_type *root = NULL;
1083 struct bt_field_type *root_film = NULL;
1084 struct bt_field_type *root_berry = NULL;
1085 struct bt_field_type *root_berry_pine = NULL;
1086 struct bt_field_type *root_berry_pine_elem = NULL;
1087 struct bt_field_type *root_berry_porter = NULL;
1088 struct bt_field_type *root_berry_porter_elem = NULL;
1089 struct bt_field_type *root_berry_mice = NULL;
1090 struct bt_field_type *root_berry_mice_elem = NULL;
1091 struct bt_field_type *root_berry_third = NULL;
1092 struct bt_field_type *root_berry_guard = NULL;
1093 struct bt_field_type *root_berry_guard_elem = NULL;
1094 struct bt_field_type *root_berry_one = NULL;
1095 struct bt_field_type *root_berry_one_elem = NULL;
1096 struct bt_field_type *root_cats = NULL;
1097 struct bt_field_type *root_loud = NULL;
1098 struct bt_field_type *root_loud_toys = NULL;
1099 struct bt_field_type *root_loud_toys_elem = NULL;
1100 struct bt_field_type *root_loud_spoon = NULL;
1101 struct bt_field_type *root_loud_spoon_elem = NULL;
1102 struct bt_field_type *root_loud_turkey = NULL;
1103 struct bt_field_type *root_loud_turkey_elem = NULL;
1104 struct bt_field_type *root_loud_inform = NULL;
1105 struct bt_field_type *root_loud_inform_elem = NULL;
1106 struct bt_field_type *root_loud_odd = NULL;
1107 struct bt_field_type *root_loud_odd_elem = NULL;
1108 struct bt_field_type *root_loud_amuck = NULL;
1109 struct bt_field_type *root_loud_amuck_elem = NULL;
0b93f4ea
PP
1110
1111 int ret;
50842bdc 1112 root = bt_field_type_structure_create();
25583cd0 1113 BT_ASSERT(root);
50842bdc 1114 ret = bt_field_type_set_alignment(root, 8);
25583cd0 1115 BT_ASSERT(ret == 0);
50842bdc 1116 root_film = bt_field_type_integer_create(19);
25583cd0 1117 BT_ASSERT(root_film);
3dca2276 1118 ret = bt_field_type_integer_set_is_signed(root_film, 0);
25583cd0 1119 BT_ASSERT(ret == 0);
50842bdc 1120 ret = bt_field_type_integer_set_base(root_film, 10);
25583cd0 1121 BT_ASSERT(ret == 0);
50842bdc 1122 ret = bt_field_type_integer_set_encoding(root_film, BT_STRING_ENCODING_NONE);
25583cd0 1123 BT_ASSERT(ret == 0);
50842bdc 1124 ret = bt_field_type_set_byte_order(root_film, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 1125 BT_ASSERT(ret == 0);
50842bdc 1126 ret = bt_field_type_set_alignment(root_film, 1);
25583cd0 1127 BT_ASSERT(ret == 0);
50842bdc 1128 ret = bt_field_type_structure_add_field(root, root_film, "film");
25583cd0 1129 BT_ASSERT(ret == 0);
50842bdc 1130 root_berry = bt_field_type_structure_create();
25583cd0 1131 BT_ASSERT(root_berry);
50842bdc 1132 ret = bt_field_type_set_alignment(root_berry, 8);
25583cd0 1133 BT_ASSERT(ret == 0);
50842bdc 1134 root_berry_pine_elem = bt_field_type_string_create();
25583cd0 1135 BT_ASSERT(root_berry_pine_elem);
50842bdc 1136 ret = bt_field_type_string_set_encoding(root_berry_pine_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1137 BT_ASSERT(ret == 0);
50842bdc 1138 root_berry_pine = bt_field_type_sequence_create(root_berry_pine_elem, "stream_id");
25583cd0 1139 BT_ASSERT(root_berry_pine);
50842bdc 1140 ret = bt_field_type_structure_add_field(root_berry, root_berry_pine, "pine");
25583cd0 1141 BT_ASSERT(ret == 0);
50842bdc 1142 root_berry_porter_elem = bt_field_type_string_create();
25583cd0 1143 BT_ASSERT(root_berry_porter_elem);
50842bdc 1144 ret = bt_field_type_string_set_encoding(root_berry_porter_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1145 BT_ASSERT(ret == 0);
50842bdc 1146 root_berry_porter = bt_field_type_sequence_create(root_berry_porter_elem, "face.magic");
25583cd0 1147 BT_ASSERT(root_berry_porter);
50842bdc 1148 ret = bt_field_type_structure_add_field(root_berry, root_berry_porter, "porter");
25583cd0 1149 BT_ASSERT(ret == 0);
50842bdc 1150 root_berry_mice_elem = bt_field_type_string_create();
25583cd0 1151 BT_ASSERT(root_berry_mice_elem);
50842bdc 1152 ret = bt_field_type_string_set_encoding(root_berry_mice_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1153 BT_ASSERT(ret == 0);
50842bdc 1154 root_berry_mice = bt_field_type_sequence_create(root_berry_mice_elem, "action.special");
25583cd0 1155 BT_ASSERT(root_berry_mice);
50842bdc 1156 ret = bt_field_type_structure_add_field(root_berry, root_berry_mice, "mice");
25583cd0 1157 BT_ASSERT(ret == 0);
50842bdc 1158 root_berry_third = bt_field_type_integer_create(18);
25583cd0 1159 BT_ASSERT(root_berry_third);
3dca2276 1160 ret = bt_field_type_integer_set_is_signed(root_berry_third, 0);
25583cd0 1161 BT_ASSERT(ret == 0);
50842bdc 1162 ret = bt_field_type_integer_set_base(root_berry_third, 10);
25583cd0 1163 BT_ASSERT(ret == 0);
50842bdc 1164 ret = bt_field_type_integer_set_encoding(root_berry_third, BT_STRING_ENCODING_NONE);
25583cd0 1165 BT_ASSERT(ret == 0);
50842bdc 1166 ret = bt_field_type_set_byte_order(root_berry_third, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 1167 BT_ASSERT(ret == 0);
50842bdc 1168 ret = bt_field_type_set_alignment(root_berry_third, 1);
25583cd0 1169 BT_ASSERT(ret == 0);
50842bdc 1170 ret = bt_field_type_structure_add_field(root_berry, root_berry_third, "third");
25583cd0 1171 BT_ASSERT(ret == 0);
50842bdc 1172 root_berry_guard_elem = bt_field_type_string_create();
25583cd0 1173 BT_ASSERT(root_berry_guard_elem);
50842bdc 1174 ret = bt_field_type_string_set_encoding(root_berry_guard_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1175 BT_ASSERT(ret == 0);
50842bdc 1176 root_berry_guard = bt_field_type_sequence_create(root_berry_guard_elem, "clover.oval");
25583cd0 1177 BT_ASSERT(root_berry_guard);
50842bdc 1178 ret = bt_field_type_structure_add_field(root_berry, root_berry_guard, "guard");
25583cd0 1179 BT_ASSERT(ret == 0);
50842bdc 1180 root_berry_one_elem = bt_field_type_string_create();
25583cd0 1181 BT_ASSERT(root_berry_one_elem);
50842bdc 1182 ret = bt_field_type_string_set_encoding(root_berry_one_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1183 BT_ASSERT(ret == 0);
50842bdc 1184 root_berry_one = bt_field_type_sequence_create(root_berry_one_elem, "iron.fire.word");
25583cd0 1185 BT_ASSERT(root_berry_one);
50842bdc 1186 ret = bt_field_type_structure_add_field(root_berry, root_berry_one, "one");
25583cd0 1187 BT_ASSERT(ret == 0);
50842bdc 1188 ret = bt_field_type_structure_add_field(root, root_berry, "berry");
25583cd0 1189 BT_ASSERT(ret == 0);
50842bdc 1190 root_cats = bt_field_type_integer_create(55);
25583cd0 1191 BT_ASSERT(root_cats);
3dca2276 1192 ret = bt_field_type_integer_set_is_signed(root_cats, 0);
25583cd0 1193 BT_ASSERT(ret == 0);
50842bdc 1194 ret = bt_field_type_integer_set_base(root_cats, 10);
25583cd0 1195 BT_ASSERT(ret == 0);
50842bdc 1196 ret = bt_field_type_integer_set_encoding(root_cats, BT_STRING_ENCODING_NONE);
25583cd0 1197 BT_ASSERT(ret == 0);
50842bdc 1198 ret = bt_field_type_set_byte_order(root_cats, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 1199 BT_ASSERT(ret == 0);
50842bdc 1200 ret = bt_field_type_set_alignment(root_cats, 1);
25583cd0 1201 BT_ASSERT(ret == 0);
50842bdc 1202 ret = bt_field_type_structure_add_field(root, root_cats, "cats");
25583cd0 1203 BT_ASSERT(ret == 0);
50842bdc 1204 root_loud = bt_field_type_structure_create();
25583cd0 1205 BT_ASSERT(root_loud);
50842bdc 1206 ret = bt_field_type_set_alignment(root_loud, 8);
25583cd0 1207 BT_ASSERT(ret == 0);
50842bdc 1208 root_loud_toys_elem = bt_field_type_string_create();
25583cd0 1209 BT_ASSERT(root_loud_toys_elem);
50842bdc 1210 ret = bt_field_type_string_set_encoding(root_loud_toys_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1211 BT_ASSERT(ret == 0);
50842bdc 1212 root_loud_toys = bt_field_type_sequence_create(root_loud_toys_elem, "trace.packet.header.iron.fire.word");
25583cd0 1213 BT_ASSERT(root_loud_toys);
50842bdc 1214 ret = bt_field_type_structure_add_field(root_loud, root_loud_toys, "toys");
25583cd0 1215 BT_ASSERT(ret == 0);
50842bdc 1216 root_loud_spoon_elem = bt_field_type_string_create();
25583cd0 1217 BT_ASSERT(root_loud_spoon_elem);
50842bdc 1218 ret = bt_field_type_string_set_encoding(root_loud_spoon_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1219 BT_ASSERT(ret == 0);
50842bdc 1220 root_loud_spoon = bt_field_type_sequence_create(root_loud_spoon_elem, "stream.packet.context.clover.oval");
25583cd0 1221 BT_ASSERT(root_loud_spoon);
50842bdc 1222 ret = bt_field_type_structure_add_field(root_loud, root_loud_spoon, "spoon");
25583cd0 1223 BT_ASSERT(ret == 0);
50842bdc 1224 root_loud_turkey_elem = bt_field_type_string_create();
25583cd0 1225 BT_ASSERT(root_loud_turkey_elem);
50842bdc 1226 ret = bt_field_type_string_set_encoding(root_loud_turkey_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1227 BT_ASSERT(ret == 0);
50842bdc 1228 root_loud_turkey = bt_field_type_sequence_create(root_loud_turkey_elem, "stream.event.header.action.special");
25583cd0 1229 BT_ASSERT(root_loud_turkey);
50842bdc 1230 ret = bt_field_type_structure_add_field(root_loud, root_loud_turkey, "turkey");
25583cd0 1231 BT_ASSERT(ret == 0);
50842bdc 1232 root_loud_inform_elem = bt_field_type_string_create();
25583cd0 1233 BT_ASSERT(root_loud_inform_elem);
50842bdc 1234 ret = bt_field_type_string_set_encoding(root_loud_inform_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1235 BT_ASSERT(ret == 0);
50842bdc 1236 root_loud_inform = bt_field_type_sequence_create(root_loud_inform_elem, "stream.event.context.face.magic");
25583cd0 1237 BT_ASSERT(root_loud_inform);
50842bdc 1238 ret = bt_field_type_structure_add_field(root_loud, root_loud_inform, "inform");
25583cd0 1239 BT_ASSERT(ret == 0);
50842bdc 1240 root_loud_odd_elem = bt_field_type_string_create();
25583cd0 1241 BT_ASSERT(root_loud_odd_elem);
50842bdc 1242 ret = bt_field_type_string_set_encoding(root_loud_odd_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1243 BT_ASSERT(ret == 0);
50842bdc 1244 root_loud_odd = bt_field_type_sequence_create(root_loud_odd_elem, "berry.third");
25583cd0 1245 BT_ASSERT(root_loud_odd);
50842bdc 1246 ret = bt_field_type_structure_add_field(root_loud, root_loud_odd, "odd");
25583cd0 1247 BT_ASSERT(ret == 0);
50842bdc 1248 root_loud_amuck_elem = bt_field_type_string_create();
25583cd0 1249 BT_ASSERT(root_loud_amuck_elem);
50842bdc 1250 ret = bt_field_type_string_set_encoding(root_loud_amuck_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1251 BT_ASSERT(ret == 0);
50842bdc 1252 root_loud_amuck = bt_field_type_sequence_create(root_loud_amuck_elem, "event.context.film");
25583cd0 1253 BT_ASSERT(root_loud_amuck);
50842bdc 1254 ret = bt_field_type_structure_add_field(root_loud, root_loud_amuck, "amuck");
25583cd0 1255 BT_ASSERT(ret == 0);
50842bdc 1256 ret = bt_field_type_structure_add_field(root, root_loud, "loud");
25583cd0 1257 BT_ASSERT(ret == 0);
0b93f4ea
PP
1258
1259 BT_PUT(root_film);
1260 BT_PUT(root_berry);
1261 BT_PUT(root_berry_pine);
1262 BT_PUT(root_berry_pine_elem);
1263 BT_PUT(root_berry_porter);
1264 BT_PUT(root_berry_porter_elem);
1265 BT_PUT(root_berry_mice);
1266 BT_PUT(root_berry_mice_elem);
1267 BT_PUT(root_berry_third);
1268 BT_PUT(root_berry_guard);
1269 BT_PUT(root_berry_guard_elem);
1270 BT_PUT(root_berry_one);
1271 BT_PUT(root_berry_one_elem);
1272 BT_PUT(root_cats);
1273 BT_PUT(root_loud);
1274 BT_PUT(root_loud_toys);
1275 BT_PUT(root_loud_toys_elem);
1276 BT_PUT(root_loud_spoon);
1277 BT_PUT(root_loud_spoon_elem);
1278 BT_PUT(root_loud_turkey);
1279 BT_PUT(root_loud_turkey_elem);
1280 BT_PUT(root_loud_inform);
1281 BT_PUT(root_loud_inform_elem);
1282 BT_PUT(root_loud_odd);
1283 BT_PUT(root_loud_odd_elem);
1284 BT_PUT(root_loud_amuck);
1285 BT_PUT(root_loud_amuck_elem);
1286
1287 return root;
1288}
1289
1290static
3dca2276 1291struct bt_field_type *get_good_event_payload_field_type(void)
0b93f4ea
PP
1292{
1293 /*
1294 Generated by bt-ctfirtg using the following input:
1295
1296 class: struct
1297 fields:
1298 splendid:
1299 class: int
1300 size: 12
1301 relative:
1302 class: struct
1303 fields:
1304 equal:
1305 class: array
1306 length: splendid
1307 element-type:
1308 class: string
1309 amuck:
1310 class: array
1311 length: cats
1312 element-type:
1313 class: string
1314 push:
1315 class: array
1316 length: berry.third
1317 element-type:
1318 class: string
1319 brick:
1320 class: array
1321 length: face.magic
1322 element-type:
1323 class: string
1324 amuck:
1325 class: array
1326 length: id
1327 element-type:
1328 class: string
1329 crush:
1330 class: array
1331 length: serious
1332 element-type:
1333 class: string
1334 canvas:
1335 class: array
1336 length: iron.dust
1337 element-type:
1338 class: string
1339 absolute:
1340 class: struct
1341 fields:
1342 equal:
1343 class: array
1344 length: event.fields.splendid
1345 element-type:
1346 class: string
1347 amuck:
1348 class: array
1349 length: event.context.cats
1350 element-type:
1351 class: string
1352 push:
1353 class: array
1354 length: event.context.berry.third
1355 element-type:
1356 class: string
1357 brick:
1358 class: array
1359 length: stream.event.context.face.magic
1360 element-type:
1361 class: string
1362 amuck:
1363 class: array
1364 length: stream.event.header.id
1365 element-type:
1366 class: string
1367 crush:
1368 class: array
1369 length: stream.packet.context.serious
1370 element-type:
1371 class: string
1372 canvas:
1373 class: array
1374 length: trace.packet.header.iron.dust
1375 element-type:
1376 class: string
1377
1378 */
1379
50842bdc
PP
1380 struct bt_field_type *root = NULL;
1381 struct bt_field_type *root_splendid = NULL;
1382 struct bt_field_type *root_relative = NULL;
1383 struct bt_field_type *root_relative_equal = NULL;
1384 struct bt_field_type *root_relative_equal_elem = NULL;
1385 struct bt_field_type *root_relative_amuck = NULL;
1386 struct bt_field_type *root_relative_amuck_elem = NULL;
1387 struct bt_field_type *root_relative_push = NULL;
1388 struct bt_field_type *root_relative_push_elem = NULL;
1389 struct bt_field_type *root_relative_brick = NULL;
1390 struct bt_field_type *root_relative_brick_elem = NULL;
1391 struct bt_field_type *root_relative_crush = NULL;
1392 struct bt_field_type *root_relative_crush_elem = NULL;
1393 struct bt_field_type *root_relative_canvas = NULL;
1394 struct bt_field_type *root_relative_canvas_elem = NULL;
1395 struct bt_field_type *root_absolute = NULL;
1396 struct bt_field_type *root_absolute_equal = NULL;
1397 struct bt_field_type *root_absolute_equal_elem = NULL;
1398 struct bt_field_type *root_absolute_amuck = NULL;
1399 struct bt_field_type *root_absolute_amuck_elem = NULL;
1400 struct bt_field_type *root_absolute_push = NULL;
1401 struct bt_field_type *root_absolute_push_elem = NULL;
1402 struct bt_field_type *root_absolute_brick = NULL;
1403 struct bt_field_type *root_absolute_brick_elem = NULL;
1404 struct bt_field_type *root_absolute_crush = NULL;
1405 struct bt_field_type *root_absolute_crush_elem = NULL;
1406 struct bt_field_type *root_absolute_canvas = NULL;
1407 struct bt_field_type *root_absolute_canvas_elem = NULL;
0b93f4ea
PP
1408
1409 int ret;
50842bdc 1410 root = bt_field_type_structure_create();
25583cd0 1411 BT_ASSERT(root);
50842bdc 1412 ret = bt_field_type_set_alignment(root, 8);
25583cd0 1413 BT_ASSERT(ret == 0);
50842bdc 1414 root_splendid = bt_field_type_integer_create(12);
25583cd0 1415 BT_ASSERT(root_splendid);
3dca2276 1416 ret = bt_field_type_integer_set_is_signed(root_splendid, 0);
25583cd0 1417 BT_ASSERT(ret == 0);
50842bdc 1418 ret = bt_field_type_integer_set_base(root_splendid, 10);
25583cd0 1419 BT_ASSERT(ret == 0);
50842bdc 1420 ret = bt_field_type_integer_set_encoding(root_splendid, BT_STRING_ENCODING_NONE);
25583cd0 1421 BT_ASSERT(ret == 0);
50842bdc 1422 ret = bt_field_type_set_byte_order(root_splendid, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 1423 BT_ASSERT(ret == 0);
50842bdc 1424 ret = bt_field_type_set_alignment(root_splendid, 1);
25583cd0 1425 BT_ASSERT(ret == 0);
50842bdc 1426 ret = bt_field_type_structure_add_field(root, root_splendid, "splendid");
25583cd0 1427 BT_ASSERT(ret == 0);
50842bdc 1428 root_relative = bt_field_type_structure_create();
25583cd0 1429 BT_ASSERT(root_relative);
50842bdc 1430 ret = bt_field_type_set_alignment(root_relative, 8);
25583cd0 1431 BT_ASSERT(ret == 0);
50842bdc 1432 root_relative_equal_elem = bt_field_type_string_create();
25583cd0 1433 BT_ASSERT(root_relative_equal_elem);
50842bdc 1434 ret = bt_field_type_string_set_encoding(root_relative_equal_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1435 BT_ASSERT(ret == 0);
50842bdc 1436 root_relative_equal = bt_field_type_sequence_create(root_relative_equal_elem, "splendid");
25583cd0 1437 BT_ASSERT(root_relative_equal);
50842bdc 1438 ret = bt_field_type_structure_add_field(root_relative, root_relative_equal, "equal");
25583cd0 1439 BT_ASSERT(ret == 0);
50842bdc 1440 root_relative_amuck_elem = bt_field_type_string_create();
25583cd0 1441 BT_ASSERT(root_relative_amuck_elem);
50842bdc 1442 ret = bt_field_type_string_set_encoding(root_relative_amuck_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1443 BT_ASSERT(ret == 0);
50842bdc 1444 root_relative_amuck = bt_field_type_sequence_create(root_relative_amuck_elem, "id");
25583cd0 1445 BT_ASSERT(root_relative_amuck);
50842bdc 1446 ret = bt_field_type_structure_add_field(root_relative, root_relative_amuck, "amuck");
25583cd0 1447 BT_ASSERT(ret == 0);
50842bdc 1448 root_relative_push_elem = bt_field_type_string_create();
25583cd0 1449 BT_ASSERT(root_relative_push_elem);
50842bdc 1450 ret = bt_field_type_string_set_encoding(root_relative_push_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1451 BT_ASSERT(ret == 0);
50842bdc 1452 root_relative_push = bt_field_type_sequence_create(root_relative_push_elem, "berry.third");
25583cd0 1453 BT_ASSERT(root_relative_push);
50842bdc 1454 ret = bt_field_type_structure_add_field(root_relative, root_relative_push, "push");
25583cd0 1455 BT_ASSERT(ret == 0);
50842bdc 1456 root_relative_brick_elem = bt_field_type_string_create();
25583cd0 1457 BT_ASSERT(root_relative_brick_elem);
50842bdc 1458 ret = bt_field_type_string_set_encoding(root_relative_brick_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1459 BT_ASSERT(ret == 0);
50842bdc 1460 root_relative_brick = bt_field_type_sequence_create(root_relative_brick_elem, "face.magic");
25583cd0 1461 BT_ASSERT(root_relative_brick);
50842bdc 1462 ret = bt_field_type_structure_add_field(root_relative, root_relative_brick, "brick");
25583cd0 1463 BT_ASSERT(ret == 0);
50842bdc 1464 root_relative_crush_elem = bt_field_type_string_create();
25583cd0 1465 BT_ASSERT(root_relative_crush_elem);
50842bdc 1466 ret = bt_field_type_string_set_encoding(root_relative_crush_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1467 BT_ASSERT(ret == 0);
50842bdc 1468 root_relative_crush = bt_field_type_sequence_create(root_relative_crush_elem, "serious");
25583cd0 1469 BT_ASSERT(root_relative_crush);
50842bdc 1470 ret = bt_field_type_structure_add_field(root_relative, root_relative_crush, "crush");
25583cd0 1471 BT_ASSERT(ret == 0);
50842bdc 1472 root_relative_canvas_elem = bt_field_type_string_create();
25583cd0 1473 BT_ASSERT(root_relative_canvas_elem);
50842bdc 1474 ret = bt_field_type_string_set_encoding(root_relative_canvas_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1475 BT_ASSERT(ret == 0);
50842bdc 1476 root_relative_canvas = bt_field_type_sequence_create(root_relative_canvas_elem, "iron.dust");
25583cd0 1477 BT_ASSERT(root_relative_canvas);
50842bdc 1478 ret = bt_field_type_structure_add_field(root_relative, root_relative_canvas, "canvas");
25583cd0 1479 BT_ASSERT(ret == 0);
50842bdc 1480 ret = bt_field_type_structure_add_field(root, root_relative, "relative");
25583cd0 1481 BT_ASSERT(ret == 0);
50842bdc 1482 root_absolute = bt_field_type_structure_create();
25583cd0 1483 BT_ASSERT(root_absolute);
50842bdc 1484 ret = bt_field_type_set_alignment(root_absolute, 8);
25583cd0 1485 BT_ASSERT(ret == 0);
50842bdc 1486 root_absolute_equal_elem = bt_field_type_string_create();
25583cd0 1487 BT_ASSERT(root_absolute_equal_elem);
50842bdc 1488 ret = bt_field_type_string_set_encoding(root_absolute_equal_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1489 BT_ASSERT(ret == 0);
50842bdc 1490 root_absolute_equal = bt_field_type_sequence_create(root_absolute_equal_elem, "event.fields.splendid");
25583cd0 1491 BT_ASSERT(root_absolute_equal);
50842bdc 1492 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_equal, "equal");
25583cd0 1493 BT_ASSERT(ret == 0);
50842bdc 1494 root_absolute_amuck_elem = bt_field_type_string_create();
25583cd0 1495 BT_ASSERT(root_absolute_amuck_elem);
50842bdc 1496 ret = bt_field_type_string_set_encoding(root_absolute_amuck_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1497 BT_ASSERT(ret == 0);
50842bdc 1498 root_absolute_amuck = bt_field_type_sequence_create(root_absolute_amuck_elem, "stream.event.header.id");
25583cd0 1499 BT_ASSERT(root_absolute_amuck);
50842bdc 1500 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_amuck, "amuck");
25583cd0 1501 BT_ASSERT(ret == 0);
50842bdc 1502 root_absolute_push_elem = bt_field_type_string_create();
25583cd0 1503 BT_ASSERT(root_absolute_push_elem);
50842bdc 1504 ret = bt_field_type_string_set_encoding(root_absolute_push_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1505 BT_ASSERT(ret == 0);
50842bdc 1506 root_absolute_push = bt_field_type_sequence_create(root_absolute_push_elem, "event.context.berry.third");
25583cd0 1507 BT_ASSERT(root_absolute_push);
50842bdc 1508 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_push, "push");
25583cd0 1509 BT_ASSERT(ret == 0);
50842bdc 1510 root_absolute_brick_elem = bt_field_type_string_create();
25583cd0 1511 BT_ASSERT(root_absolute_brick_elem);
50842bdc 1512 ret = bt_field_type_string_set_encoding(root_absolute_brick_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1513 BT_ASSERT(ret == 0);
50842bdc 1514 root_absolute_brick = bt_field_type_sequence_create(root_absolute_brick_elem, "stream.event.context.face.magic");
25583cd0 1515 BT_ASSERT(root_absolute_brick);
50842bdc 1516 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_brick, "brick");
25583cd0 1517 BT_ASSERT(ret == 0);
50842bdc 1518 root_absolute_crush_elem = bt_field_type_string_create();
25583cd0 1519 BT_ASSERT(root_absolute_crush_elem);
50842bdc 1520 ret = bt_field_type_string_set_encoding(root_absolute_crush_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1521 BT_ASSERT(ret == 0);
50842bdc 1522 root_absolute_crush = bt_field_type_sequence_create(root_absolute_crush_elem, "stream.packet.context.serious");
25583cd0 1523 BT_ASSERT(root_absolute_crush);
50842bdc 1524 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_crush, "crush");
25583cd0 1525 BT_ASSERT(ret == 0);
50842bdc 1526 root_absolute_canvas_elem = bt_field_type_string_create();
25583cd0 1527 BT_ASSERT(root_absolute_canvas_elem);
50842bdc 1528 ret = bt_field_type_string_set_encoding(root_absolute_canvas_elem, BT_STRING_ENCODING_UTF8);
25583cd0 1529 BT_ASSERT(ret == 0);
50842bdc 1530 root_absolute_canvas = bt_field_type_sequence_create(root_absolute_canvas_elem, "trace.packet.header.iron.dust");
25583cd0 1531 BT_ASSERT(root_absolute_canvas);
50842bdc 1532 ret = bt_field_type_structure_add_field(root_absolute, root_absolute_canvas, "canvas");
25583cd0 1533 BT_ASSERT(ret == 0);
50842bdc 1534 ret = bt_field_type_structure_add_field(root, root_absolute, "absolute");
25583cd0 1535 BT_ASSERT(ret == 0);
0b93f4ea
PP
1536
1537 BT_PUT(root_splendid);
1538 BT_PUT(root_relative);
1539 BT_PUT(root_relative_equal);
1540 BT_PUT(root_relative_equal_elem);
1541 BT_PUT(root_relative_amuck);
1542 BT_PUT(root_relative_amuck_elem);
1543 BT_PUT(root_relative_push);
1544 BT_PUT(root_relative_push_elem);
1545 BT_PUT(root_relative_brick);
1546 BT_PUT(root_relative_brick_elem);
1547 BT_PUT(root_relative_crush);
1548 BT_PUT(root_relative_crush_elem);
1549 BT_PUT(root_relative_canvas);
1550 BT_PUT(root_relative_canvas_elem);
1551 BT_PUT(root_absolute);
1552 BT_PUT(root_absolute_equal);
1553 BT_PUT(root_absolute_equal_elem);
1554 BT_PUT(root_absolute_amuck);
1555 BT_PUT(root_absolute_amuck_elem);
1556 BT_PUT(root_absolute_push);
1557 BT_PUT(root_absolute_push_elem);
1558 BT_PUT(root_absolute_brick);
1559 BT_PUT(root_absolute_brick_elem);
1560 BT_PUT(root_absolute_crush);
1561 BT_PUT(root_absolute_crush_elem);
1562 BT_PUT(root_absolute_canvas);
1563 BT_PUT(root_absolute_canvas_elem);
1564
1565 return root;
1566}
1567
1568static
50842bdc 1569struct bt_field_type *get_child_ft(struct bt_field_type *parent_ft,
0b93f4ea
PP
1570 const char *name)
1571{
50842bdc 1572 struct bt_field_type *ft = NULL;
0b93f4ea 1573
50842bdc 1574 switch (bt_field_type_get_type_id(parent_ft)) {
3dca2276 1575 case BT_FIELD_TYPE_ID_STRUCT:
50842bdc 1576 ft = bt_field_type_structure_get_field_type_by_name(
0b93f4ea
PP
1577 parent_ft, name);
1578 break;
1579
3dca2276 1580 case BT_FIELD_TYPE_ID_VARIANT:
50842bdc 1581 ft = bt_field_type_variant_get_field_type_by_name(
0b93f4ea
PP
1582 parent_ft, name);
1583 break;
1584
3dca2276
PP
1585 case BT_FIELD_TYPE_ID_ARRAY:
1586 ft = bt_field_type_array_get_element_field_type(parent_ft);
0b93f4ea
PP
1587 break;
1588
3dca2276
PP
1589 case BT_FIELD_TYPE_ID_SEQUENCE:
1590 ft = bt_field_type_sequence_get_element_field_type(parent_ft);
0b93f4ea
PP
1591 break;
1592
3dca2276
PP
1593 case BT_FIELD_TYPE_ID_ENUM:
1594 ft = bt_field_type_enumeration_get_container_field_type(
0b93f4ea
PP
1595 parent_ft);
1596 break;
1597
1598 default:
1599 break;
1600 }
1601
25583cd0 1602 BT_ASSERT(ft);
0b93f4ea
PP
1603
1604 return ft;
1605}
1606
1607static
50842bdc 1608struct bt_field_type *get_ft(struct bt_field_type *root_ft, ...)
0b93f4ea 1609{
50842bdc
PP
1610 struct bt_field_type *child_ft = NULL;
1611 struct bt_field_type *ft = root_ft;
0b93f4ea
PP
1612 va_list ap;
1613
1614 va_start(ap, root_ft);
1615 bt_get(ft);
1616
1617 while (true) {
1618 const char *field_name = va_arg(ap, const char *);
1619
1620 if (field_name == NULL) {
1621 break;
1622 }
1623
1624 child_ft = get_child_ft(ft, field_name);
1625
1626 if (!child_ft) {
1627 BT_PUT(ft);
1628 goto end;
1629 }
1630
1631 BT_MOVE(ft, child_ft);
1632 }
1633
1634end:
1635 va_end(ap);
1636
1637 return ft;
1638}
1639
1640#define FIELD_PATH_END -2
1641
1642static
50842bdc 1643int validate_field_path(struct bt_field_type *field_type, int int_root, ...)
0b93f4ea 1644{
50842bdc 1645 enum bt_scope root = int_root;
0b93f4ea
PP
1646 int ret = 0;
1647 int len;
1648 int expected_index;
1649 int actual_index;
1650 int i = 0;
50842bdc 1651 struct bt_field_path *field_path = NULL;
0b93f4ea
PP
1652 va_list ap;
1653
b28a86ad 1654 va_start(ap, int_root);
50842bdc
PP
1655 if (bt_field_type_is_sequence(field_type)) {
1656 field_path = bt_field_type_sequence_get_length_field_path(
b011f6b0 1657 field_type);
50842bdc
PP
1658 } else if (bt_field_type_is_variant(field_type)) {
1659 field_path = bt_field_type_variant_get_tag_field_path(
b011f6b0 1660 field_type);
0b93f4ea
PP
1661 }
1662
1663 if (!field_path) {
1664 ret = -1;
1665 goto end;
1666 }
1667
50842bdc 1668 if (bt_field_path_get_root_scope(field_path) != root) {
0b93f4ea
PP
1669 ret = -1;
1670 goto end;
1671 }
1672
50842bdc 1673 len = bt_field_path_get_index_count(field_path);
0b93f4ea
PP
1674
1675 while (true) {
1676 expected_index = va_arg(ap, int);
1677
1678 if (expected_index == FIELD_PATH_END) {
1679 break;
1680 }
1681
1682 if (i == len) {
1683 break;
1684 }
1685
50842bdc 1686 actual_index = bt_field_path_get_index(field_path, i);
0b93f4ea 1687
b011f6b0 1688 if (actual_index == INT_MIN) {
0b93f4ea
PP
1689 ret = -1;
1690 goto end;
1691 }
1692
1693 i++;
1694 }
1695
1696 if (i != len || expected_index != FIELD_PATH_END) {
1697 ret = -1;
1698 }
1699
1700end:
b011f6b0 1701 BT_PUT(field_path);
0b93f4ea
PP
1702 va_end(ap);
1703
1704 return ret;
1705}
1706
1707static
50842bdc 1708void validate_test_pass(struct bt_trace *trace)
0b93f4ea 1709{
50842bdc
PP
1710 struct bt_stream_class *sc;
1711 struct bt_event_class *ec;
1712 struct bt_field_type *ph;
1713 struct bt_field_type *pc;
1714 struct bt_field_type *eh;
1715 struct bt_field_type *sec;
1716 struct bt_field_type *ectx;
1717 struct bt_field_type *ep;
1718 struct bt_field_type *ft_src = NULL;
1719 struct bt_field_type *ft_target = NULL;
1720 struct bt_field_type *ft_tag = NULL;
1721
1722 sc = bt_trace_get_stream_class_by_index(trace, 0);
25583cd0 1723 BT_ASSERT(sc);
50842bdc 1724 ec = bt_stream_class_get_event_class_by_index(sc, 0);
25583cd0 1725 BT_ASSERT(ec);
0b93f4ea 1726
3dca2276 1727 ph = bt_trace_get_packet_header_field_type(trace);
0b93f4ea 1728 ok(ph, "Trace packet header still exists after successful validation");
3dca2276 1729 pc = bt_stream_class_get_packet_context_field_type(sc);
0b93f4ea 1730 ok(pc, "Stream packet context still exists after successful validation");
3dca2276 1731 eh = bt_stream_class_get_event_header_field_type(sc);
0b93f4ea 1732 ok(eh, "Stream event header still exists after successful validation");
3dca2276 1733 sec = bt_stream_class_get_event_context_field_type(sc);
0b93f4ea 1734 ok(sec, "Stream event context still exists after successful validation");
3dca2276 1735 ectx = bt_event_class_get_context_field_type(ec);
0b93f4ea 1736 ok(ectx, "Event context still exists after successful validation");
3dca2276 1737 ep = bt_event_class_get_payload_field_type(ec);
0b93f4ea
PP
1738 ok(ep, "Event payload still exists after successful validation");
1739
1740 /* trace.packet.header.iron.fire.keen */
1741 ft_src = get_ft(ph, "iron", "fire", "keen", NULL);
50842bdc 1742 ok(!validate_field_path(ft_src, BT_SCOPE_TRACE_PACKET_HEADER,
0b93f4ea
PP
1743 3, 3, 0, FIELD_PATH_END),
1744 "trace.packet.header.iron.fire.keen has the correct field path");
1745 BT_PUT(ft_src);
1746
1747 /* trace.packet.header.iron.fire.keen.[element] */
1748 ft_src = get_ft(ph, "iron", "fire", "keen", "", NULL);
1749 ok(!validate_field_path(ft_src,
50842bdc 1750 BT_SCOPE_TRACE_PACKET_HEADER, 3, 2, FIELD_PATH_END),
0b93f4ea
PP
1751 "trace.packet.header.iron.fire.keen.[element] has the correct field path");
1752 ft_target = get_ft(ph, "iron", "parallel", NULL);
3dca2276 1753 ft_tag = bt_field_type_variant_get_tag_field_type(ft_src);
0b93f4ea
PP
1754 ok(ft_tag == ft_target,
1755 "trace.packet.header.iron.fire.keen.[element] has the correct tag type");
1756 BT_PUT(ft_src);
1757 BT_PUT(ft_target);
1758 BT_PUT(ft_tag);
1759
1760 /* trace.packet.header.iron.fire.keen.[element].BLUE */
1761 ft_src = get_ft(ph, "iron", "fire", "keen", "", "BLUE", NULL);
1762 ok(!validate_field_path(ft_src,
50842bdc 1763 BT_SCOPE_TRACE_PACKET_HEADER, 0, FIELD_PATH_END),
0b93f4ea
PP
1764 "trace.packet.header.iron.fire.keen.[element].BLUE has the correct field path");
1765 BT_PUT(ft_src);
1766
1767 /* trace.packet.header.iron.report */
1768 ft_src = get_ft(ph, "iron", "report", NULL);
1769 ok(!validate_field_path(ft_src,
50842bdc 1770 BT_SCOPE_TRACE_PACKET_HEADER, 3, 1, FIELD_PATH_END),
0b93f4ea
PP
1771 "trace.packet.header.iron.report has the correct field path");
1772 BT_PUT(ft_src);
1773
1774 /* trace.packet.header.iron.group */
1775 ft_src = get_ft(ph, "iron", "group", NULL);
1776 ok(!validate_field_path(ft_src,
50842bdc 1777 BT_SCOPE_TRACE_PACKET_HEADER, 2, FIELD_PATH_END),
0b93f4ea
PP
1778 "trace.packet.header.iron.group has the correct field path");
1779 BT_PUT(ft_src);
1780
1781 /* stream.packet.context.naive.[element] */
1782 ft_src = get_ft(pc, "naive", "", NULL);
1783 ok(!validate_field_path(ft_src,
50842bdc 1784 BT_SCOPE_STREAM_PACKET_CONTEXT, 0, FIELD_PATH_END),
0b93f4ea
PP
1785 "stream.packet.context.naive.[element] has the correct field path");
1786 BT_PUT(ft_src);
1787
1788 /* stream.packet.context.clover.whole */
1789 ft_src = get_ft(pc, "clover", "whole", NULL);
1790 ok(!validate_field_path(ft_src,
50842bdc 1791 BT_SCOPE_TRACE_PACKET_HEADER, 3, 2, FIELD_PATH_END),
0b93f4ea
PP
1792 "stream.packet.context.clover.whole has the correct field path");
1793 ft_target = get_ft(ph, "iron", "parallel", NULL);
3dca2276 1794 ft_tag = bt_field_type_variant_get_tag_field_type(ft_src);
0b93f4ea
PP
1795 ok(ft_tag == ft_target,
1796 "stream.packet.context.clover.whole has the correct tag type");
1797 BT_PUT(ft_src);
1798 BT_PUT(ft_target);
1799 BT_PUT(ft_tag);
1800
1801 /* stream.packet.context.clover.whole.BLUE */
1802 ft_src = get_ft(pc, "clover", "whole", "BLUE", NULL);
1803 ok(!validate_field_path(ft_src,
50842bdc 1804 BT_SCOPE_TRACE_PACKET_HEADER, 3, 3, 0, FIELD_PATH_END),
0b93f4ea
PP
1805 "stream.packet.context.clover.whole.BLUE has the correct field path");
1806 BT_PUT(ft_src);
1807
1808 /* stream.packet.context.clover.egg */
1809 ft_src = get_ft(pc, "clover", "egg", NULL);
1810 ok(!validate_field_path(ft_src,
50842bdc 1811 BT_SCOPE_STREAM_PACKET_CONTEXT, 4, 0, FIELD_PATH_END),
0b93f4ea
PP
1812 "stream.packet.context.clover.egg has the correct field path");
1813 BT_PUT(ft_src);
1814
1815 /* stream.packet.context.clover.useful */
1816 ft_src = get_ft(pc, "clover", "useful", NULL);
1817 ok(!validate_field_path(ft_src,
50842bdc 1818 BT_SCOPE_STREAM_PACKET_CONTEXT, 2, FIELD_PATH_END),
0b93f4ea
PP
1819 "stream.packet.context.clover.useful has the correct field path");
1820 BT_PUT(ft_src);
1821
1822 /* stream.event.header.action.lucky */
1823 ft_src = get_ft(eh, "action", "lucky", NULL);
1824 ok(!validate_field_path(ft_src,
50842bdc 1825 BT_SCOPE_STREAM_PACKET_CONTEXT, 0, FIELD_PATH_END),
0b93f4ea
PP
1826 "stream.event.header.action.lucky has the correct field path");
1827 BT_PUT(ft_src);
1828
1829 /* stream.event.header.stiff */
1830 ft_src = get_ft(eh, "stiff", NULL);
1831 ok(!validate_field_path(ft_src,
50842bdc 1832 BT_SCOPE_STREAM_PACKET_CONTEXT, 4, 1, 1, FIELD_PATH_END),
0b93f4ea
PP
1833 "stream.event.header.stiff has the correct field path");
1834 BT_PUT(ft_src);
1835
1836 /* stream.event.header.fruit.apple */
1837 ft_src = get_ft(eh, "fruit", "apple", NULL);
1838 ok(!validate_field_path(ft_src,
50842bdc 1839 BT_SCOPE_STREAM_EVENT_HEADER, 2, 0, FIELD_PATH_END),
0b93f4ea
PP
1840 "stream.event.header.fruit.apple has the correct field path");
1841 BT_PUT(ft_src);
1842
1843 /* stream.event.context.face.branch */
1844 ft_src = get_ft(sec, "face", "branch", NULL);
1845 ok(!validate_field_path(ft_src,
50842bdc 1846 BT_SCOPE_STREAM_PACKET_CONTEXT, 2, FIELD_PATH_END),
0b93f4ea
PP
1847 "stream.event.context.face.branch has the correct field path");
1848 BT_PUT(ft_src);
1849
1850 /* stream.event.context.face.income */
1851 ft_src = get_ft(sec, "face", "income", NULL);
1852 ok(!validate_field_path(ft_src,
50842bdc 1853 BT_SCOPE_TRACE_PACKET_HEADER, 0, FIELD_PATH_END),
0b93f4ea
PP
1854 "stream.event.context.face.income has the correct field path");
1855 BT_PUT(ft_src);
1856
1857 /* stream.event.context.face.lucky */
1858 ft_src = get_ft(sec, "face", "lucky", NULL);
1859 ok(!validate_field_path(ft_src,
50842bdc 1860 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1861 "stream.event.context.face.lucky has the correct field path");
1862 BT_PUT(ft_src);
1863
1864 /* stream.event.context.dream */
1865 ft_src = get_ft(sec, "dream", NULL);
1866 ok(!validate_field_path(ft_src,
50842bdc 1867 BT_SCOPE_STREAM_PACKET_CONTEXT, 0, FIELD_PATH_END),
0b93f4ea
PP
1868 "stream.event.context.dream has the correct field path");
1869 BT_PUT(ft_src);
1870
1871 /* stream.event.context.dream.[element] */
1872 ft_src = get_ft(sec, "dream", "", NULL);
1873 ok(!validate_field_path(ft_src,
50842bdc 1874 BT_SCOPE_TRACE_PACKET_HEADER, 3, 1, FIELD_PATH_END),
0b93f4ea
PP
1875 "stream.event.context.dream.[element] has the correct field path");
1876 BT_PUT(ft_src);
1877
1878 /* stream.event.context.dream.[element].[element] */
1879 ft_src = get_ft(sec, "dream", "", "", NULL);
1880 ok(!validate_field_path(ft_src,
50842bdc 1881 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1882 "stream.event.context.dream.[element].[element] has the correct field path");
1883 BT_PUT(ft_src);
1884
1885 /* event.context.berry.porter */
1886 ft_src = get_ft(ectx, "berry", "porter", NULL);
1887 ok(!validate_field_path(ft_src,
50842bdc 1888 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1889 "event.context.berry.porter has the correct field path");
1890 BT_PUT(ft_src);
1891
1892 /* event.context.berry.porter */
1893 ft_src = get_ft(ectx, "berry", "porter", NULL);
1894 ok(!validate_field_path(ft_src,
50842bdc 1895 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1896 "event.context.berry.porter has the correct field path");
1897 BT_PUT(ft_src);
1898
1899 /* event.context.berry.mice */
1900 ft_src = get_ft(ectx, "berry", "mice", NULL);
1901 ok(!validate_field_path(ft_src,
50842bdc 1902 BT_SCOPE_STREAM_EVENT_HEADER, 2, 0, FIELD_PATH_END),
0b93f4ea
PP
1903 "event.context.berry.mice has the correct field path");
1904 BT_PUT(ft_src);
1905
1906 /* event.context.berry.guard */
1907 ft_src = get_ft(ectx, "berry", "guard", NULL);
1908 ok(!validate_field_path(ft_src,
50842bdc 1909 BT_SCOPE_STREAM_PACKET_CONTEXT, 4, 0, FIELD_PATH_END),
0b93f4ea
PP
1910 "event.context.berry.guard has the correct field path");
1911 BT_PUT(ft_src);
1912
1913 /* event.context.berry.one */
1914 ft_src = get_ft(ectx, "berry", "one", NULL);
1915 ok(!validate_field_path(ft_src,
50842bdc 1916 BT_SCOPE_TRACE_PACKET_HEADER, 3, 3, 0, FIELD_PATH_END),
0b93f4ea
PP
1917 "event.context.berry.one has the correct field path");
1918 BT_PUT(ft_src);
1919
1920 /* event.context.loud.toys */
1921 ft_src = get_ft(ectx, "loud", "toys", NULL);
1922 ok(!validate_field_path(ft_src,
50842bdc 1923 BT_SCOPE_TRACE_PACKET_HEADER, 3, 3, 0, FIELD_PATH_END),
0b93f4ea
PP
1924 "event.context.loud.toys has the correct field path");
1925 BT_PUT(ft_src);
1926
1927 /* event.context.loud.spoon */
1928 ft_src = get_ft(ectx, "loud", "spoon", NULL);
1929 ok(!validate_field_path(ft_src,
50842bdc 1930 BT_SCOPE_STREAM_PACKET_CONTEXT, 4, 0, FIELD_PATH_END),
0b93f4ea
PP
1931 "event.context.loud.spoon has the correct field path");
1932 BT_PUT(ft_src);
1933
1934 /* event.context.loud.turkey */
1935 ft_src = get_ft(ectx, "loud", "turkey", NULL);
1936 ok(!validate_field_path(ft_src,
50842bdc 1937 BT_SCOPE_STREAM_EVENT_HEADER, 2, 0, FIELD_PATH_END),
0b93f4ea
PP
1938 "event.context.loud.turkey has the correct field path");
1939 BT_PUT(ft_src);
1940
1941 /* event.context.loud.inform */
1942 ft_src = get_ft(ectx, "loud", "inform", NULL);
1943 ok(!validate_field_path(ft_src,
50842bdc 1944 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1945 "event.context.loud.inform has the correct field path");
1946 BT_PUT(ft_src);
1947
1948 /* event.context.loud.odd */
1949 ft_src = get_ft(ectx, "loud", "odd", NULL);
1950 ok(!validate_field_path(ft_src,
50842bdc 1951 BT_SCOPE_EVENT_CONTEXT, 1, 3, FIELD_PATH_END),
0b93f4ea
PP
1952 "event.context.loud.odd has the correct field path");
1953 BT_PUT(ft_src);
1954
1955 /* event.context.loud.amuck */
1956 ft_src = get_ft(ectx, "loud", "amuck", NULL);
1957 ok(!validate_field_path(ft_src,
50842bdc 1958 BT_SCOPE_EVENT_CONTEXT, 0, FIELD_PATH_END),
0b93f4ea
PP
1959 "event.context.loud.amuck has the correct field path");
1960 BT_PUT(ft_src);
1961
1962 /* event.fields.relative.equal */
1963 ft_src = get_ft(ep, "relative", "equal", NULL);
1964 ok(!validate_field_path(ft_src,
50842bdc 1965 BT_SCOPE_EVENT_FIELDS, 0, FIELD_PATH_END),
0b93f4ea
PP
1966 "event.fields.relative.equal has the correct field path");
1967 BT_PUT(ft_src);
1968
1969 /* event.fields.relative.amuck */
1970 ft_src = get_ft(ep, "relative", "amuck", NULL);
1971 ok(!validate_field_path(ft_src,
50842bdc 1972 BT_SCOPE_STREAM_EVENT_HEADER, 0, FIELD_PATH_END),
0b93f4ea
PP
1973 "event.fields.relative.amuck has the correct field path");
1974 BT_PUT(ft_src);
1975
1976 /* event.fields.relative.push */
1977 ft_src = get_ft(ep, "relative", "push", NULL);
1978 ok(!validate_field_path(ft_src,
50842bdc 1979 BT_SCOPE_EVENT_CONTEXT, 1, 3, FIELD_PATH_END),
0b93f4ea
PP
1980 "event.fields.relative.push has the correct field path");
1981 BT_PUT(ft_src);
1982
1983 /* event.fields.relative.brick */
1984 ft_src = get_ft(ep, "relative", "brick", NULL);
1985 ok(!validate_field_path(ft_src,
50842bdc 1986 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
1987 "event.fields.relative.brick has the correct field path");
1988 BT_PUT(ft_src);
1989
1990 /* event.fields.relative.crush */
1991 ft_src = get_ft(ep, "relative", "crush", NULL);
1992 ok(!validate_field_path(ft_src,
50842bdc 1993 BT_SCOPE_STREAM_PACKET_CONTEXT, 2, FIELD_PATH_END),
0b93f4ea
PP
1994 "event.fields.relative.crush has the correct field path");
1995 BT_PUT(ft_src);
1996
1997 /* event.fields.relative.canvas */
1998 ft_src = get_ft(ep, "relative", "canvas", NULL);
1999 ok(!validate_field_path(ft_src,
50842bdc 2000 BT_SCOPE_TRACE_PACKET_HEADER, 3, 1, FIELD_PATH_END),
0b93f4ea
PP
2001 "event.fields.relative.canvas has the correct field path");
2002 BT_PUT(ft_src);
2003
2004 /* event.fields.absolute.equal */
2005 ft_src = get_ft(ep, "absolute", "equal", NULL);
2006 ok(!validate_field_path(ft_src,
50842bdc 2007 BT_SCOPE_EVENT_FIELDS, 0, FIELD_PATH_END),
0b93f4ea
PP
2008 "event.fields.absolute.equal has the correct field path");
2009 BT_PUT(ft_src);
2010
2011 /* event.fields.absolute.amuck */
2012 ft_src = get_ft(ep, "absolute", "amuck", NULL);
2013 ok(!validate_field_path(ft_src,
50842bdc 2014 BT_SCOPE_STREAM_EVENT_HEADER, 0, FIELD_PATH_END),
0b93f4ea
PP
2015 "event.fields.absolute.amuck has the correct field path");
2016 BT_PUT(ft_src);
2017
2018 /* event.fields.absolute.push */
2019 ft_src = get_ft(ep, "absolute", "push", NULL);
2020 ok(!validate_field_path(ft_src,
50842bdc 2021 BT_SCOPE_EVENT_CONTEXT, 1, 3, FIELD_PATH_END),
0b93f4ea
PP
2022 "event.fields.absolute.push has the correct field path");
2023 BT_PUT(ft_src);
2024
2025 /* event.fields.absolute.brick */
2026 ft_src = get_ft(ep, "absolute", "brick", NULL);
2027 ok(!validate_field_path(ft_src,
50842bdc 2028 BT_SCOPE_STREAM_EVENT_CONTEXT, 0, 2, FIELD_PATH_END),
0b93f4ea
PP
2029 "event.fields.absolute.brick has the correct field path");
2030 BT_PUT(ft_src);
2031
2032 /* event.fields.absolute.crush */
2033 ft_src = get_ft(ep, "absolute", "crush", NULL);
2034 ok(!validate_field_path(ft_src,
50842bdc 2035 BT_SCOPE_STREAM_PACKET_CONTEXT, 2, FIELD_PATH_END),
0b93f4ea
PP
2036 "event.fields.absolute.crush has the correct field path");
2037 BT_PUT(ft_src);
2038
2039 /* event.fields.absolute.canvas */
2040 ft_src = get_ft(ep, "absolute", "canvas", NULL);
2041 ok(!validate_field_path(ft_src,
50842bdc 2042 BT_SCOPE_TRACE_PACKET_HEADER, 3, 1, FIELD_PATH_END),
0b93f4ea
PP
2043 "event.fields.absolute.canvas has the correct field path");
2044 BT_PUT(ft_src);
2045
2046 BT_PUT(ft_src);
2047 BT_PUT(ft_target);
2048 BT_PUT(ph);
2049 BT_PUT(pc);
2050 BT_PUT(eh);
2051 BT_PUT(sec);
2052 BT_PUT(ectx);
2053 BT_PUT(ep);
2054 BT_PUT(sc);
2055 BT_PUT(ec);
2056}
2057
2058static
2059void test_pass(void)
2060{
2061 int ret;
50842bdc
PP
2062 struct bt_trace *trace;
2063 struct bt_stream_class *sc;
2064 struct bt_event_class *ec;
2065 struct bt_field_type *ph;
2066 struct bt_field_type *pc;
2067 struct bt_field_type *eh;
2068 struct bt_field_type *sec;
2069 struct bt_field_type *ectx;
2070 struct bt_field_type *ep;
2071
2072 trace = bt_trace_create();
25583cd0 2073 BT_ASSERT(trace);
50842bdc 2074 sc = bt_stream_class_create("nice_piece_of_stream_class");
25583cd0 2075 BT_ASSERT(sc);
50842bdc 2076 ec = bt_event_class_create("oh_what_an_event_class");
25583cd0 2077 BT_ASSERT(ec);
0b93f4ea 2078
3dca2276 2079 ph = get_good_packet_header_field_type();
25583cd0 2080 BT_ASSERT(ph);
3dca2276 2081 pc = get_good_packet_context_field_type();
25583cd0 2082 BT_ASSERT(pc);
3dca2276 2083 eh = get_good_event_header_field_type();
25583cd0 2084 BT_ASSERT(eh);
3dca2276 2085 sec = get_good_stream_event_context_field_type();
25583cd0 2086 BT_ASSERT(sec);
3dca2276 2087 ectx = get_good_event_context_field_type();
25583cd0 2088 BT_ASSERT(ec);
3dca2276 2089 ep = get_good_event_payload_field_type();
25583cd0 2090 BT_ASSERT(ep);
0b93f4ea 2091
3dca2276 2092 ret = bt_trace_set_packet_header_field_type(trace, ph);
25583cd0 2093 BT_ASSERT(ret == 0);
3dca2276 2094 ret = bt_stream_class_set_packet_context_field_type(sc, pc);
25583cd0 2095 BT_ASSERT(ret == 0);
3dca2276 2096 ret = bt_stream_class_set_event_header_field_type(sc, eh);
25583cd0 2097 BT_ASSERT(ret == 0);
3dca2276 2098 ret = bt_stream_class_set_event_context_field_type(sc, sec);
25583cd0 2099 BT_ASSERT(ret == 0);
3dca2276 2100 ret = bt_event_class_set_context_field_type(ec, ectx);
25583cd0 2101 BT_ASSERT(ret == 0);
3dca2276 2102 ret = bt_event_class_set_payload_field_type(ec, ep);
25583cd0 2103 BT_ASSERT(ret == 0);
0b93f4ea 2104
50842bdc 2105 ret = bt_stream_class_add_event_class(sc, ec);
25583cd0 2106 BT_ASSERT(ret == 0);
0b93f4ea
PP
2107
2108 /* Validation happens here */
50842bdc 2109 ret = bt_trace_add_stream_class(trace, sc);
0b93f4ea
PP
2110 ok(ret == 0, "Valid type system is considered valid");
2111
2112 validate_test_pass(trace);
2113
2114 BT_PUT(ph);
2115 BT_PUT(pc);
2116 BT_PUT(eh);
2117 BT_PUT(sec);
2118 BT_PUT(ectx);
2119 BT_PUT(ep);
2120 BT_PUT(trace);
2121 BT_PUT(sc);
2122 BT_PUT(ec);
2123}
2124
2125static
3dca2276
PP
2126int try_add_event_class_to_trace(struct bt_field_type *ectx,
2127 struct bt_field_type *ep)
0b93f4ea
PP
2128{
2129 int ret;
3dca2276 2130 struct bt_trace *trace;
50842bdc
PP
2131 struct bt_stream_class *sc;
2132 struct bt_event_class *ec;
0b93f4ea 2133
3dca2276 2134 trace = bt_trace_create();
25583cd0 2135 BT_ASSERT(trace);
50842bdc 2136 sc = bt_stream_class_create("sc");
25583cd0 2137 BT_ASSERT(sc);
50842bdc 2138 ec = bt_event_class_create("ec");
25583cd0 2139 BT_ASSERT(ec);
0b93f4ea
PP
2140
2141 if (ectx) {
3dca2276 2142 ret = bt_event_class_set_context_field_type(ec, ectx);
25583cd0 2143 BT_ASSERT(ret == 0);
0b93f4ea
PP
2144 }
2145
2146 if (ep) {
3dca2276 2147 ret = bt_event_class_set_payload_field_type(ec, ep);
25583cd0 2148 BT_ASSERT(ret == 0);
0b93f4ea
PP
2149 }
2150
50842bdc 2151 ret = bt_stream_class_add_event_class(sc, ec);
25583cd0 2152 BT_ASSERT(ret == 0);
3dca2276 2153 ret = bt_trace_add_stream_class(trace, sc);
0b93f4ea
PP
2154 BT_PUT(ec);
2155 BT_PUT(sc);
3dca2276
PP
2156 BT_PUT(trace);
2157 return ret;
0b93f4ea
PP
2158}
2159
0b93f4ea 2160static
50842bdc 2161struct bt_field_type *test_fail_unavailable_root_get_event_payload(void)
0b93f4ea
PP
2162{
2163 /*
2164 Generated by bt-ctfirtg using the following input:
2165
2166 class: struct
2167 fields:
2168 a:
2169 class: int
2170 size: 32
2171 b:
2172 class: array
2173 length: stream.event.context.lol
2174 element-type:
2175 class: string
2176 c:
2177 class: string
2178
2179 */
2180
50842bdc
PP
2181 struct bt_field_type *root = NULL;
2182 struct bt_field_type *root_a = NULL;
2183 struct bt_field_type *root_b = NULL;
2184 struct bt_field_type *root_b_elem = NULL;
2185 struct bt_field_type *root_c = NULL;
0b93f4ea
PP
2186
2187 int ret;
50842bdc 2188 root = bt_field_type_structure_create();
25583cd0 2189 BT_ASSERT(root);
50842bdc 2190 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2191 BT_ASSERT(ret == 0);
50842bdc 2192 root_a = bt_field_type_integer_create(32);
25583cd0 2193 BT_ASSERT(root_a);
3dca2276 2194 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2195 BT_ASSERT(ret == 0);
50842bdc 2196 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2197 BT_ASSERT(ret == 0);
50842bdc 2198 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2199 BT_ASSERT(ret == 0);
50842bdc 2200 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2201 BT_ASSERT(ret == 0);
50842bdc 2202 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2203 BT_ASSERT(ret == 0);
50842bdc 2204 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2205 BT_ASSERT(ret == 0);
50842bdc 2206 root_b_elem = bt_field_type_string_create();
25583cd0 2207 BT_ASSERT(root_b_elem);
50842bdc 2208 ret = bt_field_type_string_set_encoding(root_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2209 BT_ASSERT(ret == 0);
50842bdc 2210 root_b = bt_field_type_sequence_create(root_b_elem, "stream.event.context.lol");
25583cd0 2211 BT_ASSERT(root_b);
50842bdc 2212 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2213 BT_ASSERT(ret == 0);
50842bdc 2214 root_c = bt_field_type_string_create();
25583cd0 2215 BT_ASSERT(root_c);
50842bdc 2216 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2217 BT_ASSERT(ret == 0);
50842bdc 2218 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2219 BT_ASSERT(ret == 0);
0b93f4ea
PP
2220
2221 BT_PUT(root_a);
2222 BT_PUT(root_b);
2223 BT_PUT(root_b_elem);
2224 BT_PUT(root_c);
2225
2226 return root;
2227}
2228
2229static
2230void test_fail_unavailable_root(void)
2231{
50842bdc 2232 struct bt_field_type *ep;
0b93f4ea
PP
2233
2234 ep = test_fail_unavailable_root_get_event_payload();
25583cd0 2235 BT_ASSERT(ep);
3dca2276
PP
2236 ok(try_add_event_class_to_trace(NULL, ep),
2237 "Sequence FT with length in unavailable root is invalid");
0b93f4ea
PP
2238
2239 BT_PUT(ep);
0b93f4ea
PP
2240}
2241
2242static
50842bdc 2243struct bt_field_type *test_fail_target_is_root_get_event_payload(void)
0b93f4ea
PP
2244{
2245 /*
2246 Generated by bt-ctfirtg using the following input:
2247
2248 class: struct
2249 fields:
2250 a:
2251 class: int
2252 size: 32
2253 b:
2254 class: array
2255 length: event.fields
2256 element-type:
2257 class: string
2258 c:
2259 class: string
2260
2261 */
2262
50842bdc
PP
2263 struct bt_field_type *root = NULL;
2264 struct bt_field_type *root_a = NULL;
2265 struct bt_field_type *root_b = NULL;
2266 struct bt_field_type *root_b_elem = NULL;
2267 struct bt_field_type *root_c = NULL;
0b93f4ea
PP
2268
2269 int ret;
50842bdc 2270 root = bt_field_type_structure_create();
25583cd0 2271 BT_ASSERT(root);
50842bdc 2272 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2273 BT_ASSERT(ret == 0);
50842bdc 2274 root_a = bt_field_type_integer_create(32);
25583cd0 2275 BT_ASSERT(root_a);
3dca2276 2276 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2277 BT_ASSERT(ret == 0);
50842bdc 2278 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2279 BT_ASSERT(ret == 0);
50842bdc 2280 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2281 BT_ASSERT(ret == 0);
50842bdc 2282 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2283 BT_ASSERT(ret == 0);
50842bdc 2284 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2285 BT_ASSERT(ret == 0);
50842bdc 2286 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2287 BT_ASSERT(ret == 0);
50842bdc 2288 root_b_elem = bt_field_type_string_create();
25583cd0 2289 BT_ASSERT(root_b_elem);
50842bdc 2290 ret = bt_field_type_string_set_encoding(root_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2291 BT_ASSERT(ret == 0);
50842bdc 2292 root_b = bt_field_type_sequence_create(root_b_elem, "event.fields");
25583cd0 2293 BT_ASSERT(root_b);
50842bdc 2294 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2295 BT_ASSERT(ret == 0);
50842bdc 2296 root_c = bt_field_type_string_create();
25583cd0 2297 BT_ASSERT(root_c);
50842bdc 2298 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2299 BT_ASSERT(ret == 0);
50842bdc 2300 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2301 BT_ASSERT(ret == 0);
0b93f4ea
PP
2302
2303 BT_PUT(root_a);
2304 BT_PUT(root_b);
2305 BT_PUT(root_b_elem);
2306 BT_PUT(root_c);
2307
2308 return root;
2309}
2310
2311static
2312void test_fail_target_is_root(void)
2313{
50842bdc 2314 struct bt_field_type *ep;
0b93f4ea
PP
2315
2316 ep = test_fail_target_is_root_get_event_payload();
25583cd0 2317 BT_ASSERT(ep);
3dca2276
PP
2318 ok(try_add_event_class_to_trace(NULL, ep),
2319 "Sequence FT with root as its length is invalid");
0b93f4ea 2320 BT_PUT(ep);
0b93f4ea
PP
2321}
2322
2323static
50842bdc 2324struct bt_field_type *test_fail_target_is_after_source_get_ep(void)
0b93f4ea
PP
2325{
2326 /*
2327 Generated by bt-ctfirtg using the following input:
2328
2329 class: struct
2330 fields:
2331 a:
2332 class: int
2333 size: 32
2334 b:
2335 class: array
2336 length: d
2337 element-type:
2338 class: string
2339 c:
2340 class: string
2341 d:
2342 class: int
2343 size: 17
2344
2345 */
2346
50842bdc
PP
2347 struct bt_field_type *root = NULL;
2348 struct bt_field_type *root_a = NULL;
2349 struct bt_field_type *root_b = NULL;
2350 struct bt_field_type *root_b_elem = NULL;
2351 struct bt_field_type *root_c = NULL;
2352 struct bt_field_type *root_d = NULL;
0b93f4ea
PP
2353
2354 int ret;
50842bdc 2355 root = bt_field_type_structure_create();
25583cd0 2356 BT_ASSERT(root);
50842bdc 2357 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2358 BT_ASSERT(ret == 0);
50842bdc 2359 root_a = bt_field_type_integer_create(32);
25583cd0 2360 BT_ASSERT(root_a);
3dca2276 2361 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2362 BT_ASSERT(ret == 0);
50842bdc 2363 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2364 BT_ASSERT(ret == 0);
50842bdc 2365 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2366 BT_ASSERT(ret == 0);
50842bdc 2367 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2368 BT_ASSERT(ret == 0);
50842bdc 2369 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2370 BT_ASSERT(ret == 0);
50842bdc 2371 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2372 BT_ASSERT(ret == 0);
50842bdc 2373 root_b_elem = bt_field_type_string_create();
25583cd0 2374 BT_ASSERT(root_b_elem);
50842bdc 2375 ret = bt_field_type_string_set_encoding(root_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2376 BT_ASSERT(ret == 0);
50842bdc 2377 root_b = bt_field_type_sequence_create(root_b_elem, "d");
25583cd0 2378 BT_ASSERT(root_b);
50842bdc 2379 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2380 BT_ASSERT(ret == 0);
50842bdc 2381 root_c = bt_field_type_string_create();
25583cd0 2382 BT_ASSERT(root_c);
50842bdc 2383 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2384 BT_ASSERT(ret == 0);
50842bdc 2385 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2386 BT_ASSERT(ret == 0);
50842bdc 2387 root_d = bt_field_type_integer_create(17);
25583cd0 2388 BT_ASSERT(root_d);
3dca2276 2389 ret = bt_field_type_integer_set_is_signed(root_d, 0);
25583cd0 2390 BT_ASSERT(ret == 0);
50842bdc 2391 ret = bt_field_type_integer_set_base(root_d, 10);
25583cd0 2392 BT_ASSERT(ret == 0);
50842bdc 2393 ret = bt_field_type_integer_set_encoding(root_d, BT_STRING_ENCODING_NONE);
25583cd0 2394 BT_ASSERT(ret == 0);
50842bdc 2395 ret = bt_field_type_set_byte_order(root_d, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2396 BT_ASSERT(ret == 0);
50842bdc 2397 ret = bt_field_type_set_alignment(root_d, 1);
25583cd0 2398 BT_ASSERT(ret == 0);
50842bdc 2399 ret = bt_field_type_structure_add_field(root, root_d, "d");
25583cd0 2400 BT_ASSERT(ret == 0);
0b93f4ea
PP
2401
2402 BT_PUT(root_a);
2403 BT_PUT(root_b);
2404 BT_PUT(root_b_elem);
2405 BT_PUT(root_c);
2406 BT_PUT(root_d);
2407
2408 return root;
2409}
2410
2411static
2412void test_fail_target_is_after_source(void)
2413{
50842bdc 2414 struct bt_field_type *ep;
0b93f4ea
PP
2415
2416 ep = test_fail_target_is_after_source_get_ep();
25583cd0 2417 BT_ASSERT(ep);
3dca2276
PP
2418 ok(try_add_event_class_to_trace(NULL, ep),
2419 "Sequence FT with length after it is invalid");
0b93f4ea 2420 BT_PUT(ep);
0b93f4ea
PP
2421}
2422
2423static
50842bdc 2424struct bt_field_type *test_fail_target_is_ancestor_of_source_get_ep(void)
0b93f4ea
PP
2425{
2426 /*
2427 Generated by bt-ctfirtg using the following input:
2428
2429 class: struct
2430 fields:
2431 a:
2432 class: int
2433 size: 32
2434 z:
2435 class: struct
2436 fields:
2437 b:
2438 class: array
2439 length: z
2440 element-type:
2441 class: string
2442 c:
2443 class: string
2444 d:
2445 class: int
2446 size: 17
2447
2448 */
2449
50842bdc
PP
2450 struct bt_field_type *root = NULL;
2451 struct bt_field_type *root_a = NULL;
2452 struct bt_field_type *root_z = NULL;
2453 struct bt_field_type *root_z_b = NULL;
2454 struct bt_field_type *root_z_b_elem = NULL;
2455 struct bt_field_type *root_c = NULL;
2456 struct bt_field_type *root_d = NULL;
0b93f4ea
PP
2457
2458 int ret;
50842bdc 2459 root = bt_field_type_structure_create();
25583cd0 2460 BT_ASSERT(root);
50842bdc 2461 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2462 BT_ASSERT(ret == 0);
50842bdc 2463 root_a = bt_field_type_integer_create(32);
25583cd0 2464 BT_ASSERT(root_a);
3dca2276 2465 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2466 BT_ASSERT(ret == 0);
50842bdc 2467 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2468 BT_ASSERT(ret == 0);
50842bdc 2469 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2470 BT_ASSERT(ret == 0);
50842bdc 2471 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2472 BT_ASSERT(ret == 0);
50842bdc 2473 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2474 BT_ASSERT(ret == 0);
50842bdc 2475 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2476 BT_ASSERT(ret == 0);
50842bdc 2477 root_z = bt_field_type_structure_create();
25583cd0 2478 BT_ASSERT(root_z);
50842bdc 2479 ret = bt_field_type_set_alignment(root_z, 8);
25583cd0 2480 BT_ASSERT(ret == 0);
50842bdc 2481 root_z_b_elem = bt_field_type_string_create();
25583cd0 2482 BT_ASSERT(root_z_b_elem);
50842bdc 2483 ret = bt_field_type_string_set_encoding(root_z_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2484 BT_ASSERT(ret == 0);
50842bdc 2485 root_z_b = bt_field_type_sequence_create(root_z_b_elem, "z");
25583cd0 2486 BT_ASSERT(root_z_b);
50842bdc 2487 ret = bt_field_type_structure_add_field(root_z, root_z_b, "b");
25583cd0 2488 BT_ASSERT(ret == 0);
50842bdc 2489 ret = bt_field_type_structure_add_field(root, root_z, "z");
25583cd0 2490 BT_ASSERT(ret == 0);
50842bdc 2491 root_c = bt_field_type_string_create();
25583cd0 2492 BT_ASSERT(root_c);
50842bdc 2493 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2494 BT_ASSERT(ret == 0);
50842bdc 2495 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2496 BT_ASSERT(ret == 0);
50842bdc 2497 root_d = bt_field_type_integer_create(17);
25583cd0 2498 BT_ASSERT(root_d);
3dca2276 2499 ret = bt_field_type_integer_set_is_signed(root_d, 0);
25583cd0 2500 BT_ASSERT(ret == 0);
50842bdc 2501 ret = bt_field_type_integer_set_base(root_d, 10);
25583cd0 2502 BT_ASSERT(ret == 0);
50842bdc 2503 ret = bt_field_type_integer_set_encoding(root_d, BT_STRING_ENCODING_NONE);
25583cd0 2504 BT_ASSERT(ret == 0);
50842bdc 2505 ret = bt_field_type_set_byte_order(root_d, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2506 BT_ASSERT(ret == 0);
50842bdc 2507 ret = bt_field_type_set_alignment(root_d, 1);
25583cd0 2508 BT_ASSERT(ret == 0);
50842bdc 2509 ret = bt_field_type_structure_add_field(root, root_d, "d");
25583cd0 2510 BT_ASSERT(ret == 0);
0b93f4ea
PP
2511
2512 BT_PUT(root_a);
2513 BT_PUT(root_z);
2514 BT_PUT(root_z_b);
2515 BT_PUT(root_z_b_elem);
2516 BT_PUT(root_c);
2517 BT_PUT(root_d);
2518
2519 return root;
2520}
2521
2522static
2523void test_fail_target_is_ancestor_of_source(void)
2524{
50842bdc 2525 struct bt_field_type *ep;
0b93f4ea
PP
2526
2527 ep = test_fail_target_is_ancestor_of_source_get_ep();
25583cd0 2528 BT_ASSERT(ep);
3dca2276
PP
2529 ok(try_add_event_class_to_trace(NULL, ep),
2530 "Sequence FT with ancestor as its length is invalid");
0b93f4ea 2531 BT_PUT(ep);
0b93f4ea
PP
2532}
2533
2534static
50842bdc 2535struct bt_field_type *test_fail_target_is_source_get_event_payload(void)
0b93f4ea
PP
2536{
2537 /*
2538 Generated by bt-ctfirtg using the following input:
2539
2540 class: struct
2541 fields:
2542 a:
2543 class: int
2544 size: 32
2545 b:
2546 class: array
2547 length: event.fields.b
2548 element-type:
2549 class: string
2550 c:
2551 class: string
2552 d:
2553 class: int
2554 size: 17
2555
2556 */
2557
50842bdc
PP
2558 struct bt_field_type *root = NULL;
2559 struct bt_field_type *root_a = NULL;
2560 struct bt_field_type *root_b = NULL;
2561 struct bt_field_type *root_b_elem = NULL;
2562 struct bt_field_type *root_c = NULL;
2563 struct bt_field_type *root_d = NULL;
0b93f4ea
PP
2564
2565 int ret;
50842bdc 2566 root = bt_field_type_structure_create();
25583cd0 2567 BT_ASSERT(root);
50842bdc 2568 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2569 BT_ASSERT(ret == 0);
50842bdc 2570 root_a = bt_field_type_integer_create(32);
25583cd0 2571 BT_ASSERT(root_a);
3dca2276 2572 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2573 BT_ASSERT(ret == 0);
50842bdc 2574 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2575 BT_ASSERT(ret == 0);
50842bdc 2576 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2577 BT_ASSERT(ret == 0);
50842bdc 2578 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2579 BT_ASSERT(ret == 0);
50842bdc 2580 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2581 BT_ASSERT(ret == 0);
50842bdc 2582 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2583 BT_ASSERT(ret == 0);
50842bdc 2584 root_b_elem = bt_field_type_string_create();
25583cd0 2585 BT_ASSERT(root_b_elem);
50842bdc 2586 ret = bt_field_type_string_set_encoding(root_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2587 BT_ASSERT(ret == 0);
50842bdc 2588 root_b = bt_field_type_sequence_create(root_b_elem, "event.fields.b");
25583cd0 2589 BT_ASSERT(root_b);
50842bdc 2590 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2591 BT_ASSERT(ret == 0);
50842bdc 2592 root_c = bt_field_type_string_create();
25583cd0 2593 BT_ASSERT(root_c);
50842bdc 2594 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2595 BT_ASSERT(ret == 0);
50842bdc 2596 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2597 BT_ASSERT(ret == 0);
50842bdc 2598 root_d = bt_field_type_integer_create(17);
25583cd0 2599 BT_ASSERT(root_d);
3dca2276 2600 ret = bt_field_type_integer_set_is_signed(root_d, 0);
25583cd0 2601 BT_ASSERT(ret == 0);
50842bdc 2602 ret = bt_field_type_integer_set_base(root_d, 10);
25583cd0 2603 BT_ASSERT(ret == 0);
50842bdc 2604 ret = bt_field_type_integer_set_encoding(root_d, BT_STRING_ENCODING_NONE);
25583cd0 2605 BT_ASSERT(ret == 0);
50842bdc 2606 ret = bt_field_type_set_byte_order(root_d, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2607 BT_ASSERT(ret == 0);
50842bdc 2608 ret = bt_field_type_set_alignment(root_d, 1);
25583cd0 2609 BT_ASSERT(ret == 0);
50842bdc 2610 ret = bt_field_type_structure_add_field(root, root_d, "d");
25583cd0 2611 BT_ASSERT(ret == 0);
0b93f4ea
PP
2612
2613 BT_PUT(root_a);
2614 BT_PUT(root_b);
2615 BT_PUT(root_b_elem);
2616 BT_PUT(root_c);
2617 BT_PUT(root_d);
2618
2619 return root;
2620}
2621
2622static
2623void test_fail_target_is_source(void)
2624{
50842bdc 2625 struct bt_field_type *ep;
0b93f4ea
PP
2626
2627 ep = test_fail_target_is_source_get_event_payload();
25583cd0 2628 BT_ASSERT(ep);
3dca2276
PP
2629 ok(try_add_event_class_to_trace(NULL, ep),
2630 "Sequence FT with itself as its length is invalid");
0b93f4ea 2631 BT_PUT(ep);
0b93f4ea
PP
2632}
2633
2634static
50842bdc 2635struct bt_field_type *test_fail_variant_tag_is_not_enum_get_ep(void)
0b93f4ea
PP
2636{
2637 /*
2638 Generated by bt-ctfirtg using the following input:
2639
2640 class: struct
2641 fields:
2642 a:
2643 class: int
2644 size: 32
2645 b:
2646 class: variant
2647 tag: a
2648 types:
2649 HELLO:
2650 class: string
2651 c:
2652 class: string
2653 d:
2654 class: int
2655 size: 17
2656
2657 */
2658
50842bdc
PP
2659 struct bt_field_type *root = NULL;
2660 struct bt_field_type *root_a = NULL;
2661 struct bt_field_type *root_b = NULL;
2662 struct bt_field_type *root_b_HELLO = NULL;
2663 struct bt_field_type *root_c = NULL;
2664 struct bt_field_type *root_d = NULL;
0b93f4ea
PP
2665
2666 int ret;
50842bdc 2667 root = bt_field_type_structure_create();
25583cd0 2668 BT_ASSERT(root);
50842bdc 2669 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2670 BT_ASSERT(ret == 0);
50842bdc 2671 root_a = bt_field_type_integer_create(32);
25583cd0 2672 BT_ASSERT(root_a);
3dca2276 2673 ret = bt_field_type_integer_set_is_signed(root_a, 0);
25583cd0 2674 BT_ASSERT(ret == 0);
50842bdc 2675 ret = bt_field_type_integer_set_base(root_a, 10);
25583cd0 2676 BT_ASSERT(ret == 0);
50842bdc 2677 ret = bt_field_type_integer_set_encoding(root_a, BT_STRING_ENCODING_NONE);
25583cd0 2678 BT_ASSERT(ret == 0);
50842bdc 2679 ret = bt_field_type_set_byte_order(root_a, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2680 BT_ASSERT(ret == 0);
50842bdc 2681 ret = bt_field_type_set_alignment(root_a, 8);
25583cd0 2682 BT_ASSERT(ret == 0);
50842bdc 2683 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2684 BT_ASSERT(ret == 0);
50842bdc 2685 root_b = bt_field_type_variant_create(NULL, "a");
25583cd0 2686 BT_ASSERT(root_b);
50842bdc 2687 root_b_HELLO = bt_field_type_string_create();
25583cd0 2688 BT_ASSERT(root_b_HELLO);
50842bdc 2689 ret = bt_field_type_string_set_encoding(root_b_HELLO, BT_STRING_ENCODING_UTF8);
25583cd0 2690 BT_ASSERT(ret == 0);
50842bdc 2691 ret = bt_field_type_variant_add_field(root_b, root_b_HELLO, "HELLO");
25583cd0 2692 BT_ASSERT(ret == 0);
50842bdc 2693 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2694 BT_ASSERT(ret == 0);
50842bdc 2695 root_c = bt_field_type_string_create();
25583cd0 2696 BT_ASSERT(root_c);
50842bdc 2697 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2698 BT_ASSERT(ret == 0);
50842bdc 2699 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2700 BT_ASSERT(ret == 0);
50842bdc 2701 root_d = bt_field_type_integer_create(17);
25583cd0 2702 BT_ASSERT(root_d);
3dca2276 2703 ret = bt_field_type_integer_set_is_signed(root_d, 0);
25583cd0 2704 BT_ASSERT(ret == 0);
50842bdc 2705 ret = bt_field_type_integer_set_base(root_d, 10);
25583cd0 2706 BT_ASSERT(ret == 0);
50842bdc 2707 ret = bt_field_type_integer_set_encoding(root_d, BT_STRING_ENCODING_NONE);
25583cd0 2708 BT_ASSERT(ret == 0);
50842bdc 2709 ret = bt_field_type_set_byte_order(root_d, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2710 BT_ASSERT(ret == 0);
50842bdc 2711 ret = bt_field_type_set_alignment(root_d, 1);
25583cd0 2712 BT_ASSERT(ret == 0);
50842bdc 2713 ret = bt_field_type_structure_add_field(root, root_d, "d");
25583cd0 2714 BT_ASSERT(ret == 0);
0b93f4ea
PP
2715
2716 BT_PUT(root_a);
2717 BT_PUT(root_b);
2718 BT_PUT(root_b_HELLO);
2719 BT_PUT(root_c);
2720 BT_PUT(root_d);
2721
2722 return root;
2723}
2724
2725static
2726void test_fail_variant_tag_is_not_enum(void)
2727{
50842bdc 2728 struct bt_field_type *ep;
0b93f4ea
PP
2729
2730 ep = test_fail_variant_tag_is_not_enum_get_ep();
25583cd0 2731 BT_ASSERT(ep);
3dca2276
PP
2732 ok(try_add_event_class_to_trace(NULL, ep),
2733 "Variant FT with non-enum FT as its tag FT is invalid");
0b93f4ea 2734 BT_PUT(ep);
0b93f4ea
PP
2735}
2736
2737static
50842bdc 2738struct bt_field_type *test_fail_variant_tag_mismatch_mappings_get_ep(void)
0b93f4ea
PP
2739{
2740 /*
2741 Generated by bt-ctfirtg using the following input:
2742
2743 class: struct
2744 fields:
2745 a:
2746 class: enum
2747 value-type:
2748 class: int
2749 size: 16
2750 members:
2751 - GLASS
2752 - OF
2753 - WATER
2754 b:
2755 class: variant
2756 tag: a
2757 types:
2758 GLASS:
2759 class: string
2760 OF:
2761 class: int
2762 size: 2
2763 c:
2764 class: string
2765
2766 */
2767
50842bdc
PP
2768 struct bt_field_type *root = NULL;
2769 struct bt_field_type *root_a = NULL;
2770 struct bt_field_type *root_a_int = NULL;
2771 struct bt_field_type *root_b = NULL;
2772 struct bt_field_type *root_b_GLASS = NULL;
2773 struct bt_field_type *root_b_OF = NULL;
2774 struct bt_field_type *root_c = NULL;
0b93f4ea
PP
2775
2776 int ret;
50842bdc 2777 root = bt_field_type_structure_create();
25583cd0 2778 BT_ASSERT(root);
50842bdc 2779 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2780 BT_ASSERT(ret == 0);
50842bdc 2781 root_a_int = bt_field_type_integer_create(16);
25583cd0 2782 BT_ASSERT(root_a_int);
3dca2276 2783 ret = bt_field_type_integer_set_is_signed(root_a_int, 0);
25583cd0 2784 BT_ASSERT(ret == 0);
50842bdc 2785 ret = bt_field_type_integer_set_base(root_a_int, 10);
25583cd0 2786 BT_ASSERT(ret == 0);
50842bdc 2787 ret = bt_field_type_integer_set_encoding(root_a_int, BT_STRING_ENCODING_NONE);
25583cd0 2788 BT_ASSERT(ret == 0);
50842bdc 2789 ret = bt_field_type_set_byte_order(root_a_int, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2790 BT_ASSERT(ret == 0);
50842bdc 2791 ret = bt_field_type_set_alignment(root_a_int, 8);
25583cd0 2792 BT_ASSERT(ret == 0);
50842bdc 2793 root_a = bt_field_type_enumeration_create(root_a_int);
25583cd0 2794 BT_ASSERT(root_a);
3dca2276 2795 ret = bt_field_type_enumeration_unsigned_add_mapping(root_a, "GLASS", 0, 0);
25583cd0 2796 BT_ASSERT(ret == 0);
3dca2276 2797 ret = bt_field_type_enumeration_unsigned_add_mapping(root_a, "OF", 1, 1);
25583cd0 2798 BT_ASSERT(ret == 0);
3dca2276 2799 ret = bt_field_type_enumeration_unsigned_add_mapping(root_a, "WATER", 2, 2);
25583cd0 2800 BT_ASSERT(ret == 0);
50842bdc 2801 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2802 BT_ASSERT(ret == 0);
50842bdc 2803 root_b = bt_field_type_variant_create(NULL, "a");
25583cd0 2804 BT_ASSERT(root_b);
50842bdc 2805 root_b_GLASS = bt_field_type_string_create();
25583cd0 2806 BT_ASSERT(root_b_GLASS);
50842bdc 2807 ret = bt_field_type_string_set_encoding(root_b_GLASS, BT_STRING_ENCODING_UTF8);
25583cd0 2808 BT_ASSERT(ret == 0);
50842bdc 2809 ret = bt_field_type_variant_add_field(root_b, root_b_GLASS, "GLASS");
25583cd0 2810 BT_ASSERT(ret == 0);
50842bdc 2811 root_b_OF = bt_field_type_integer_create(2);
25583cd0 2812 BT_ASSERT(root_b_OF);
3dca2276 2813 ret = bt_field_type_integer_set_is_signed(root_b_OF, 0);
25583cd0 2814 BT_ASSERT(ret == 0);
50842bdc 2815 ret = bt_field_type_integer_set_base(root_b_OF, 10);
25583cd0 2816 BT_ASSERT(ret == 0);
50842bdc 2817 ret = bt_field_type_integer_set_encoding(root_b_OF, BT_STRING_ENCODING_NONE);
25583cd0 2818 BT_ASSERT(ret == 0);
50842bdc 2819 ret = bt_field_type_set_byte_order(root_b_OF, BT_BYTE_ORDER_LITTLE_ENDIAN);
25583cd0 2820 BT_ASSERT(ret == 0);
50842bdc 2821 ret = bt_field_type_set_alignment(root_b_OF, 1);
25583cd0 2822 BT_ASSERT(ret == 0);
50842bdc 2823 ret = bt_field_type_variant_add_field(root_b, root_b_OF, "OF");
25583cd0 2824 BT_ASSERT(ret == 0);
50842bdc 2825 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2826 BT_ASSERT(ret == 0);
50842bdc 2827 root_c = bt_field_type_string_create();
25583cd0 2828 BT_ASSERT(root_c);
50842bdc 2829 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2830 BT_ASSERT(ret == 0);
50842bdc 2831 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2832 BT_ASSERT(ret == 0);
0b93f4ea
PP
2833
2834 BT_PUT(root_a);
2835 BT_PUT(root_a_int);
2836 BT_PUT(root_b);
2837 BT_PUT(root_b_GLASS);
2838 BT_PUT(root_b_OF);
2839 BT_PUT(root_c);
2840
2841 return root;
2842}
2843
2844static
2845void test_fail_variant_tag_mismatch_mappings(void)
2846{
50842bdc 2847 struct bt_field_type *ep;
0b93f4ea
PP
2848
2849 ep = test_fail_variant_tag_mismatch_mappings_get_ep();
25583cd0 2850 BT_ASSERT(ep);
3dca2276
PP
2851 ok(try_add_event_class_to_trace(NULL, ep) == 0,
2852 "Variant FT with mismatching tag FT is valid");
0b93f4ea 2853 BT_PUT(ep);
0b93f4ea
PP
2854}
2855
2856static
50842bdc 2857struct bt_field_type *test_fail_sequence_tag_is_not_int_get_ep(void)
0b93f4ea
PP
2858{
2859 /*
2860 Generated by bt-ctfirtg using the following input:
2861
2862 class: struct
2863 fields:
2864 a:
2865 class: string
2866 b:
2867 class: array
2868 length: a
2869 element-type:
2870 class: string
2871 c:
2872 class: string
2873
2874 */
2875
50842bdc
PP
2876 struct bt_field_type *root = NULL;
2877 struct bt_field_type *root_a = NULL;
2878 struct bt_field_type *root_b = NULL;
2879 struct bt_field_type *root_b_elem = NULL;
2880 struct bt_field_type *root_c = NULL;
0b93f4ea
PP
2881
2882 int ret;
50842bdc 2883 root = bt_field_type_structure_create();
25583cd0 2884 BT_ASSERT(root);
50842bdc 2885 ret = bt_field_type_set_alignment(root, 8);
25583cd0 2886 BT_ASSERT(ret == 0);
50842bdc 2887 root_a = bt_field_type_string_create();
25583cd0 2888 BT_ASSERT(root_a);
50842bdc 2889 ret = bt_field_type_string_set_encoding(root_a, BT_STRING_ENCODING_UTF8);
25583cd0 2890 BT_ASSERT(ret == 0);
50842bdc 2891 ret = bt_field_type_structure_add_field(root, root_a, "a");
25583cd0 2892 BT_ASSERT(ret == 0);
50842bdc 2893 root_b_elem = bt_field_type_string_create();
25583cd0 2894 BT_ASSERT(root_b_elem);
50842bdc 2895 ret = bt_field_type_string_set_encoding(root_b_elem, BT_STRING_ENCODING_UTF8);
25583cd0 2896 BT_ASSERT(ret == 0);
50842bdc 2897 root_b = bt_field_type_sequence_create(root_b_elem, "a");
25583cd0 2898 BT_ASSERT(root_b);
50842bdc 2899 ret = bt_field_type_structure_add_field(root, root_b, "b");
25583cd0 2900 BT_ASSERT(ret == 0);
50842bdc 2901 root_c = bt_field_type_string_create();
25583cd0 2902 BT_ASSERT(root_c);
50842bdc 2903 ret = bt_field_type_string_set_encoding(root_c, BT_STRING_ENCODING_UTF8);
25583cd0 2904 BT_ASSERT(ret == 0);
50842bdc 2905 ret = bt_field_type_structure_add_field(root, root_c, "c");
25583cd0 2906 BT_ASSERT(ret == 0);
0b93f4ea
PP
2907
2908 BT_PUT(root_a);
2909 BT_PUT(root_b);
2910 BT_PUT(root_b_elem);
2911 BT_PUT(root_c);
2912
2913 return root;
2914}
2915
2916static
2917void test_fail_sequence_tag_is_not_int(void)
2918{
50842bdc 2919 struct bt_field_type *ep;
0b93f4ea
PP
2920
2921 ep = test_fail_sequence_tag_is_not_int_get_ep();
25583cd0 2922 BT_ASSERT(ep);
3dca2276
PP
2923 ok(try_add_event_class_to_trace(NULL, ep),
2924 "Sequence FT with non-enum length FT is invalid");
0b93f4ea 2925 BT_PUT(ep);
0b93f4ea
PP
2926}
2927
2928static
2929void test_fail(void)
2930{
2931 test_fail_unavailable_root();
2932 test_fail_target_is_root();
2933 test_fail_target_is_after_source();
2934 test_fail_target_is_ancestor_of_source();
2935 test_fail_target_is_source();
2936 test_fail_variant_tag_is_not_enum();
2937 test_fail_variant_tag_mismatch_mappings();
2938 test_fail_sequence_tag_is_not_int();
2939}
2940
2941int main(void)
2942{
2943 plan_no_plan();
2944
2945 test_pass();
2946 test_fail();
2947
2948 return 0;
2949}
This page took 0.22373 seconds and 4 git commands to generate.