From c719eabb20cebe8c01b76d5af4f020c3af6e6842 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Thu, 2 Jun 2022 15:46:18 -0400 Subject: [PATCH] Fix: src.ctf.fs: omitting to add ctf signature When depacketizing a metadata stream we may need to add the CTF 1.8 signature at the beginning of the file if it's absent. This fixes a regression introduces by commit: commit 06be99464988953e390114337ccdd20622fb50d1 Author: Philippe Proulx Date: Tue Jul 9 19:40:45 2019 -0400 ctf: refactor metadata decoder to always have an instance This regression was not caught earlier because the test case for that feature was disabled. This commit reintroduces that behaviour and enables the test case. Signed-off-by: Francis Deslauriers Change-Id: I3621a7f8a21ffe51f29dfa344f30039fdf5d16c4 Reviewed-on: https://review.lttng.org/c/babeltrace/+/8204 Tested-by: jenkins Reviewed-by: Philippe Proulx CI-Build: Simon Marchi --- src/plugins/ctf/fs-src/query.cpp | 21 ++++++++++++++++++++- tests/Makefile.am | 1 + tests/cli/test_output_ctf_metadata | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/plugins/ctf/fs-src/query.cpp b/src/plugins/ctf/fs-src/query.cpp index 5685ce79..af11bef5 100644 --- a/src/plugins/ctf/fs-src/query.cpp +++ b/src/plugins/ctf/fs-src/query.cpp @@ -52,6 +52,8 @@ metadata_info_query(bt_self_component_class_source *self_comp_class_src, const b struct ctf_metadata_decoder *decoder = NULL; ctf_metadata_decoder_config decoder_cfg {}; enum ctf_metadata_decoder_status decoder_status; + GString *g_metadata_text = NULL; + const char *plaintext; result = bt_value_map_create(); if (!result) { @@ -118,7 +120,21 @@ metadata_info_query(bt_self_component_class_source *self_comp_class_src, const b goto error; } - ret = bt_value_map_insert_string_entry(result, "text", ctf_metadata_decoder_get_text(decoder)); + plaintext = ctf_metadata_decoder_get_text(decoder); + g_metadata_text = g_string_new(NULL); + + if (!g_metadata_text) { + goto error; + } + + if (strncmp(plaintext, METADATA_TEXT_SIG, sizeof(METADATA_TEXT_SIG) - 1) != 0) { + g_string_assign(g_metadata_text, METADATA_TEXT_SIG); + g_string_append(g_metadata_text, " */\n\n"); + } + + g_string_append(g_metadata_text, plaintext); + + ret = bt_value_map_insert_string_entry(result, "text", g_metadata_text->str); if (ret) { BT_COMP_CLASS_LOGE_APPEND_CAUSE(self_comp_class, "Cannot insert metadata text into query result."); @@ -143,6 +159,9 @@ error: } end: + if (g_metadata_text) { + g_string_free(g_metadata_text, TRUE); + } ctf_metadata_decoder_destroy(decoder); if (metadata_fp) { diff --git a/tests/Makefile.am b/tests/Makefile.am index 687445a1..844baa25 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -73,6 +73,7 @@ TESTS_CLI = \ cli/convert/test_convert_args \ cli/test_help \ cli/test_intersection \ + cli/test_output_ctf_metadata \ cli/test_output_path_ctf_non_lttng_trace \ cli/test_packet_seq_num \ cli/test_trace_copy \ diff --git a/tests/cli/test_output_ctf_metadata b/tests/cli/test_output_ctf_metadata index 58969f8a..8296506b 100755 --- a/tests/cli/test_output_ctf_metadata +++ b/tests/cli/test_output_ctf_metadata @@ -26,7 +26,7 @@ tmp_metadata=$(mktemp) "${BT_TESTS_BT2_BIN}" -o ctf-metadata "${BT_CTF_TRACES_PATH}/succeed/wk-heartbeat-u" > "$tmp_metadata" ok $? "Run babeltrace -o ctf-metadata with a valid trace directory, correct exit status" -cmp -s "$tmp_metadata" "${BT_TESTS_DATADIR}/cli/test_output_ctf_metadata.ref" +bt_diff "${BT_TESTS_DATADIR}/cli/test_output_ctf_metadata.ref" "$tmp_metadata" ok $? "Run babeltrace -o ctf-metadata with a valid trace directory, correct output" # Test an invalid trace directory. -- 2.34.1