2 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
4 * SPDX-License-Identifier: GPL-2.0-only
15 #include <common/time.h>
17 #include "backward-compatibility-group-by.h"
19 /* Number of TAP tests in this file */
20 #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
;
34 int lttng_opt_verbose
;
36 struct test tests
[] = {
37 /* Default name session streaming. */
38 {"hostname/auto-20190918-164429/ust/uid/1000/64-bit",
39 "auto-20190918-164429", "hostname",
40 "20190918-164429", "", "ust/uid/1000/64-bit",
42 /* Custom default name session */
43 {"hostname/custom_auto-20190319-120000/ust/uid/1000/64-bit",
44 "custom_auto-20190319-120000", "hostname",
45 "20190319-120000", "", "ust/uid/1000/64-bit",
47 /* Named session streaming */
48 {"hostname/test-20190918-164709/ust/uid/1000/64-bit", "test",
49 "hostname", "20190918-164709", "",
50 "ust/uid/1000/64-bit", true},
51 /* Default session snapshot streaming */
52 {"hostname//snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
53 "my_session", "hostname", "", "",
54 "snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
56 /* Named session snapshot streaming */
57 {"hostname//snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
58 "my_session", "hostname", "", "",
59 "snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
61 /* Default name session, live */
62 {"hostname//auto-20190918-171641/ust/uid/1000/64-bit",
63 "auto-20190918-171641", "hostname",
64 "20190918-171641", "", "ust/uid/1000/64-bit",
66 /* Named session, live */
67 {"hostname//test-20190918-180333//ust/uid/1000/64-bit",
68 "test-20190918-180333", "hostname",
69 "20190918-180333", "", "/ust/uid/1000/64-bit",
71 /* Default name session, streaming & live , extra path */
72 {"hostname/extra/path/ust/uid/1000/64-bit",
73 "auto-20190919-122110", "hostname",
74 "20190919-122110", "extra",
75 "path/ust/uid/1000/64-bit", true},
76 /* Named session, live, extra path */
77 {"hostname/extra/path/ust/uid/1000/64-bit", "test", "hostname",
78 "", "extra", "path/ust/uid/1000/64-bit", true},
79 /* Named session, snapshot, extra path */
80 {"hostname/extra/path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
81 "test", "hostname", "", "extra",
82 "path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
85 /* Named session with valid datetime in it */
86 /* Default name session, extra path with session name in it*/
87 {"hostname/test-20190319-120000-20190918-180921/ust/uid/1000/64-bit",
88 "test-20190319-120000", "hostname",
89 "20190918-180921", "", "ust/uid/1000/64-bit",
92 {"", "test", "", "", "", "", false},
93 /* Path without second token */
94 {"hostname", "test", "hostname", "", "", "", false},
96 {"hostname/test", "test", "hostname", "", "", "", true},
97 /* Path with ession name but no datetime */
98 {"hostname/test/ust/uid/1000/64-bit", "test", "hostname", "",
99 "", "ust/uid/1000/64-bit", true},
102 static char *craft_expected(struct test
*test
, time_t relay_session_creation_time
)
106 char relay_session_creation_datetime
[DATETIME_STR_LEN
];
108 ret
= time_to_datetime_str(relay_session_creation_time
,
109 relay_session_creation_datetime
,
110 sizeof(relay_session_creation_datetime
));
116 ret
= asprintf(&result
, "%s/%s-%s/%s%s%s", test
->session_name
,
118 test
->creation_time
[0] == '\0' ?
119 relay_session_creation_datetime
:
122 test
->extra_path
[0] != '\0' ? "/" : "", test
->leftover
);
131 int main(int argc
, char **argv
)
134 int num_test
= sizeof(tests
) / sizeof(struct test
);
135 const time_t test_time
= time(NULL
);
137 plan_tests(NUM_TESTS_PER_TEST
* num_test
);
138 diag("Backward compatibility utils for lttng-relayd --group-by-session");
140 if (test_time
== (time_t) -1) {
141 perror("Failed to sample time");
142 return exit_status();
145 for (i
= 0; i
< num_test
; i
++) {
146 char *expected
= NULL
;
149 expected
= craft_expected(&tests
[i
], test_time
);
151 fprintf(stderr
, "Failed to craft expected output\n");
155 result
= backward_compat_group_by_session(tests
[i
].stream_path
,
156 tests
[i
].session_name
, test_time
);
157 if (!result
&& tests
[i
].is_valid
) {
158 fprintf(stderr
, "Failed to get result\n");
160 } else if (!result
&& tests
[i
].is_valid
== false) {
161 pass("Returned null as expected");
165 ok(strncmp(expected
, result
, strlen(expected
)) == 0,
166 "In: %s, out: %s, expected: %s",
167 tests
[i
].stream_path
, result
, expected
);
172 return exit_status();