4 * Unit tests for the notification API.
6 * Copyright (C) 2017 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
8 * SPDX-License-Identifier: MIT
12 #include <common/payload-view.hpp>
13 #include <common/payload.hpp>
15 #include <lttng/action/action-internal.hpp>
16 #include <lttng/action/action.h>
17 #include <lttng/action/notify.h>
18 #include <lttng/action/rate-policy-internal.hpp>
19 #include <lttng/action/rate-policy.h>
20 #include <lttng/action/rotate-session.h>
21 #include <lttng/action/snapshot-session.h>
22 #include <lttng/action/start-session.h>
23 #include <lttng/action/stop-session.h>
32 int lttng_opt_quiet
= 1;
33 int lttng_opt_verbose
;
38 static void test_action_notify(void)
41 enum lttng_action_status status
;
42 struct lttng_action
*notify_action
= NULL
, *notify_action_from_buffer
= NULL
;
43 struct lttng_rate_policy
*policy
= NULL
, *default_policy
;
44 struct lttng_payload payload
;
46 lttng_payload_init(&payload
);
49 policy
= lttng_rate_policy_every_n_create(100);
51 default_policy
= lttng_rate_policy_every_n_create(1);
53 LTTNG_ASSERT(policy
&& default_policy
);
55 notify_action
= lttng_action_notify_create();
56 ok(notify_action
, "Create notify action");
57 ok(lttng_action_get_type(notify_action
) == LTTNG_ACTION_TYPE_NOTIFY
,
58 "Action has type LTTNG_ACTION_TYPE_NOTIFY");
60 /* Validate the default policy for a notify action. */
62 const struct lttng_rate_policy
*cur_policy
= NULL
;
63 status
= lttng_action_notify_get_rate_policy(notify_action
, &cur_policy
);
64 ok(status
== LTTNG_ACTION_STATUS_OK
&&
65 lttng_rate_policy_is_equal(default_policy
, cur_policy
),
66 "Default policy is every n=1");
69 /* Set a custom policy. */
70 status
= lttng_action_notify_set_rate_policy(notify_action
, policy
);
71 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set rate policy");
73 /* Validate the custom policy for a notify action. */
75 const struct lttng_rate_policy
*cur_policy
= NULL
;
76 status
= lttng_action_notify_get_rate_policy(notify_action
, &cur_policy
);
77 ok(status
== LTTNG_ACTION_STATUS_OK
&&
78 lttng_rate_policy_is_equal(policy
, cur_policy
),
79 "Notify action policy get");
82 ret
= lttng_action_serialize(notify_action
, &payload
);
83 ok(ret
== 0, "Action notify serialized");
86 struct lttng_payload_view view
= lttng_payload_view_from_payload(&payload
, 0, -1);
87 (void) lttng_action_create_from_payload(&view
, ¬ify_action_from_buffer
);
89 ok(notify_action_from_buffer
, "Notify action created from payload is non-null");
91 ok(lttng_action_is_equal(notify_action
, notify_action_from_buffer
),
92 "Serialized and de-serialized notify action are equal");
94 lttng_rate_policy_destroy(default_policy
);
95 lttng_rate_policy_destroy(policy
);
96 lttng_action_destroy(notify_action
);
97 lttng_action_destroy(notify_action_from_buffer
);
98 lttng_payload_reset(&payload
);
101 static void test_action_rotate_session(void)
104 enum lttng_action_status status
;
105 struct lttng_action
*rotate_session_action
= NULL
,
106 *rotate_session_action_from_buffer
= NULL
;
107 struct lttng_rate_policy
*policy
= NULL
, *default_policy
;
108 struct lttng_payload payload
;
109 const char *session_name
= "my_session_name";
110 const char *get_session_name
;
112 lttng_payload_init(&payload
);
115 policy
= lttng_rate_policy_every_n_create(100);
116 /* For comparison. */
117 default_policy
= lttng_rate_policy_every_n_create(1);
119 LTTNG_ASSERT(policy
&& default_policy
);
121 rotate_session_action
= lttng_action_rotate_session_create();
122 ok(rotate_session_action
, "Create rotate_session action");
123 ok(lttng_action_get_type(rotate_session_action
) == LTTNG_ACTION_TYPE_ROTATE_SESSION
,
124 "Action has type LTTNG_ACTION_TYPE_ROTATE_SESSION");
126 /* Session name setter. */
127 status
= lttng_action_rotate_session_set_session_name(NULL
, NULL
);
128 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,NULL) expect invalid");
129 status
= lttng_action_rotate_session_set_session_name(rotate_session_action
, NULL
);
130 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (object,NULL) expect invalid");
131 status
= lttng_action_rotate_session_set_session_name(NULL
, session_name
);
132 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,object) expect invalid");
134 /* Set the session name */
135 status
= lttng_action_rotate_session_set_session_name(rotate_session_action
, session_name
);
136 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set session name");
138 status
= lttng_action_rotate_session_get_session_name(rotate_session_action
,
140 ok(status
== LTTNG_ACTION_STATUS_OK
&& !strcmp(session_name
, get_session_name
),
141 "Get session name, expected `%s` got `%s`",
145 /* Validate the default policy for a rotate_session action. */
147 const struct lttng_rate_policy
*cur_policy
= NULL
;
148 status
= lttng_action_rotate_session_get_rate_policy(rotate_session_action
,
150 ok(status
== LTTNG_ACTION_STATUS_OK
&&
151 lttng_rate_policy_is_equal(default_policy
, cur_policy
),
152 "Default policy is every n=1");
155 /* Set a custom policy. */
156 status
= lttng_action_rotate_session_set_rate_policy(rotate_session_action
, policy
);
157 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set rate policy");
159 /* Validate the custom policy for a rotate_session action. */
161 const struct lttng_rate_policy
*cur_policy
= NULL
;
162 status
= lttng_action_rotate_session_get_rate_policy(rotate_session_action
,
164 ok(status
== LTTNG_ACTION_STATUS_OK
&&
165 lttng_rate_policy_is_equal(policy
, cur_policy
),
166 "rotate_session action policy get");
170 ret
= lttng_action_serialize(rotate_session_action
, &payload
);
171 ok(ret
== 0, "Action rotate_session serialized");
174 struct lttng_payload_view view
= lttng_payload_view_from_payload(&payload
, 0, -1);
175 (void) lttng_action_create_from_payload(&view
, &rotate_session_action_from_buffer
);
177 ok(rotate_session_action_from_buffer
,
178 "rotate_session action created from payload is non-null");
180 ok(lttng_action_is_equal(rotate_session_action
, rotate_session_action_from_buffer
),
181 "Serialized and de-serialized rotate_session action are equal");
183 lttng_rate_policy_destroy(default_policy
);
184 lttng_rate_policy_destroy(policy
);
185 lttng_action_destroy(rotate_session_action
);
186 lttng_action_destroy(rotate_session_action_from_buffer
);
187 lttng_payload_reset(&payload
);
190 static void test_action_start_session(void)
193 enum lttng_action_status status
;
194 struct lttng_action
*start_session_action
= NULL
, *start_session_action_from_buffer
= NULL
;
195 struct lttng_rate_policy
*policy
= NULL
, *default_policy
;
196 struct lttng_payload payload
;
197 const char *session_name
= "my_session_name";
198 const char *get_session_name
;
200 lttng_payload_init(&payload
);
203 policy
= lttng_rate_policy_every_n_create(100);
204 /* For comparison. */
205 default_policy
= lttng_rate_policy_every_n_create(1);
207 LTTNG_ASSERT(policy
&& default_policy
);
209 start_session_action
= lttng_action_start_session_create();
210 ok(start_session_action
, "Create start_session action");
211 ok(lttng_action_get_type(start_session_action
) == LTTNG_ACTION_TYPE_START_SESSION
,
212 "Action has type LTTNG_ACTION_TYPE_START_SESSION");
214 /* Session name setter. */
215 status
= lttng_action_start_session_set_session_name(NULL
, NULL
);
216 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,NULL) expect invalid");
217 status
= lttng_action_start_session_set_session_name(start_session_action
, NULL
);
218 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (object,NULL) expect invalid");
219 status
= lttng_action_start_session_set_session_name(NULL
, session_name
);
220 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,object) expect invalid");
222 /* Set the session name */
223 status
= lttng_action_start_session_set_session_name(start_session_action
, session_name
);
224 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set session name");
226 status
= lttng_action_start_session_get_session_name(start_session_action
,
228 ok(status
== LTTNG_ACTION_STATUS_OK
&& !strcmp(session_name
, get_session_name
),
229 "Get session name, expected `%s` got `%s`",
233 /* Validate the default policy for a start_session action. */
235 const struct lttng_rate_policy
*cur_policy
= NULL
;
236 status
= lttng_action_start_session_get_rate_policy(start_session_action
,
238 ok(status
== LTTNG_ACTION_STATUS_OK
&&
239 lttng_rate_policy_is_equal(default_policy
, cur_policy
),
240 "Default policy is every n=1");
243 /* Set a custom policy. */
244 status
= lttng_action_start_session_set_rate_policy(start_session_action
, policy
);
245 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set rate policy");
247 /* Validate the custom policy for a start_session action. */
249 const struct lttng_rate_policy
*cur_policy
= NULL
;
250 status
= lttng_action_start_session_get_rate_policy(start_session_action
,
252 ok(status
== LTTNG_ACTION_STATUS_OK
&&
253 lttng_rate_policy_is_equal(policy
, cur_policy
),
254 "start_session action policy get");
258 ret
= lttng_action_serialize(start_session_action
, &payload
);
259 ok(ret
== 0, "Action start_session serialized");
262 struct lttng_payload_view view
= lttng_payload_view_from_payload(&payload
, 0, -1);
263 (void) lttng_action_create_from_payload(&view
, &start_session_action_from_buffer
);
265 ok(start_session_action_from_buffer
,
266 "start_session action created from payload is non-null");
268 ok(lttng_action_is_equal(start_session_action
, start_session_action_from_buffer
),
269 "Serialized and de-serialized start_session action are equal");
271 lttng_rate_policy_destroy(default_policy
);
272 lttng_rate_policy_destroy(policy
);
273 lttng_action_destroy(start_session_action
);
274 lttng_action_destroy(start_session_action_from_buffer
);
275 lttng_payload_reset(&payload
);
278 static void test_action_stop_session(void)
281 enum lttng_action_status status
;
282 struct lttng_action
*stop_session_action
= NULL
, *stop_session_action_from_buffer
= NULL
;
283 struct lttng_rate_policy
*policy
= NULL
, *default_policy
;
284 struct lttng_payload payload
;
285 const char *session_name
= "my_session_name";
286 const char *get_session_name
;
288 lttng_payload_init(&payload
);
291 policy
= lttng_rate_policy_every_n_create(100);
292 /* For comparison. */
293 default_policy
= lttng_rate_policy_every_n_create(1);
295 LTTNG_ASSERT(policy
&& default_policy
);
297 stop_session_action
= lttng_action_stop_session_create();
298 ok(stop_session_action
, "Create stop_session action");
299 ok(lttng_action_get_type(stop_session_action
) == LTTNG_ACTION_TYPE_STOP_SESSION
,
300 "Action has type LTTNG_ACTION_TYPE_STOP_SESSION");
302 /* Session name setter. */
303 status
= lttng_action_stop_session_set_session_name(NULL
, NULL
);
304 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,NULL) expect invalid");
305 status
= lttng_action_stop_session_set_session_name(stop_session_action
, NULL
);
306 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (object,NULL) expect invalid");
307 status
= lttng_action_stop_session_set_session_name(NULL
, session_name
);
308 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,object) expect invalid");
310 /* Set the session name */
311 status
= lttng_action_stop_session_set_session_name(stop_session_action
, session_name
);
312 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set session name");
314 status
= lttng_action_stop_session_get_session_name(stop_session_action
, &get_session_name
);
315 ok(status
== LTTNG_ACTION_STATUS_OK
&& !strcmp(session_name
, get_session_name
),
316 "Get session name, expected `%s` got `%s`",
320 /* Validate the default policy for a stop_session action. */
322 const struct lttng_rate_policy
*cur_policy
= NULL
;
324 lttng_action_stop_session_get_rate_policy(stop_session_action
, &cur_policy
);
325 ok(status
== LTTNG_ACTION_STATUS_OK
&&
326 lttng_rate_policy_is_equal(default_policy
, cur_policy
),
327 "Default policy is every n=1");
330 /* Set a custom policy. */
331 status
= lttng_action_stop_session_set_rate_policy(stop_session_action
, policy
);
332 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set rate policy");
334 /* Validate the custom policy for a stop_session action. */
336 const struct lttng_rate_policy
*cur_policy
= NULL
;
338 lttng_action_stop_session_get_rate_policy(stop_session_action
, &cur_policy
);
339 ok(status
== LTTNG_ACTION_STATUS_OK
&&
340 lttng_rate_policy_is_equal(policy
, cur_policy
),
341 "stop_session action policy get");
345 ret
= lttng_action_serialize(stop_session_action
, &payload
);
346 ok(ret
== 0, "Action stop_session serialized");
349 struct lttng_payload_view view
= lttng_payload_view_from_payload(&payload
, 0, -1);
350 (void) lttng_action_create_from_payload(&view
, &stop_session_action_from_buffer
);
352 ok(stop_session_action_from_buffer
, "stop_session action created from payload is non-null");
354 ok(lttng_action_is_equal(stop_session_action
, stop_session_action_from_buffer
),
355 "Serialized and de-serialized stop_session action are equal");
357 lttng_rate_policy_destroy(default_policy
);
358 lttng_rate_policy_destroy(policy
);
359 lttng_action_destroy(stop_session_action
);
360 lttng_action_destroy(stop_session_action_from_buffer
);
361 lttng_payload_reset(&payload
);
364 static void test_action_snapshot_session(void)
367 enum lttng_action_status status
;
368 struct lttng_action
*snapshot_session_action
= NULL
,
369 *snapshot_session_action_from_buffer
= NULL
;
370 struct lttng_rate_policy
*policy
= NULL
, *default_policy
;
371 struct lttng_payload payload
;
372 const char *session_name
= "my_session_name";
373 const char *get_session_name
;
375 lttng_payload_init(&payload
);
378 policy
= lttng_rate_policy_every_n_create(100);
379 /* For comparison. */
380 default_policy
= lttng_rate_policy_every_n_create(1);
382 LTTNG_ASSERT(policy
&& default_policy
);
384 snapshot_session_action
= lttng_action_snapshot_session_create();
385 ok(snapshot_session_action
, "Create snapshot_session action");
386 ok(lttng_action_get_type(snapshot_session_action
) == LTTNG_ACTION_TYPE_SNAPSHOT_SESSION
,
387 "Action has type LTTNG_ACTION_TYPE_SNAPSHOT_SESSION");
389 /* Session name setter. */
390 status
= lttng_action_snapshot_session_set_session_name(NULL
, NULL
);
391 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,NULL) expect invalid");
392 status
= lttng_action_snapshot_session_set_session_name(snapshot_session_action
, NULL
);
393 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (object,NULL) expect invalid");
394 status
= lttng_action_snapshot_session_set_session_name(NULL
, session_name
);
395 ok(status
== LTTNG_ACTION_STATUS_INVALID
, "Set session name (NULL,object) expect invalid");
397 /* Set the session name */
398 status
= lttng_action_snapshot_session_set_session_name(snapshot_session_action
,
400 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set session name");
402 status
= lttng_action_snapshot_session_get_session_name(snapshot_session_action
,
404 ok(status
== LTTNG_ACTION_STATUS_OK
&& !strcmp(session_name
, get_session_name
),
405 "Get session name, expected `%s` got `%s`",
409 /* Validate the default policy for a snapshot_session action. */
411 const struct lttng_rate_policy
*cur_policy
= NULL
;
412 status
= lttng_action_snapshot_session_get_rate_policy(snapshot_session_action
,
414 ok(status
== LTTNG_ACTION_STATUS_OK
&&
415 lttng_rate_policy_is_equal(default_policy
, cur_policy
),
416 "Default policy is every n=1");
419 /* Set a custom policy. */
420 status
= lttng_action_snapshot_session_set_rate_policy(snapshot_session_action
, policy
);
421 ok(status
== LTTNG_ACTION_STATUS_OK
, "Set rate policy");
423 /* Validate the custom policy for a snapshot_session action. */
425 const struct lttng_rate_policy
*cur_policy
= NULL
;
426 status
= lttng_action_snapshot_session_get_rate_policy(snapshot_session_action
,
428 ok(status
== LTTNG_ACTION_STATUS_OK
&&
429 lttng_rate_policy_is_equal(policy
, cur_policy
),
430 "snapshot_session action policy get");
434 ret
= lttng_action_serialize(snapshot_session_action
, &payload
);
435 ok(ret
== 0, "Action snapshot_session serialized");
438 struct lttng_payload_view view
= lttng_payload_view_from_payload(&payload
, 0, -1);
439 (void) lttng_action_create_from_payload(&view
,
440 &snapshot_session_action_from_buffer
);
442 ok(snapshot_session_action_from_buffer
,
443 "snapshot_session action created from payload is non-null");
445 ok(lttng_action_is_equal(snapshot_session_action
, snapshot_session_action_from_buffer
),
446 "Serialized and de-serialized snapshot_session action are equal");
448 lttng_rate_policy_destroy(default_policy
);
449 lttng_rate_policy_destroy(policy
);
450 lttng_action_destroy(snapshot_session_action
);
451 lttng_action_destroy(snapshot_session_action_from_buffer
);
452 lttng_payload_reset(&payload
);
457 plan_tests(NUM_TESTS
);
458 test_action_notify();
459 test_action_rotate_session();
460 test_action_start_session();
461 test_action_stop_session();
462 test_action_snapshot_session();
463 return exit_status();