Revert "sessiond: trigger: run trigger actions through an action executor"
[lttng-tools.git] / tests / unit / test_relayd_backward_compat_group_by_session.c
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
8#include <assert.h>
9#include <stdbool.h>
10#include <stdio.h>
11#include <stdlib.h>
12#include <string.h>
13#include <tap/tap.h>
14
d2cb4a90
JG
15#include <common/time.h>
16
73e9abbe
JR
17#include "backward-compatibility-group-by.h"
18
19/* Number of TAP tests in this file */
20#define NUM_TESTS_PER_TEST 1
21
22struct test {
b53d4e59
SM
23 const char *stream_path;
24 const char *session_name;
25 const char *hostname;
26 const char *creation_time;
27 const char *extra_path;
28 const char *leftover;
73e9abbe
JR
29 bool is_valid;
30};
31
32int lttng_opt_quiet;
33int lttng_opt_mi;
34int lttng_opt_verbose;
35
36struct 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",
41 true},
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",
46 true},
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",
55 true},
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",
60 true},
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",
65 true},
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",
70 true},
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",
83 true},
84 /* Corner cases*/
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",
90 true},
91 /* Empty path */
92 {"", "test", "", "", "", "", false},
93 /* Path without second token */
94 {"hostname", "test", "hostname", "", "", "", false},
95 /* No leftover */
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},
100};
101
d2cb4a90 102static char *craft_expected(struct test *test, time_t relay_session_creation_time)
73e9abbe
JR
103{
104 int ret;
105 char *result = NULL;
d2cb4a90
JG
106 char relay_session_creation_datetime[DATETIME_STR_LEN];
107
108 ret = time_to_datetime_str(relay_session_creation_time,
109 relay_session_creation_datetime,
110 sizeof(relay_session_creation_datetime));
111 if (ret < 0) {
112 result = NULL;
113 goto end;
114 }
73e9abbe 115
d2cb4a90 116 ret = asprintf(&result, "%s/%s-%s/%s%s%s", test->session_name,
73e9abbe 117 test->hostname,
d2cb4a90
JG
118 test->creation_time[0] == '\0' ?
119 relay_session_creation_datetime :
120 test->creation_time,
121 test->extra_path,
73e9abbe
JR
122 test->extra_path[0] != '\0' ? "/" : "", test->leftover);
123 if (ret < 0) {
124 result = NULL;
d2cb4a90 125 goto end;
73e9abbe 126 }
d2cb4a90 127end:
73e9abbe
JR
128 return result;
129}
130
131int main(int argc, char **argv)
132{
9df6c82a 133 int i;
73e9abbe 134 int num_test = sizeof(tests) / sizeof(struct test);
d2cb4a90 135 const time_t test_time = time(NULL);
73e9abbe
JR
136
137 plan_tests(NUM_TESTS_PER_TEST * num_test);
138 diag("Backward compatibility utils for lttng-relayd --group-by-session");
d2cb4a90
JG
139
140 if (test_time == (time_t) -1) {
141 perror("Failed to sample time");
142 return exit_status();
143 }
144
9df6c82a 145 for (i = 0; i < num_test; i++) {
73e9abbe
JR
146 char *expected = NULL;
147 char *result = NULL;
148
d2cb4a90 149 expected = craft_expected(&tests[i], test_time);
73e9abbe
JR
150 if (!expected) {
151 fprintf(stderr, "Failed to craft expected output\n");
152 goto loop;
153 }
154
d2cb4a90
JG
155 result = backward_compat_group_by_session(tests[i].stream_path,
156 tests[i].session_name, test_time);
73e9abbe
JR
157 if (!result && tests[i].is_valid) {
158 fprintf(stderr, "Failed to get result\n");
159 goto loop;
160 } else if (!result && tests[i].is_valid == false) {
161 pass("Returned null as expected");
162 goto loop;
163 }
164
165 ok(strncmp(expected, result, strlen(expected)) == 0,
166 "In: %s, out: %s, expected: %s",
167 tests[i].stream_path, result, expected);
168 loop:
169 free(expected);
170 free(result);
171 }
172 return exit_status();
173}
This page took 0.034491 seconds and 5 git commands to generate.