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