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