tests: add `src.ctf.fs` single field testing framework
[babeltrace.git] / tests / data / plugins / src.ctf.fs / field / data_from_mp.py
CommitLineData
10ba5f69
OD
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Copyright (C) 2023 EfficiOS Inc.
4#
5# pyright: strict, reportTypeCommentUsage=false
6
7import os
8import string
9import argparse
10
11import normand
12import moultipart
13
14
15def _make_ctf_1_metadata(payload_fc: str):
16 payload_fc = payload_fc.strip()
17
18 if "@" in payload_fc:
19 payload_fc = payload_fc.replace("@", "root")
20 else:
21 payload_fc += " root"
22
23 return string.Template(
24 """\
25/* CTF 1.8 */
26
27trace {
28 major = 1;
29 minor = 8;
30 byte_order = le;
31};
32
33typealias integer { size = 8; } := u8;
34typealias integer { size = 16; } := u16;
35typealias integer { size = 32; } := u32;
36typealias integer { size = 64; } := u64;
37typealias integer { size = 8; byte_order = le; } := u8le;
38typealias integer { size = 16; byte_order = le; } := u16le;
39typealias integer { size = 32; byte_order = le; } := u32le;
40typealias integer { size = 64; byte_order = le; } := u64le;
41typealias integer { size = 8; byte_order = be; } := u8be;
42typealias integer { size = 16; byte_order = be; } := u16be;
43typealias integer { size = 32; byte_order = be; } := u32be;
44typealias integer { size = 64; byte_order = be; } := u64be;
45typealias integer { signed = true; size = 8; } := i8;
46typealias integer { signed = true; size = 16; } := i16;
47typealias integer { signed = true; size = 32; } := i32;
48typealias integer { signed = true; size = 64; } := i64;
49typealias integer { signed = true; size = 8; byte_order = le; } := i8le;
50typealias integer { signed = true; size = 16; byte_order = le; } := i16le;
51typealias integer { signed = true; size = 32; byte_order = le; } := i32le;
52typealias integer { signed = true; size = 64; byte_order = le; } := i64le;
53typealias integer { signed = true; size = 8; byte_order = be; } := i8be;
54typealias integer { signed = true; size = 16; byte_order = be; } := i16be;
55typealias integer { signed = true; size = 32; byte_order = be; } := i32be;
56typealias integer { signed = true; size = 64; byte_order = be; } := i64be;
57typealias floating_point { exp_dig = 8; mant_dig = 24; } := flt32;
58typealias floating_point { exp_dig = 11; mant_dig = 53; } := flt64;
59typealias floating_point { exp_dig = 8; mant_dig = 24; byte_order = le; } := flt32le;
60typealias floating_point { exp_dig = 11; mant_dig = 53; byte_order = le; } := flt64le;
61typealias floating_point { exp_dig = 8; mant_dig = 24; byte_order = be; } := flt32be;
62typealias floating_point { exp_dig = 11; mant_dig = 53; byte_order = be; } := flt64be;
63typealias string { encoding = UTF8; } := nt_str;
64
65event {
66 name = the_event;
67 fields := struct {
68 ${payload_fc};
69 };
70};
71"""
72 ).substitute(payload_fc=payload_fc)
73
74
75def _make_ctf_1_data(normand_text: str):
76 # Default to little-endian because that's also the TSDL default in
77 # _make_ctf_1_metadata() above.
78 return normand.parse("!le\n" + normand_text).data
79
80
81def _create_files_from_mp(mp_path: str, output_dir: str):
82 trace_dir = os.path.join(output_dir, "trace")
83 expect_path = os.path.join(output_dir, "expect")
84 metadata_path = os.path.join(trace_dir, "metadata")
85 data_path = os.path.join(trace_dir, "data")
86 os.makedirs(trace_dir, exist_ok=True)
87
88 with open(mp_path, "r") as f:
89 parts = moultipart.parse(f)
90
91 with open(metadata_path, "w") as f:
92 f.write(_make_ctf_1_metadata(parts[0].content))
93
94 with open(data_path, "wb") as f:
95 f.write(_make_ctf_1_data(parts[1].content))
96
97 with open(expect_path, "w") as f:
98 f.write(parts[2].content)
99
100
101if __name__ == "__main__":
102 parser = argparse.ArgumentParser()
103 parser.add_argument(
104 "mp_path", metavar="MP-PATH", help="moultipart document to process"
105 )
106 parser.add_argument(
107 "output_dir",
108 metavar="OUTPUT-DIR",
109 help="output directory for the CTF trace and expectation file",
110 )
111 args = parser.parse_args()
112 _create_files_from_mp(args.mp_path, args.output_dir)
This page took 0.034246 seconds and 4 git commands to generate.