From mboxrd@z Thu Jan 1 00:00:00 1970 From: gbastien+lttng@versatic.net (=?UTF-8?q?Genevi=C3=A8ve=20Bastien?=) Date: Wed, 26 Mar 2014 10:55:12 -0400 Subject: [lttng-dev] [RFC Patch Tools 3/3] Update regression tests for UST global structure declarations In-Reply-To: <1395845712-18498-1-git-send-email-gbastien+lttng@versatic.net> References: <1395845712-18498-1-git-send-email-gbastien+lttng@versatic.net> Message-ID: <1395845712-18498-4-git-send-email-gbastien+lttng@versatic.net> And fix enumeration tests that didn't work anymore. Signed-off-by: Genevi?ve Bastien --- .../global-type-declarations.c | 9 ++++++ .../test_global_type_declarations.py | 31 ++++++++++++++++---- .../ust/global-type-declarations/ust_tests_gtd.h | 33 ++++++++++++++++++++++ 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/tests/regression/ust/global-type-declarations/global-type-declarations.c b/tests/regression/ust/global-type-declarations/global-type-declarations.c index edd6fc7..b20a9e9 100644 --- a/tests/regression/ust/global-type-declarations/global-type-declarations.c +++ b/tests/regression/ust/global-type-declarations/global-type-declarations.c @@ -27,11 +27,20 @@ int main(int argc, char *argv[]) { int i; + char text[10] = "test"; for (i = 0; i < 2; i++) { tracepoint(ust_tests_gtd, tptest, i%2, (i+1)%2); tracepoint(ust_tests_gtd, tptest_bis, i%2); } + tracepoint(ust_tests_gtd, tptest_struct, 0, text, strlen(text)); + + /* + * Add a normal tracepoint after, just to be sure the previous dynamic + * fields didn't wrongly offset the next event. + */ + tracepoint(ust_tests_gtd, tptest_bis, 1); + return 0; } diff --git a/tests/regression/ust/global-type-declarations/test_global_type_declarations.py b/tests/regression/ust/global-type-declarations/test_global_type_declarations.py index 5661b35..da1b476 100644 --- a/tests/regression/ust/global-type-declarations/test_global_type_declarations.py +++ b/tests/regression/ust/global-type-declarations/test_global_type_declarations.py @@ -29,7 +29,7 @@ test_utils_path = test_utils_path + "/utils" sys.path.append(test_utils_path) from test_utils import * -NR_TESTS = 9 +NR_TESTS = 12 current_test = 1 print("1..{0}".format(NR_TESTS)) @@ -78,13 +78,14 @@ current_test += 1 if babeltrace_process.returncode != 0: bail("Unreadable trace; can't proceed with analysis.") -print_test_result(len(event_lines) == 4, current_test, "Correct number of events found in resulting trace") +print_test_result(len(event_lines) == 6, current_test, "Correct number of events found in resulting trace") current_test += 1 -if len(event_lines) != 4: +if len(event_lines) != 6: bail("Unexpected number of events found in resulting trace (" + session_info.trace_path + ")." ) -match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" :.*", event_lines[0]) +# Test enumeration fields in tracepoints +match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( (.*) :.*enumfield_bis = \( (.*) :.*", event_lines[0]) print_test_result(match is not None and match.group(1) == "tptest", current_test,\ "First tracepoint is present") current_test += 1 @@ -97,7 +98,7 @@ print_test_result(match is not None and match.group(3) == "one", current_test,\ "First tracepoint's second enum value maps to one") current_test += 1 -match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( \"(.*)\" :.*", event_lines[1]) +match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( (.*) :.*", event_lines[1]) print_test_result(match is not None and match.group(1) == "tptest_bis", current_test,\ "Second tracepoint is present") current_test += 1 @@ -106,9 +107,27 @@ print_test_result(match is not None and match.group(2) == "zero", current_test,\ "Second tracepoint's enum value maps to zero") current_test += 1 -match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" .*", event_lines[2]) +match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( (.*) :.*enumfield_bis = \( (.*) .*", event_lines[2]) print_test_result(match is not None and match.group(2) == "one", current_test,\ "Third tracepoint's enum value maps to one") +current_test += 1 + +# Test structure fields in tracepoint +match = re.search(r".*ust_tests_gtd:(.*):.*structfield = { _outer_seqfield_length = 4, outer_seqfield = \[ \[0\] = 116, \[1\] = 101, \[2\] = 115, \[3\] = 116 \].*", event_lines[4]) +print_test_result(match is not None and match.group(1) == "tptest_struct", current_test,\ + "Struct field in tracepoint is present with field dynamic sequence") +current_test += 1 + +# Test inner structure fields in tracepoint +match = re.search(r".*ust_tests_gtd:(.*):.*innerfield = { arrfield = \[ \[0\] = 116, \[1\] = 101, \[2\] = 115, \[3\] = 116, \[4\] = 0, \[5\] = 0, \[6\] = 0, \[7\] = 0, \[8\] = 0, \[9\] = 0 \], _inner_seqfield_length = 4, inner_seqfield = \[ \[0\] = 116, \[1\] = 101, \[2\] = 115, \[3\] = 116 \], enumfield = \( zero : container = 0 \) } }.*", event_lines[4]) +print_test_result(match is not None and match.group(1) == "tptest_struct", current_test,\ + "Inner struct field inside another struct is present with fields dynamic sequence, array and enumeration") +current_test += 1 + +match = re.search(r".*ust_tests_gtd:(.*):.*enumfield = \( one : container = 1 \) }", event_lines[5]) +print_test_result(match is not None and match.group(1) == "tptest_bis", current_test,\ + "Tracepoint after struct and dynamic field is correct") +current_test += 1 shutil.rmtree(session_info.tmp_directory) diff --git a/tests/regression/ust/global-type-declarations/ust_tests_gtd.h b/tests/regression/ust/global-type-declarations/ust_tests_gtd.h index ad3df0c..41b1c43 100644 --- a/tests/regression/ust/global-type-declarations/ust_tests_gtd.h +++ b/tests/regression/ust/global-type-declarations/ust_tests_gtd.h @@ -36,6 +36,27 @@ TRACEPOINT_ENUM(ust_tests_gtd, testenum, ) ) +/* Structure contains dynamic field and enumeration */ +TRACEPOINT_STRUCT(ust_tests_gtd, inner_struct, + TP_ARGS(char *, text, size_t, textlen, + int, enumvalue), + TP_FIELDS( + ctf_array(char, arrfield, text, 10) + ctf_sequence(char, inner_seqfield, text, size_t, textlen) + ctf_enum(ust_tests_gtd, testenum, enumfield, enumvalue) + ) +) + +/* Structure contains dynamic field and another structure */ +TRACEPOINT_STRUCT(ust_tests_gtd, outer_struct, + TP_ARGS(char *, text, size_t, textlen, + int, enumvalue), + TP_FIELDS( + ctf_sequence(char, outer_seqfield, text, size_t, textlen) + ctf_struct(ust_tests_gtd, inner_struct, innerfield, text, textlen, enumvalue) + ) +) + /* * Enumeration field is used twice to make sure the global type declaration * is entered only once in the metadata file. @@ -59,6 +80,18 @@ TRACEPOINT_EVENT(ust_tests_gtd, tptest_bis, ) ) +/* + * This structure uses a structure fields that contains both dynamic fields + * and another structure, who itself contains dynamic fields and an + * enumeration. + */ +TRACEPOINT_EVENT(ust_tests_gtd, tptest_struct, + TP_ARGS(int, enumval, char *, text, size_t, textlen), + TP_FIELDS( + ctf_struct(ust_tests_gtd, outer_struct, structfield, text, textlen, enumval) + ) +) + #endif /* _TRACEPOINT_UST_TESTS_GLOBAL_TYPE_DECLARATIONS_H */ #undef TRACEPOINT_INCLUDE -- 1.9.1