Commit | Line | Data |
---|---|---|
9cff59ec JR |
1 | /* |
2 | * test_action.c | |
3 | * | |
4 | * Unit tests for the notification API. | |
5 | * | |
6 | * Copyright (C) 2017 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> | |
7 | * | |
8 | * SPDX-License-Identifier: MIT | |
9 | * | |
10 | */ | |
11 | ||
c9e313bc SM |
12 | #include <common/payload-view.hpp> |
13 | #include <common/payload.hpp> | |
28ab034a | 14 | |
c9e313bc | 15 | #include <lttng/action/action-internal.hpp> |
9cff59ec | 16 | #include <lttng/action/action.h> |
2460203a | 17 | #include <lttng/action/list-internal.hpp> |
9cff59ec | 18 | #include <lttng/action/notify.h> |
c9e313bc | 19 | #include <lttng/action/rate-policy-internal.hpp> |
7f4d5b07 | 20 | #include <lttng/action/rate-policy.h> |
ce1c2b5d | 21 | #include <lttng/action/rotate-session.h> |
5b2c0a3e | 22 | #include <lttng/action/snapshot-session.h> |
ea453cf4 | 23 | #include <lttng/action/start-session.h> |
3474dcb1 | 24 | #include <lttng/action/stop-session.h> |
9cff59ec | 25 | |
28ab034a JG |
26 | #include <inttypes.h> |
27 | #include <stdio.h> | |
28 | #include <string.h> | |
29 | #include <tap/tap.h> | |
30 | #include <unistd.h> | |
31 | ||
9cff59ec JR |
32 | /* For error.h */ |
33 | int lttng_opt_quiet = 1; | |
34 | int lttng_opt_verbose; | |
35 | int lttng_opt_mi; | |
36 | ||
2460203a | 37 | #define NUM_TESTS 71 |
9cff59ec | 38 | |
cd9adb8b | 39 | static void test_action_notify() |
9cff59ec | 40 | { |
193cc911 JR |
41 | int ret; |
42 | enum lttng_action_status status; | |
cd9adb8b JG |
43 | struct lttng_action *notify_action = nullptr, *notify_action_from_buffer = nullptr; |
44 | struct lttng_rate_policy *policy = nullptr, *default_policy; | |
193cc911 JR |
45 | struct lttng_payload payload; |
46 | ||
47 | lttng_payload_init(&payload); | |
48 | ||
49 | /* To set. */ | |
7f4d5b07 | 50 | policy = lttng_rate_policy_every_n_create(100); |
193cc911 | 51 | /* For comparison. */ |
7f4d5b07 | 52 | default_policy = lttng_rate_policy_every_n_create(1); |
193cc911 | 53 | |
a0377dfe | 54 | LTTNG_ASSERT(policy && default_policy); |
9cff59ec JR |
55 | |
56 | notify_action = lttng_action_notify_create(); | |
57 | ok(notify_action, "Create notify action"); | |
58 | ok(lttng_action_get_type(notify_action) == LTTNG_ACTION_TYPE_NOTIFY, | |
28ab034a | 59 | "Action has type LTTNG_ACTION_TYPE_NOTIFY"); |
193cc911 JR |
60 | |
61 | /* Validate the default policy for a notify action. */ | |
62 | { | |
cd9adb8b | 63 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a | 64 | status = lttng_action_notify_get_rate_policy(notify_action, &cur_policy); |
193cc911 | 65 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
66 | lttng_rate_policy_is_equal(default_policy, cur_policy), |
67 | "Default policy is every n=1"); | |
193cc911 JR |
68 | } |
69 | ||
70 | /* Set a custom policy. */ | |
7f4d5b07 JR |
71 | status = lttng_action_notify_set_rate_policy(notify_action, policy); |
72 | ok(status == LTTNG_ACTION_STATUS_OK, "Set rate policy"); | |
193cc911 JR |
73 | |
74 | /* Validate the custom policy for a notify action. */ | |
75 | { | |
cd9adb8b | 76 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a | 77 | status = lttng_action_notify_get_rate_policy(notify_action, &cur_policy); |
193cc911 | 78 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
79 | lttng_rate_policy_is_equal(policy, cur_policy), |
80 | "Notify action policy get"); | |
193cc911 JR |
81 | } |
82 | ||
83 | ret = lttng_action_serialize(notify_action, &payload); | |
84 | ok(ret == 0, "Action notify serialized"); | |
85 | ||
86 | { | |
28ab034a JG |
87 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); |
88 | (void) lttng_action_create_from_payload(&view, ¬ify_action_from_buffer); | |
193cc911 | 89 | } |
28ab034a | 90 | ok(notify_action_from_buffer, "Notify action created from payload is non-null"); |
193cc911 JR |
91 | |
92 | ok(lttng_action_is_equal(notify_action, notify_action_from_buffer), | |
28ab034a | 93 | "Serialized and de-serialized notify action are equal"); |
193cc911 | 94 | |
7f4d5b07 JR |
95 | lttng_rate_policy_destroy(default_policy); |
96 | lttng_rate_policy_destroy(policy); | |
9cff59ec | 97 | lttng_action_destroy(notify_action); |
193cc911 JR |
98 | lttng_action_destroy(notify_action_from_buffer); |
99 | lttng_payload_reset(&payload); | |
9cff59ec JR |
100 | } |
101 | ||
2460203a FD |
102 | static void test_action_list(void) |
103 | { | |
104 | int ret, action_idx; | |
105 | struct lttng_action *list_action = NULL, *list_action_from_buffer = NULL, | |
b17ed2ad JG |
106 | *stop_session_action = NULL, *notify_action = NULL, |
107 | *start_session_action = NULL; | |
2460203a FD |
108 | struct lttng_payload payload; |
109 | ||
110 | lttng_payload_init(&payload); | |
111 | ||
112 | list_action = lttng_action_list_create(); | |
113 | ok(list_action, "Create list action"); | |
114 | ok(lttng_action_get_type(list_action) == LTTNG_ACTION_TYPE_LIST, | |
115 | "Action has type LTTNG_ACTION_TYPE_LIST"); | |
116 | ||
117 | start_session_action = lttng_action_start_session_create(); | |
118 | (void) lttng_action_start_session_set_session_name(start_session_action, "une-session"); | |
119 | ||
120 | stop_session_action = lttng_action_stop_session_create(); | |
121 | (void) lttng_action_stop_session_set_session_name(stop_session_action, "une-autre-session"); | |
122 | notify_action = lttng_action_notify_create(); | |
123 | ||
124 | lttng_action_list_add_action(list_action, start_session_action); | |
125 | lttng_action_list_add_action(list_action, stop_session_action); | |
126 | lttng_action_list_add_action(list_action, notify_action); | |
127 | ||
128 | ret = lttng_action_serialize(list_action, &payload); | |
129 | ok(ret == 0, "Action list serialized"); | |
130 | ||
131 | { | |
132 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); | |
133 | (void) lttng_action_create_from_payload(&view, &list_action_from_buffer); | |
134 | } | |
135 | ok(list_action_from_buffer, "Notify action created from payload is non-null"); | |
136 | ||
137 | ok(lttng_action_is_equal(list_action, list_action_from_buffer), | |
138 | "Serialized and de-serialized list action are equal"); | |
139 | ||
140 | action_idx = 0; | |
b17ed2ad JG |
141 | for (auto action : lttng::ctl::const_action_list_view(list_action)) { |
142 | enum lttng_action_type inner_action_type = lttng_action_get_type(action); | |
2460203a FD |
143 | switch (action_idx) { |
144 | case 0: | |
145 | ok(inner_action_type == LTTNG_ACTION_TYPE_START_SESSION, | |
146 | "First inner action of action list is `start-session` action"); | |
147 | break; | |
148 | case 1: | |
149 | ok(inner_action_type == LTTNG_ACTION_TYPE_STOP_SESSION, | |
150 | "Second inner action of action list is `stop-session` action"); | |
151 | break; | |
152 | case 2: | |
153 | ok(inner_action_type == LTTNG_ACTION_TYPE_NOTIFY, | |
154 | "Third inner action of action list is `notify` action"); | |
155 | break; | |
156 | } | |
157 | action_idx++; | |
158 | } | |
159 | ||
160 | action_idx = 0; | |
b17ed2ad JG |
161 | for (auto action : lttng::ctl::action_list_view(list_action)) { |
162 | enum lttng_action_type inner_action_type = lttng_action_get_type(action); | |
2460203a FD |
163 | switch (action_idx) { |
164 | case 0: | |
165 | ok(inner_action_type == LTTNG_ACTION_TYPE_START_SESSION, | |
166 | "First inner action of action list is `start-session` action"); | |
167 | break; | |
168 | case 1: | |
169 | ok(inner_action_type == LTTNG_ACTION_TYPE_STOP_SESSION, | |
170 | "Second inner action of action list is `stop-session` action"); | |
171 | break; | |
172 | case 2: | |
173 | ok(inner_action_type == LTTNG_ACTION_TYPE_NOTIFY, | |
174 | "Third inner action of action list is `notify` action"); | |
175 | break; | |
176 | } | |
177 | action_idx++; | |
178 | } | |
179 | ||
180 | lttng_action_destroy(list_action); | |
181 | lttng_action_destroy(list_action_from_buffer); | |
182 | lttng_action_destroy(start_session_action); | |
183 | lttng_action_destroy(stop_session_action); | |
184 | lttng_action_destroy(notify_action); | |
185 | lttng_payload_reset(&payload); | |
186 | } | |
187 | ||
188 | static void test_action_rotate_session(void) | |
ce1c2b5d JR |
189 | { |
190 | int ret; | |
191 | enum lttng_action_status status; | |
cd9adb8b JG |
192 | struct lttng_action *rotate_session_action = nullptr, |
193 | *rotate_session_action_from_buffer = nullptr; | |
194 | struct lttng_rate_policy *policy = nullptr, *default_policy; | |
ce1c2b5d JR |
195 | struct lttng_payload payload; |
196 | const char *session_name = "my_session_name"; | |
197 | const char *get_session_name; | |
198 | ||
199 | lttng_payload_init(&payload); | |
200 | ||
201 | /* To set. */ | |
7f4d5b07 | 202 | policy = lttng_rate_policy_every_n_create(100); |
ce1c2b5d | 203 | /* For comparison. */ |
7f4d5b07 | 204 | default_policy = lttng_rate_policy_every_n_create(1); |
ce1c2b5d | 205 | |
a0377dfe | 206 | LTTNG_ASSERT(policy && default_policy); |
ce1c2b5d JR |
207 | |
208 | rotate_session_action = lttng_action_rotate_session_create(); | |
209 | ok(rotate_session_action, "Create rotate_session action"); | |
28ab034a JG |
210 | ok(lttng_action_get_type(rotate_session_action) == LTTNG_ACTION_TYPE_ROTATE_SESSION, |
211 | "Action has type LTTNG_ACTION_TYPE_ROTATE_SESSION"); | |
ce1c2b5d JR |
212 | |
213 | /* Session name setter. */ | |
cd9adb8b | 214 | status = lttng_action_rotate_session_set_session_name(nullptr, nullptr); |
28ab034a | 215 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); |
cd9adb8b | 216 | status = lttng_action_rotate_session_set_session_name(rotate_session_action, nullptr); |
28ab034a | 217 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); |
cd9adb8b | 218 | status = lttng_action_rotate_session_set_session_name(nullptr, session_name); |
28ab034a | 219 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); |
ce1c2b5d JR |
220 | |
221 | /* Set the session name */ | |
28ab034a | 222 | status = lttng_action_rotate_session_set_session_name(rotate_session_action, session_name); |
ce1c2b5d JR |
223 | ok(status == LTTNG_ACTION_STATUS_OK, "Set session name"); |
224 | ||
28ab034a JG |
225 | status = lttng_action_rotate_session_get_session_name(rotate_session_action, |
226 | &get_session_name); | |
227 | ok(status == LTTNG_ACTION_STATUS_OK && !strcmp(session_name, get_session_name), | |
228 | "Get session name, expected `%s` got `%s`", | |
229 | session_name, | |
230 | get_session_name); | |
ce1c2b5d JR |
231 | |
232 | /* Validate the default policy for a rotate_session action. */ | |
233 | { | |
cd9adb8b | 234 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
235 | status = lttng_action_rotate_session_get_rate_policy(rotate_session_action, |
236 | &cur_policy); | |
ce1c2b5d | 237 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
238 | lttng_rate_policy_is_equal(default_policy, cur_policy), |
239 | "Default policy is every n=1"); | |
ce1c2b5d JR |
240 | } |
241 | ||
242 | /* Set a custom policy. */ | |
28ab034a | 243 | status = lttng_action_rotate_session_set_rate_policy(rotate_session_action, policy); |
7f4d5b07 | 244 | ok(status == LTTNG_ACTION_STATUS_OK, "Set rate policy"); |
ce1c2b5d JR |
245 | |
246 | /* Validate the custom policy for a rotate_session action. */ | |
247 | { | |
cd9adb8b | 248 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
249 | status = lttng_action_rotate_session_get_rate_policy(rotate_session_action, |
250 | &cur_policy); | |
ce1c2b5d | 251 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
252 | lttng_rate_policy_is_equal(policy, cur_policy), |
253 | "rotate_session action policy get"); | |
ce1c2b5d JR |
254 | } |
255 | ||
256 | /* Ser/des tests. */ | |
257 | ret = lttng_action_serialize(rotate_session_action, &payload); | |
258 | ok(ret == 0, "Action rotate_session serialized"); | |
259 | ||
260 | { | |
28ab034a JG |
261 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); |
262 | (void) lttng_action_create_from_payload(&view, &rotate_session_action_from_buffer); | |
ce1c2b5d JR |
263 | } |
264 | ok(rotate_session_action_from_buffer, | |
28ab034a | 265 | "rotate_session action created from payload is non-null"); |
ce1c2b5d | 266 | |
28ab034a JG |
267 | ok(lttng_action_is_equal(rotate_session_action, rotate_session_action_from_buffer), |
268 | "Serialized and de-serialized rotate_session action are equal"); | |
ce1c2b5d | 269 | |
7f4d5b07 JR |
270 | lttng_rate_policy_destroy(default_policy); |
271 | lttng_rate_policy_destroy(policy); | |
ce1c2b5d JR |
272 | lttng_action_destroy(rotate_session_action); |
273 | lttng_action_destroy(rotate_session_action_from_buffer); | |
274 | lttng_payload_reset(&payload); | |
275 | } | |
276 | ||
cd9adb8b | 277 | static void test_action_start_session() |
ea453cf4 JR |
278 | { |
279 | int ret; | |
280 | enum lttng_action_status status; | |
cd9adb8b JG |
281 | struct lttng_action *start_session_action = nullptr, |
282 | *start_session_action_from_buffer = nullptr; | |
283 | struct lttng_rate_policy *policy = nullptr, *default_policy; | |
ea453cf4 JR |
284 | struct lttng_payload payload; |
285 | const char *session_name = "my_session_name"; | |
286 | const char *get_session_name; | |
287 | ||
288 | lttng_payload_init(&payload); | |
289 | ||
290 | /* To set. */ | |
7f4d5b07 | 291 | policy = lttng_rate_policy_every_n_create(100); |
ea453cf4 | 292 | /* For comparison. */ |
7f4d5b07 | 293 | default_policy = lttng_rate_policy_every_n_create(1); |
ea453cf4 | 294 | |
a0377dfe | 295 | LTTNG_ASSERT(policy && default_policy); |
ea453cf4 JR |
296 | |
297 | start_session_action = lttng_action_start_session_create(); | |
298 | ok(start_session_action, "Create start_session action"); | |
28ab034a JG |
299 | ok(lttng_action_get_type(start_session_action) == LTTNG_ACTION_TYPE_START_SESSION, |
300 | "Action has type LTTNG_ACTION_TYPE_START_SESSION"); | |
ea453cf4 JR |
301 | |
302 | /* Session name setter. */ | |
cd9adb8b | 303 | status = lttng_action_start_session_set_session_name(nullptr, nullptr); |
28ab034a | 304 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); |
cd9adb8b | 305 | status = lttng_action_start_session_set_session_name(start_session_action, nullptr); |
28ab034a | 306 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); |
cd9adb8b | 307 | status = lttng_action_start_session_set_session_name(nullptr, session_name); |
28ab034a | 308 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); |
ea453cf4 JR |
309 | |
310 | /* Set the session name */ | |
28ab034a | 311 | status = lttng_action_start_session_set_session_name(start_session_action, session_name); |
ea453cf4 JR |
312 | ok(status == LTTNG_ACTION_STATUS_OK, "Set session name"); |
313 | ||
28ab034a JG |
314 | status = lttng_action_start_session_get_session_name(start_session_action, |
315 | &get_session_name); | |
316 | ok(status == LTTNG_ACTION_STATUS_OK && !strcmp(session_name, get_session_name), | |
317 | "Get session name, expected `%s` got `%s`", | |
318 | session_name, | |
319 | get_session_name); | |
ea453cf4 JR |
320 | |
321 | /* Validate the default policy for a start_session action. */ | |
322 | { | |
cd9adb8b | 323 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
324 | status = lttng_action_start_session_get_rate_policy(start_session_action, |
325 | &cur_policy); | |
ea453cf4 | 326 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
327 | lttng_rate_policy_is_equal(default_policy, cur_policy), |
328 | "Default policy is every n=1"); | |
ea453cf4 JR |
329 | } |
330 | ||
331 | /* Set a custom policy. */ | |
28ab034a | 332 | status = lttng_action_start_session_set_rate_policy(start_session_action, policy); |
7f4d5b07 | 333 | ok(status == LTTNG_ACTION_STATUS_OK, "Set rate policy"); |
ea453cf4 JR |
334 | |
335 | /* Validate the custom policy for a start_session action. */ | |
336 | { | |
cd9adb8b | 337 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
338 | status = lttng_action_start_session_get_rate_policy(start_session_action, |
339 | &cur_policy); | |
ea453cf4 | 340 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
341 | lttng_rate_policy_is_equal(policy, cur_policy), |
342 | "start_session action policy get"); | |
ea453cf4 JR |
343 | } |
344 | ||
345 | /* Ser/des tests. */ | |
346 | ret = lttng_action_serialize(start_session_action, &payload); | |
347 | ok(ret == 0, "Action start_session serialized"); | |
348 | ||
349 | { | |
28ab034a JG |
350 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); |
351 | (void) lttng_action_create_from_payload(&view, &start_session_action_from_buffer); | |
ea453cf4 JR |
352 | } |
353 | ok(start_session_action_from_buffer, | |
28ab034a | 354 | "start_session action created from payload is non-null"); |
ea453cf4 | 355 | |
28ab034a JG |
356 | ok(lttng_action_is_equal(start_session_action, start_session_action_from_buffer), |
357 | "Serialized and de-serialized start_session action are equal"); | |
ea453cf4 | 358 | |
7f4d5b07 JR |
359 | lttng_rate_policy_destroy(default_policy); |
360 | lttng_rate_policy_destroy(policy); | |
ea453cf4 JR |
361 | lttng_action_destroy(start_session_action); |
362 | lttng_action_destroy(start_session_action_from_buffer); | |
363 | lttng_payload_reset(&payload); | |
364 | } | |
365 | ||
cd9adb8b | 366 | static void test_action_stop_session() |
3474dcb1 JR |
367 | { |
368 | int ret; | |
369 | enum lttng_action_status status; | |
cd9adb8b JG |
370 | struct lttng_action *stop_session_action = nullptr, |
371 | *stop_session_action_from_buffer = nullptr; | |
372 | struct lttng_rate_policy *policy = nullptr, *default_policy; | |
3474dcb1 JR |
373 | struct lttng_payload payload; |
374 | const char *session_name = "my_session_name"; | |
375 | const char *get_session_name; | |
376 | ||
377 | lttng_payload_init(&payload); | |
378 | ||
379 | /* To set. */ | |
7f4d5b07 | 380 | policy = lttng_rate_policy_every_n_create(100); |
3474dcb1 | 381 | /* For comparison. */ |
7f4d5b07 | 382 | default_policy = lttng_rate_policy_every_n_create(1); |
3474dcb1 | 383 | |
a0377dfe | 384 | LTTNG_ASSERT(policy && default_policy); |
3474dcb1 JR |
385 | |
386 | stop_session_action = lttng_action_stop_session_create(); | |
387 | ok(stop_session_action, "Create stop_session action"); | |
28ab034a JG |
388 | ok(lttng_action_get_type(stop_session_action) == LTTNG_ACTION_TYPE_STOP_SESSION, |
389 | "Action has type LTTNG_ACTION_TYPE_STOP_SESSION"); | |
3474dcb1 JR |
390 | |
391 | /* Session name setter. */ | |
cd9adb8b | 392 | status = lttng_action_stop_session_set_session_name(nullptr, nullptr); |
28ab034a | 393 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); |
cd9adb8b | 394 | status = lttng_action_stop_session_set_session_name(stop_session_action, nullptr); |
28ab034a | 395 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); |
cd9adb8b | 396 | status = lttng_action_stop_session_set_session_name(nullptr, session_name); |
28ab034a | 397 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); |
3474dcb1 JR |
398 | |
399 | /* Set the session name */ | |
28ab034a | 400 | status = lttng_action_stop_session_set_session_name(stop_session_action, session_name); |
3474dcb1 JR |
401 | ok(status == LTTNG_ACTION_STATUS_OK, "Set session name"); |
402 | ||
28ab034a JG |
403 | status = lttng_action_stop_session_get_session_name(stop_session_action, &get_session_name); |
404 | ok(status == LTTNG_ACTION_STATUS_OK && !strcmp(session_name, get_session_name), | |
405 | "Get session name, expected `%s` got `%s`", | |
406 | session_name, | |
407 | get_session_name); | |
3474dcb1 JR |
408 | |
409 | /* Validate the default policy for a stop_session action. */ | |
410 | { | |
cd9adb8b | 411 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
412 | status = |
413 | lttng_action_stop_session_get_rate_policy(stop_session_action, &cur_policy); | |
3474dcb1 | 414 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
415 | lttng_rate_policy_is_equal(default_policy, cur_policy), |
416 | "Default policy is every n=1"); | |
3474dcb1 JR |
417 | } |
418 | ||
419 | /* Set a custom policy. */ | |
28ab034a | 420 | status = lttng_action_stop_session_set_rate_policy(stop_session_action, policy); |
7f4d5b07 | 421 | ok(status == LTTNG_ACTION_STATUS_OK, "Set rate policy"); |
3474dcb1 JR |
422 | |
423 | /* Validate the custom policy for a stop_session action. */ | |
424 | { | |
cd9adb8b | 425 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
426 | status = |
427 | lttng_action_stop_session_get_rate_policy(stop_session_action, &cur_policy); | |
3474dcb1 | 428 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
429 | lttng_rate_policy_is_equal(policy, cur_policy), |
430 | "stop_session action policy get"); | |
3474dcb1 JR |
431 | } |
432 | ||
433 | /* Ser/des tests. */ | |
434 | ret = lttng_action_serialize(stop_session_action, &payload); | |
435 | ok(ret == 0, "Action stop_session serialized"); | |
436 | ||
437 | { | |
28ab034a JG |
438 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); |
439 | (void) lttng_action_create_from_payload(&view, &stop_session_action_from_buffer); | |
3474dcb1 | 440 | } |
28ab034a | 441 | ok(stop_session_action_from_buffer, "stop_session action created from payload is non-null"); |
3474dcb1 | 442 | |
28ab034a JG |
443 | ok(lttng_action_is_equal(stop_session_action, stop_session_action_from_buffer), |
444 | "Serialized and de-serialized stop_session action are equal"); | |
3474dcb1 | 445 | |
7f4d5b07 JR |
446 | lttng_rate_policy_destroy(default_policy); |
447 | lttng_rate_policy_destroy(policy); | |
3474dcb1 JR |
448 | lttng_action_destroy(stop_session_action); |
449 | lttng_action_destroy(stop_session_action_from_buffer); | |
450 | lttng_payload_reset(&payload); | |
451 | } | |
452 | ||
cd9adb8b | 453 | static void test_action_snapshot_session() |
5b2c0a3e JR |
454 | { |
455 | int ret; | |
456 | enum lttng_action_status status; | |
cd9adb8b JG |
457 | struct lttng_action *snapshot_session_action = nullptr, |
458 | *snapshot_session_action_from_buffer = nullptr; | |
459 | struct lttng_rate_policy *policy = nullptr, *default_policy; | |
5b2c0a3e JR |
460 | struct lttng_payload payload; |
461 | const char *session_name = "my_session_name"; | |
462 | const char *get_session_name; | |
463 | ||
464 | lttng_payload_init(&payload); | |
465 | ||
466 | /* To set. */ | |
7f4d5b07 | 467 | policy = lttng_rate_policy_every_n_create(100); |
5b2c0a3e | 468 | /* For comparison. */ |
7f4d5b07 | 469 | default_policy = lttng_rate_policy_every_n_create(1); |
5b2c0a3e | 470 | |
a0377dfe | 471 | LTTNG_ASSERT(policy && default_policy); |
5b2c0a3e JR |
472 | |
473 | snapshot_session_action = lttng_action_snapshot_session_create(); | |
474 | ok(snapshot_session_action, "Create snapshot_session action"); | |
28ab034a JG |
475 | ok(lttng_action_get_type(snapshot_session_action) == LTTNG_ACTION_TYPE_SNAPSHOT_SESSION, |
476 | "Action has type LTTNG_ACTION_TYPE_SNAPSHOT_SESSION"); | |
5b2c0a3e JR |
477 | |
478 | /* Session name setter. */ | |
cd9adb8b | 479 | status = lttng_action_snapshot_session_set_session_name(nullptr, nullptr); |
28ab034a | 480 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,NULL) expect invalid"); |
cd9adb8b | 481 | status = lttng_action_snapshot_session_set_session_name(snapshot_session_action, nullptr); |
28ab034a | 482 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (object,NULL) expect invalid"); |
cd9adb8b | 483 | status = lttng_action_snapshot_session_set_session_name(nullptr, session_name); |
28ab034a | 484 | ok(status == LTTNG_ACTION_STATUS_INVALID, "Set session name (NULL,object) expect invalid"); |
5b2c0a3e JR |
485 | |
486 | /* Set the session name */ | |
28ab034a JG |
487 | status = lttng_action_snapshot_session_set_session_name(snapshot_session_action, |
488 | session_name); | |
5b2c0a3e JR |
489 | ok(status == LTTNG_ACTION_STATUS_OK, "Set session name"); |
490 | ||
28ab034a JG |
491 | status = lttng_action_snapshot_session_get_session_name(snapshot_session_action, |
492 | &get_session_name); | |
493 | ok(status == LTTNG_ACTION_STATUS_OK && !strcmp(session_name, get_session_name), | |
494 | "Get session name, expected `%s` got `%s`", | |
495 | session_name, | |
496 | get_session_name); | |
5b2c0a3e JR |
497 | |
498 | /* Validate the default policy for a snapshot_session action. */ | |
499 | { | |
cd9adb8b | 500 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
501 | status = lttng_action_snapshot_session_get_rate_policy(snapshot_session_action, |
502 | &cur_policy); | |
5b2c0a3e | 503 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
504 | lttng_rate_policy_is_equal(default_policy, cur_policy), |
505 | "Default policy is every n=1"); | |
5b2c0a3e JR |
506 | } |
507 | ||
508 | /* Set a custom policy. */ | |
28ab034a | 509 | status = lttng_action_snapshot_session_set_rate_policy(snapshot_session_action, policy); |
7f4d5b07 | 510 | ok(status == LTTNG_ACTION_STATUS_OK, "Set rate policy"); |
5b2c0a3e JR |
511 | |
512 | /* Validate the custom policy for a snapshot_session action. */ | |
513 | { | |
cd9adb8b | 514 | const struct lttng_rate_policy *cur_policy = nullptr; |
28ab034a JG |
515 | status = lttng_action_snapshot_session_get_rate_policy(snapshot_session_action, |
516 | &cur_policy); | |
5b2c0a3e | 517 | ok(status == LTTNG_ACTION_STATUS_OK && |
28ab034a JG |
518 | lttng_rate_policy_is_equal(policy, cur_policy), |
519 | "snapshot_session action policy get"); | |
5b2c0a3e JR |
520 | } |
521 | ||
522 | /* Ser/des tests. */ | |
523 | ret = lttng_action_serialize(snapshot_session_action, &payload); | |
524 | ok(ret == 0, "Action snapshot_session serialized"); | |
525 | ||
526 | { | |
28ab034a JG |
527 | struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); |
528 | (void) lttng_action_create_from_payload(&view, | |
529 | &snapshot_session_action_from_buffer); | |
5b2c0a3e JR |
530 | } |
531 | ok(snapshot_session_action_from_buffer, | |
28ab034a | 532 | "snapshot_session action created from payload is non-null"); |
5b2c0a3e | 533 | |
28ab034a JG |
534 | ok(lttng_action_is_equal(snapshot_session_action, snapshot_session_action_from_buffer), |
535 | "Serialized and de-serialized snapshot_session action are equal"); | |
5b2c0a3e | 536 | |
7f4d5b07 JR |
537 | lttng_rate_policy_destroy(default_policy); |
538 | lttng_rate_policy_destroy(policy); | |
5b2c0a3e JR |
539 | lttng_action_destroy(snapshot_session_action); |
540 | lttng_action_destroy(snapshot_session_action_from_buffer); | |
541 | lttng_payload_reset(&payload); | |
542 | } | |
543 | ||
cd9adb8b | 544 | int main() |
9cff59ec JR |
545 | { |
546 | plan_tests(NUM_TESTS); | |
547 | test_action_notify(); | |
2460203a | 548 | test_action_list(); |
ce1c2b5d | 549 | test_action_rotate_session(); |
ea453cf4 | 550 | test_action_start_session(); |
3474dcb1 | 551 | test_action_stop_session(); |
5b2c0a3e | 552 | test_action_snapshot_session(); |
9cff59ec JR |
553 | return exit_status(); |
554 | } |