2 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
4 * SPDX-License-Identifier: GPL-2.0-only
8 #include "backward-compatibility-group-by.hpp"
10 #include <common/time.hpp>
18 /* Number of TAP tests in this file */
19 #define NUM_TESTS_PER_TEST 1
23 const char *stream_path
;
24 const char *session_name
;
26 const char *creation_time
;
27 const char *extra_path
;
35 int lttng_opt_verbose
;
37 struct test tests
[] = {
38 /* Default name session streaming. */
39 { "hostname/auto-20190918-164429/ust/uid/1000/64-bit",
40 "auto-20190918-164429",
44 "ust/uid/1000/64-bit",
46 /* Custom default name session */
47 { "hostname/custom_auto-20190319-120000/ust/uid/1000/64-bit",
48 "custom_auto-20190319-120000",
52 "ust/uid/1000/64-bit",
54 /* Named session streaming */
55 { "hostname/test-20190918-164709/ust/uid/1000/64-bit",
60 "ust/uid/1000/64-bit",
62 /* Default session snapshot streaming */
63 { "hostname//snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
68 "snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
70 /* Named session snapshot streaming */
71 { "hostname//snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
76 "snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
78 /* Default name session, live */
79 { "hostname//auto-20190918-171641/ust/uid/1000/64-bit",
80 "auto-20190918-171641",
84 "ust/uid/1000/64-bit",
86 /* Named session, live */
87 { "hostname//test-20190918-180333//ust/uid/1000/64-bit",
88 "test-20190918-180333",
92 "/ust/uid/1000/64-bit",
94 /* Default name session, streaming & live , extra path */
95 { "hostname/extra/path/ust/uid/1000/64-bit",
96 "auto-20190919-122110",
100 "path/ust/uid/1000/64-bit",
102 /* Named session, live, extra path */
103 { "hostname/extra/path/ust/uid/1000/64-bit",
108 "path/ust/uid/1000/64-bit",
110 /* Named session, snapshot, extra path */
111 { "hostname/extra/path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
116 "path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
119 /* Named session with valid datetime in it */
120 /* Default name session, extra path with session name in it*/
121 { "hostname/test-20190319-120000-20190918-180921/ust/uid/1000/64-bit",
122 "test-20190319-120000",
126 "ust/uid/1000/64-bit",
129 { "", "test", "", "", "", "", false },
130 /* Path without second token */
131 { "hostname", "test", "hostname", "", "", "", false },
133 { "hostname/test", "test", "hostname", "", "", "", true },
134 /* Path with ession name but no datetime */
135 { "hostname/test/ust/uid/1000/64-bit",
140 "ust/uid/1000/64-bit",
144 static char *craft_expected(struct test
*test
, time_t relay_session_creation_time
)
147 char *result
= nullptr;
148 char relay_session_creation_datetime
[DATETIME_STR_LEN
];
150 ret
= time_to_datetime_str(relay_session_creation_time
,
151 relay_session_creation_datetime
,
152 sizeof(relay_session_creation_datetime
));
158 ret
= asprintf(&result
,
162 test
->creation_time
[0] == '\0' ? relay_session_creation_datetime
:
165 test
->extra_path
[0] != '\0' ? "/" : "",
178 int num_test
= sizeof(tests
) / sizeof(struct test
);
179 const time_t test_time
= time(nullptr);
181 plan_tests(NUM_TESTS_PER_TEST
* num_test
);
182 diag("Backward compatibility utils for lttng-relayd --group-by-session");
184 if (test_time
== (time_t) -1) {
185 perror("Failed to sample time");
186 return exit_status();
189 for (i
= 0; i
< num_test
; i
++) {
190 char *expected
= nullptr;
191 char *result
= nullptr;
193 expected
= craft_expected(&tests
[i
], test_time
);
195 fprintf(stderr
, "Failed to craft expected output\n");
199 result
= backward_compat_group_by_session(
200 tests
[i
].stream_path
, tests
[i
].session_name
, test_time
);
201 if (!result
&& tests
[i
].is_valid
) {
202 fprintf(stderr
, "Failed to get result\n");
204 } else if (!result
&& tests
[i
].is_valid
== false) {
205 pass("Returned null as expected");
209 ok(strncmp(expected
, result
, strlen(expected
)) == 0,
210 "In: %s, out: %s, expected: %s",
211 tests
[i
].stream_path
,
218 return exit_status();