4 * Test that hidden triggers are not visible to liblttng-ctl.
6 * Copyright (C) 2021 Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 * SPDX-License-Identifier: MIT
20 #include <common/macros.h>
21 #include <lttng/lttng.h>
25 #define TEST_SESSION_NAME "test_session"
26 #define TEST_CHANNEL_NAME "test_channel"
29 int get_registered_triggers_count(void)
32 enum lttng_error_code ret_code
;
33 enum lttng_trigger_status trigger_status
;
34 struct lttng_triggers
*triggers
= NULL
;
35 unsigned int trigger_count
;
37 ret_code
= lttng_list_triggers(&triggers
);
38 if (ret_code
!= LTTNG_OK
) {
39 fail("Failed to list triggers");
44 trigger_status
= lttng_triggers_get_count(triggers
, &trigger_count
);
45 if (trigger_status
!= LTTNG_TRIGGER_STATUS_OK
) {
46 fail("Failed to get count of triggers returned by listing");
51 ret
= (int) trigger_count
;
54 lttng_triggers_destroy(triggers
);
59 int setup_session_with_size_rotation_schedule(const char *session_output_path
)
62 struct lttng_session_descriptor
*session_desriptor
= NULL
;
63 enum lttng_error_code ret_code
;
64 struct lttng_handle ust_channel_handle
= {
65 .session_name
= TEST_SESSION_NAME
,
66 .domain
.type
= LTTNG_DOMAIN_UST
,
67 .domain
.buf_type
= LTTNG_BUFFER_PER_UID
,
69 struct lttng_channel channel_cfg
= {
70 .name
= TEST_CHANNEL_NAME
,
73 .attr
.subbuf_size
= sysconf(_SC_PAGESIZE
) * 8,
75 .attr
.output
= LTTNG_EVENT_MMAP
,
77 enum lttng_rotation_status rotation_status
;
78 struct lttng_rotation_schedule
*rotation_schedule
= NULL
;
80 session_desriptor
= lttng_session_descriptor_local_create(
81 TEST_SESSION_NAME
, session_output_path
);
82 if (!session_desriptor
) {
83 fail("Failed to create session descriptor for session `%s`",
89 ret_code
= lttng_create_session_ext(session_desriptor
);
90 if (ret_code
!= LTTNG_OK
) {
91 fail("Failed to create session `%s`: %s", TEST_SESSION_NAME
,
92 lttng_strerror(-ret_code
));
97 ret
= lttng_enable_channel(&ust_channel_handle
, &channel_cfg
);
99 fail("Failed to enable channel `%s`: %s", TEST_CHANNEL_NAME
,
100 lttng_strerror(ret
));
105 ret
= lttng_start_tracing(TEST_SESSION_NAME
);
107 fail("Failed to start session `%s`: %s", TEST_SESSION_NAME
,
108 lttng_strerror(ret
));
113 rotation_schedule
= lttng_rotation_schedule_size_threshold_create();
114 if (!rotation_schedule
) {
115 fail("Failed to create rotation schedule descriptor");
121 * The rotation schedule size threshold doesn't matter; no event rules
122 * were specified so the session consumed size should not grow over
125 rotation_status
= lttng_rotation_schedule_size_threshold_set_threshold(
126 rotation_schedule
, sysconf(_SC_PAGESIZE
) * 4096);
127 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
128 fail("Failed to set size threshold of session rotation schedule");
133 rotation_status
= lttng_session_add_rotation_schedule(
134 TEST_SESSION_NAME
, rotation_schedule
);
135 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
136 fail("Failed to set size-based rotation schedule on session `%s`",
144 lttng_session_descriptor_destroy(session_desriptor
);
145 lttng_rotation_schedule_destroy(rotation_schedule
);
149 int main(int argc
, const char **argv
)
154 fail("Missing trace path");
158 plan_tests(TEST_COUNT
);
160 if (get_registered_triggers_count() != 0) {
161 fail("Session daemon already has registered triggers, bailing out");
165 ret
= setup_session_with_size_rotation_schedule(argv
[1]);
170 ok(get_registered_triggers_count() == 0,
171 "No triggers visible while session has an enabled size-based rotation schedule");
173 ret
= lttng_destroy_session(TEST_SESSION_NAME
);
175 fail("Failed to destroy session `%s`", TEST_SESSION_NAME
);
179 return exit_status();