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