docs: Add supported versions and fix-backport policy
[lttng-tools.git] / tests / unit / test_relayd_backward_compat_group_by_session.cpp
1 /*
2 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 */
7
8 #include <stdbool.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <tap/tap.h>
13
14 #include <common/time.h>
15
16 #include "backward-compatibility-group-by.h"
17
18 /* Number of TAP tests in this file */
19 #define NUM_TESTS_PER_TEST 1
20
21 struct test {
22 const char *stream_path;
23 const char *session_name;
24 const char *hostname;
25 const char *creation_time;
26 const char *extra_path;
27 const char *leftover;
28 bool is_valid;
29 };
30
31 int lttng_opt_quiet;
32 int lttng_opt_mi;
33 int lttng_opt_verbose;
34
35 struct test tests[] = {
36 /* Default name session streaming. */
37 {"hostname/auto-20190918-164429/ust/uid/1000/64-bit",
38 "auto-20190918-164429", "hostname",
39 "20190918-164429", "", "ust/uid/1000/64-bit",
40 true},
41 /* Custom default name session */
42 {"hostname/custom_auto-20190319-120000/ust/uid/1000/64-bit",
43 "custom_auto-20190319-120000", "hostname",
44 "20190319-120000", "", "ust/uid/1000/64-bit",
45 true},
46 /* Named session streaming */
47 {"hostname/test-20190918-164709/ust/uid/1000/64-bit", "test",
48 "hostname", "20190918-164709", "",
49 "ust/uid/1000/64-bit", true},
50 /* Default session snapshot streaming */
51 {"hostname//snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
52 "my_session", "hostname", "", "",
53 "snapshot-1-20190918-164829-0/ust//uid/1000/64-bit",
54 true},
55 /* Named session snapshot streaming */
56 {"hostname//snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
57 "my_session", "hostname", "", "",
58 "snapshot-1-20190918-175919-0/ust//uid/1000/64-bit",
59 true},
60 /* Default name session, live */
61 {"hostname//auto-20190918-171641/ust/uid/1000/64-bit",
62 "auto-20190918-171641", "hostname",
63 "20190918-171641", "", "ust/uid/1000/64-bit",
64 true},
65 /* Named session, live */
66 {"hostname//test-20190918-180333//ust/uid/1000/64-bit",
67 "test-20190918-180333", "hostname",
68 "20190918-180333", "", "/ust/uid/1000/64-bit",
69 true},
70 /* Default name session, streaming & live , extra path */
71 {"hostname/extra/path/ust/uid/1000/64-bit",
72 "auto-20190919-122110", "hostname",
73 "20190919-122110", "extra",
74 "path/ust/uid/1000/64-bit", true},
75 /* Named session, live, extra path */
76 {"hostname/extra/path/ust/uid/1000/64-bit", "test", "hostname",
77 "", "extra", "path/ust/uid/1000/64-bit", true},
78 /* Named session, snapshot, extra path */
79 {"hostname/extra/path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
80 "test", "hostname", "", "extra",
81 "path/snapshot-1-20190919-140702-0/ust//uid/1000/64-bit",
82 true},
83 /* Corner cases*/
84 /* Named session with valid datetime in it */
85 /* Default name session, extra path with session name in it*/
86 {"hostname/test-20190319-120000-20190918-180921/ust/uid/1000/64-bit",
87 "test-20190319-120000", "hostname",
88 "20190918-180921", "", "ust/uid/1000/64-bit",
89 true},
90 /* Empty path */
91 {"", "test", "", "", "", "", false},
92 /* Path without second token */
93 {"hostname", "test", "hostname", "", "", "", false},
94 /* No leftover */
95 {"hostname/test", "test", "hostname", "", "", "", true},
96 /* Path with ession name but no datetime */
97 {"hostname/test/ust/uid/1000/64-bit", "test", "hostname", "",
98 "", "ust/uid/1000/64-bit", true},
99 };
100
101 static char *craft_expected(struct test *test, time_t relay_session_creation_time)
102 {
103 int ret;
104 char *result = NULL;
105 char relay_session_creation_datetime[DATETIME_STR_LEN];
106
107 ret = time_to_datetime_str(relay_session_creation_time,
108 relay_session_creation_datetime,
109 sizeof(relay_session_creation_datetime));
110 if (ret < 0) {
111 result = NULL;
112 goto end;
113 }
114
115 ret = asprintf(&result, "%s/%s-%s/%s%s%s", test->session_name,
116 test->hostname,
117 test->creation_time[0] == '\0' ?
118 relay_session_creation_datetime :
119 test->creation_time,
120 test->extra_path,
121 test->extra_path[0] != '\0' ? "/" : "", test->leftover);
122 if (ret < 0) {
123 result = NULL;
124 goto end;
125 }
126 end:
127 return result;
128 }
129
130 int main(int argc, char **argv)
131 {
132 int i;
133 int num_test = sizeof(tests) / sizeof(struct test);
134 const time_t test_time = time(NULL);
135
136 plan_tests(NUM_TESTS_PER_TEST * num_test);
137 diag("Backward compatibility utils for lttng-relayd --group-by-session");
138
139 if (test_time == (time_t) -1) {
140 perror("Failed to sample time");
141 return exit_status();
142 }
143
144 for (i = 0; i < num_test; i++) {
145 char *expected = NULL;
146 char *result = NULL;
147
148 expected = craft_expected(&tests[i], test_time);
149 if (!expected) {
150 fprintf(stderr, "Failed to craft expected output\n");
151 goto loop;
152 }
153
154 result = backward_compat_group_by_session(tests[i].stream_path,
155 tests[i].session_name, test_time);
156 if (!result && tests[i].is_valid) {
157 fprintf(stderr, "Failed to get result\n");
158 goto loop;
159 } else if (!result && tests[i].is_valid == false) {
160 pass("Returned null as expected");
161 goto loop;
162 }
163
164 ok(strncmp(expected, result, strlen(expected)) == 0,
165 "In: %s, out: %s, expected: %s",
166 tests[i].stream_path, result, expected);
167 loop:
168 free(expected);
169 free(result);
170 }
171 return exit_status();
172 }
This page took 0.032499 seconds and 4 git commands to generate.