From 454605f1efb2345a89a8954cb7fcc212b44542ed Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 19 Oct 2023 13:27:30 -0400 Subject: [PATCH] Add test to parse lf/crlf metadata Unix-like platforms represent line endings in text file with a '\n' or LF while Windows uses '\r\n' or CRLF. The CTF standard doesn't specify a canonical representation for metadata files and only requires whitespace. Test both styles of line endings on all platforms to ensure interoperability of the produced metadata files. Change-Id: Ib4080b1d95be2fb0d5844e7772bd6c2832de378a Signed-off-by: Michael Jeanson Reviewed-on: https://review.lttng.org/c/babeltrace/+/11078 Reviewed-by: Philippe Proulx --- .../succeed/crlf-metadata/channel0_0 | Bin 0 -> 4096 bytes .../succeed/crlf-metadata/channel0_1 | Bin 0 -> 4096 bytes .../succeed/crlf-metadata/channel0_2 | Bin 0 -> 4096 bytes .../succeed/crlf-metadata/channel0_3 | Bin 0 -> 4096 bytes .../crlf-metadata/index/channel0_0.idx | Bin 0 -> 88 bytes .../crlf-metadata/index/channel0_1.idx | Bin 0 -> 88 bytes .../crlf-metadata/index/channel0_2.idx | Bin 0 -> 88 bytes .../crlf-metadata/index/channel0_3.idx | Bin 0 -> 88 bytes .../ctf-traces/succeed/crlf-metadata/metadata | 114 +++++++++++++++++ .../ctf-traces/succeed/lf-metadata/channel0_0 | Bin 0 -> 4096 bytes .../ctf-traces/succeed/lf-metadata/channel0_1 | Bin 0 -> 4096 bytes .../ctf-traces/succeed/lf-metadata/channel0_2 | Bin 0 -> 4096 bytes .../ctf-traces/succeed/lf-metadata/channel0_3 | Bin 0 -> 4096 bytes .../succeed/lf-metadata/index/channel0_0.idx | Bin 0 -> 88 bytes .../succeed/lf-metadata/index/channel0_1.idx | Bin 0 -> 88 bytes .../succeed/lf-metadata/index/channel0_2.idx | Bin 0 -> 88 bytes .../succeed/lf-metadata/index/channel0_3.idx | Bin 0 -> 88 bytes .../ctf-traces/succeed/lf-metadata/metadata | 114 +++++++++++++++++ .../query/metadata-info-crlf-metadata.expect | 116 ++++++++++++++++++ .../query/metadata-info-lf-metadata.expect | 116 ++++++++++++++++++ .../src.ctf.fs/query/test_query_metadata_info | 4 +- 21 files changed, 463 insertions(+), 1 deletion(-) create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/channel0_0 create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/channel0_1 create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/channel0_2 create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/channel0_3 create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_0.idx create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_1.idx create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_2.idx create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_3.idx create mode 100644 tests/data/ctf-traces/succeed/crlf-metadata/metadata create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/channel0_0 create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/channel0_1 create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/channel0_2 create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/channel0_3 create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/index/channel0_0.idx create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/index/channel0_1.idx create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/index/channel0_2.idx create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/index/channel0_3.idx create mode 100644 tests/data/ctf-traces/succeed/lf-metadata/metadata create mode 100644 tests/data/plugins/src.ctf.fs/query/metadata-info-crlf-metadata.expect create mode 100644 tests/data/plugins/src.ctf.fs/query/metadata-info-lf-metadata.expect diff --git a/tests/data/ctf-traces/succeed/crlf-metadata/channel0_0 b/tests/data/ctf-traces/succeed/crlf-metadata/channel0_0 new file mode 100644 index 0000000000000000000000000000000000000000..af542611d2111b209cda95e16f34d7f123874f5f GIT binary patch literal 4096 zcmX>o|L5S{jq&!2OkMouN`Ev=>5l%$fCQEvtJ`yzn}MOdeV)(*AkD!Bm25y#gvR{; zA0+VO=*+z!oyo|L5S{jq&!2OkMouN`Ev=>5l%$00fL60tlAATDIpdHv>Z-|9qhbKzacaM4X`k zN~2LQeQ3g?+|dvi4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C0So~EcK8u~ literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/crlf-metadata/channel0_2 b/tests/data/ctf-traces/succeed/crlf-metadata/channel0_2 new file mode 100644 index 0000000000000000000000000000000000000000..e9c9fefe0ba23d7e88029b614ad4a404be7e6ffe GIT binary patch literal 4096 zcmX>o|L5S{jq&!2OkMouN`Ev=>5l%$00c}R0toggo!E1in}Okb^n9TQKzad8q5&+8 xLBOOjBt`{BLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz11L1ON<85vTwF literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/crlf-metadata/channel0_3 b/tests/data/ctf-traces/succeed/crlf-metadata/channel0_3 new file mode 100644 index 0000000000000000000000000000000000000000..a6d58207b32649958dfba0b278c207791e47d843 GIT binary patch literal 4096 zcmX>o|L5S{jq&!2OkMouN`Ev=>5l%$00hh+0ti;G{b+viU*}fb;?;h&V$7 zlt!aq`p|?&xuYR48UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O0~i7Tq`49D literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_0.idx b/tests/data/ctf-traces/succeed/crlf-metadata/index/channel0_0.idx new file mode 100644 index 0000000000000000000000000000000000000000..f28bfe170c3f803a8f757e4dee7771b8cded7207 GIT binary patch literal 88 tcmX^3@yz>% literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/crlf-metadata/metadata b/tests/data/ctf-traces/succeed/crlf-metadata/metadata new file mode 100644 index 00000000..3c1438f2 --- /dev/null +++ b/tests/data/ctf-traces/succeed/crlf-metadata/metadata @@ -0,0 +1,114 @@ +/* CTF 1.8 */ + +typealias integer { size = 8; align = 8; signed = false; } := uint8_t; +typealias integer { size = 16; align = 8; signed = false; } := uint16_t; +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; +typealias integer { size = 64; align = 8; signed = false; } := unsigned long; +typealias integer { size = 5; align = 1; signed = false; } := uint5_t; +typealias integer { size = 27; align = 1; signed = false; } := uint27_t; + +trace { + major = 1; + minor = 8; + uuid = "ddb15f3f-a235-444e-9d1b-f131648b5bf1"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + uint32_t stream_id; + uint64_t stream_instance_id; + }; +}; + +env { + domain = "ust"; + tracer_name = "lttng-ust"; + tracer_major = 2; + tracer_minor = 13; + tracer_buffering_scheme = "uid"; + tracer_buffering_id = 1000; + architecture_bit_width = 64; + trace_name = "crlf-metadata"; + trace_creation_datetime = "20231023T193151+0000"; + hostname = "line-endings"; +}; + +clock { + name = "monotonic"; + uuid = "d0367630-5511-4855-a390-afe86f9b4545"; + description = "Monotonic Clock"; + freq = 1000000000; /* Frequency, in Hz */ + /* clock value offset from Epoch is: offset * (1/freq) */ + offset = 1698076473717549015; +}; + +typealias integer { + size = 27; align = 1; signed = false; + map = clock.monotonic.value; +} := uint27_clock_monotonic_t; + +typealias integer { + size = 32; align = 8; signed = false; + map = clock.monotonic.value; +} := uint32_clock_monotonic_t; + +typealias integer { + size = 64; align = 8; signed = false; + map = clock.monotonic.value; +} := uint64_clock_monotonic_t; + +struct packet_context { + uint64_clock_monotonic_t timestamp_begin; + uint64_clock_monotonic_t timestamp_end; + uint64_t content_size; + uint64_t packet_size; + uint64_t packet_seq_num; + unsigned long events_discarded; + uint32_t cpu_id; +}; + +struct event_header_compact { + enum : uint5_t { compact = 0 ... 30, extended = 31 } id; + variant { + struct { + uint27_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +struct event_header_large { + enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id; + variant { + struct { + uint32_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +stream { + id = 0; + event.header := struct event_header_large; + packet.context := struct packet_context; +}; + +event { + name = "lttng_ust_tracef:event"; + id = 0; + stream_id = 0; + loglevel = 14; + fields := struct { + integer { size = 32; align = 8; signed = 0; encoding = none; base = 10; } __msg_length; + integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _msg[ __msg_length ]; + }; +}; + + diff --git a/tests/data/ctf-traces/succeed/lf-metadata/channel0_0 b/tests/data/ctf-traces/succeed/lf-metadata/channel0_0 new file mode 100644 index 0000000000000000000000000000000000000000..82dc4585b6ccf2b2ab8365aca99ac4049f2d4a0c GIT binary patch literal 4096 zcmX>o|L0&&!d#2Db)JVC?;D?2Ye?G8fCOf4|7?)Q#lR4?<>%LYAkD!Bm25y#gvR{; zA0%)s|Dq8{Co_=kpO*>|jGA1O2NMh_&xZ(BJQZFA5@ZFc49O@;g{pnCc+*pmFbh!F zEx)t~qFAiWUlHUGuxMskDo}D1jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk Kz-S2I4*>wxvoIn6 literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/lf-metadata/channel0_1 b/tests/data/ctf-traces/succeed/lf-metadata/channel0_1 new file mode 100644 index 0000000000000000000000000000000000000000..0fbdc560e73ccf8707c57718b48a0358848c50da GIT binary patch literal 4096 zcmX>o|L0&&!d#2Db)JVC?;D?2Ye?G800fL60tl|&V>is>VqoA8`Smp)NH1W5h%+=m zX*3F^4^4QKI~oF`Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?fFS??Iq4Be literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/lf-metadata/channel0_2 b/tests/data/ctf-traces/succeed/lf-metadata/channel0_2 new file mode 100644 index 0000000000000000000000000000000000000000..42ea7163e2a09da250f6edd723fb3b9e9f9d76f1 GIT binary patch literal 4096 zcmX>o|L0&&!d#2Db)JVC?;D?2Ye?G800c}R0tlw(OB?2KF);Wq`t>y*NH2g%G=QZs x2$(d6#Hhe%2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQNS@005?25kLR{ literal 0 HcmV?d00001 diff --git a/tests/data/ctf-traces/succeed/lf-metadata/channel0_3 b/tests/data/ctf-traces/succeed/lf-metadata/channel0_3 new file mode 100644 index 0000000000000000000000000000000000000000..880d5b95f29cf58ee7b3cc20f44793941557574c GIT binary patch literal 4096 zcmX>o|L0&&!d#2Db)JVC?;D?2Ye?G800hh+0tgx^^$qj57#Iw>et*pe(hHa%;tUN? z8jXVKLlYk5j)uT!2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-R~zU { + struct { + uint27_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +struct event_header_large { + enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id; + variant { + struct { + uint32_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +stream { + id = 0; + event.header := struct event_header_large; + packet.context := struct packet_context; +}; + +event { + name = "lttng_ust_tracef:event"; + id = 0; + stream_id = 0; + loglevel = 14; + fields := struct { + integer { size = 32; align = 8; signed = 0; encoding = none; base = 10; } __msg_length; + integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _msg[ __msg_length ]; + }; +}; + + diff --git a/tests/data/plugins/src.ctf.fs/query/metadata-info-crlf-metadata.expect b/tests/data/plugins/src.ctf.fs/query/metadata-info-crlf-metadata.expect new file mode 100644 index 00000000..ad495023 --- /dev/null +++ b/tests/data/plugins/src.ctf.fs/query/metadata-info-crlf-metadata.expect @@ -0,0 +1,116 @@ +is-packetized: no +text: /* CTF 1.8 */ + +typealias integer { size = 8; align = 8; signed = false; } := uint8_t; +typealias integer { size = 16; align = 8; signed = false; } := uint16_t; +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; +typealias integer { size = 64; align = 8; signed = false; } := unsigned long; +typealias integer { size = 5; align = 1; signed = false; } := uint5_t; +typealias integer { size = 27; align = 1; signed = false; } := uint27_t; + +trace { + major = 1; + minor = 8; + uuid = "ddb15f3f-a235-444e-9d1b-f131648b5bf1"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + uint32_t stream_id; + uint64_t stream_instance_id; + }; +}; + +env { + domain = "ust"; + tracer_name = "lttng-ust"; + tracer_major = 2; + tracer_minor = 13; + tracer_buffering_scheme = "uid"; + tracer_buffering_id = 1000; + architecture_bit_width = 64; + trace_name = "crlf-metadata"; + trace_creation_datetime = "20231023T193151+0000"; + hostname = "line-endings"; +}; + +clock { + name = "monotonic"; + uuid = "d0367630-5511-4855-a390-afe86f9b4545"; + description = "Monotonic Clock"; + freq = 1000000000; /* Frequency, in Hz */ + /* clock value offset from Epoch is: offset * (1/freq) */ + offset = 1698076473717549015; +}; + +typealias integer { + size = 27; align = 1; signed = false; + map = clock.monotonic.value; +} := uint27_clock_monotonic_t; + +typealias integer { + size = 32; align = 8; signed = false; + map = clock.monotonic.value; +} := uint32_clock_monotonic_t; + +typealias integer { + size = 64; align = 8; signed = false; + map = clock.monotonic.value; +} := uint64_clock_monotonic_t; + +struct packet_context { + uint64_clock_monotonic_t timestamp_begin; + uint64_clock_monotonic_t timestamp_end; + uint64_t content_size; + uint64_t packet_size; + uint64_t packet_seq_num; + unsigned long events_discarded; + uint32_t cpu_id; +}; + +struct event_header_compact { + enum : uint5_t { compact = 0 ... 30, extended = 31 } id; + variant { + struct { + uint27_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +struct event_header_large { + enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id; + variant { + struct { + uint32_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +stream { + id = 0; + event.header := struct event_header_large; + packet.context := struct packet_context; +}; + +event { + name = "lttng_ust_tracef:event"; + id = 0; + stream_id = 0; + loglevel = 14; + fields := struct { + integer { size = 32; align = 8; signed = 0; encoding = none; base = 10; } __msg_length; + integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _msg[ __msg_length ]; + }; +}; + + + diff --git a/tests/data/plugins/src.ctf.fs/query/metadata-info-lf-metadata.expect b/tests/data/plugins/src.ctf.fs/query/metadata-info-lf-metadata.expect new file mode 100644 index 00000000..d9237d6c --- /dev/null +++ b/tests/data/plugins/src.ctf.fs/query/metadata-info-lf-metadata.expect @@ -0,0 +1,116 @@ +is-packetized: no +text: /* CTF 1.8 */ + +typealias integer { size = 8; align = 8; signed = false; } := uint8_t; +typealias integer { size = 16; align = 8; signed = false; } := uint16_t; +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; +typealias integer { size = 64; align = 8; signed = false; } := unsigned long; +typealias integer { size = 5; align = 1; signed = false; } := uint5_t; +typealias integer { size = 27; align = 1; signed = false; } := uint27_t; + +trace { + major = 1; + minor = 8; + uuid = "8c609d38-ed7e-49c3-81df-33cf268062b7"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint8_t uuid[16]; + uint32_t stream_id; + uint64_t stream_instance_id; + }; +}; + +env { + domain = "ust"; + tracer_name = "lttng-ust"; + tracer_major = 2; + tracer_minor = 13; + tracer_buffering_scheme = "uid"; + tracer_buffering_id = 1000; + architecture_bit_width = 64; + trace_name = "lf-metadata"; + trace_creation_datetime = "20231023T185853+0000"; + hostname = "line-endings"; +}; + +clock { + name = "monotonic"; + uuid = "d0367630-5511-4855-a390-afe86f9b4545"; + description = "Monotonic Clock"; + freq = 1000000000; /* Frequency, in Hz */ + /* clock value offset from Epoch is: offset * (1/freq) */ + offset = 1698076473717549018; +}; + +typealias integer { + size = 27; align = 1; signed = false; + map = clock.monotonic.value; +} := uint27_clock_monotonic_t; + +typealias integer { + size = 32; align = 8; signed = false; + map = clock.monotonic.value; +} := uint32_clock_monotonic_t; + +typealias integer { + size = 64; align = 8; signed = false; + map = clock.monotonic.value; +} := uint64_clock_monotonic_t; + +struct packet_context { + uint64_clock_monotonic_t timestamp_begin; + uint64_clock_monotonic_t timestamp_end; + uint64_t content_size; + uint64_t packet_size; + uint64_t packet_seq_num; + unsigned long events_discarded; + uint32_t cpu_id; +}; + +struct event_header_compact { + enum : uint5_t { compact = 0 ... 30, extended = 31 } id; + variant { + struct { + uint27_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +struct event_header_large { + enum : uint16_t { compact = 0 ... 65534, extended = 65535 } id; + variant { + struct { + uint32_clock_monotonic_t timestamp; + } compact; + struct { + uint32_t id; + uint64_clock_monotonic_t timestamp; + } extended; + } v; +} align(8); + +stream { + id = 0; + event.header := struct event_header_large; + packet.context := struct packet_context; +}; + +event { + name = "lttng_ust_tracef:event"; + id = 0; + stream_id = 0; + loglevel = 14; + fields := struct { + integer { size = 32; align = 8; signed = 0; encoding = none; base = 10; } __msg_length; + integer { size = 8; align = 8; signed = 1; encoding = UTF8; base = 10; } _msg[ __msg_length ]; + }; +}; + + + diff --git a/tests/plugins/src.ctf.fs/query/test_query_metadata_info b/tests/plugins/src.ctf.fs/query/test_query_metadata_info index 2efa9e9a..0be2f812 100755 --- a/tests/plugins/src.ctf.fs/query/test_query_metadata_info +++ b/tests/plugins/src.ctf.fs/query/test_query_metadata_info @@ -78,6 +78,8 @@ test_non_existent_trace_dir() { rm -f "${stdout_file}" "${stderr_file}" } -plan_tests 5 +plan_tests 7 test_query_metadata_info succeed1 test_non_existent_trace_dir +test_query_metadata_info lf-metadata +test_query_metadata_info crlf-metadata -- 2.34.1