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
= {
67 .type
= LTTNG_DOMAIN_UST
,
68 .buf_type
= LTTNG_BUFFER_PER_UID
,
75 lttng_channel channel_cfg
{};
76 strcpy(channel_cfg
.name
, TEST_CHANNEL_NAME
);
77 channel_cfg
.enabled
= 1;
78 channel_cfg
.attr
.overwrite
= -1;
79 channel_cfg
.attr
.subbuf_size
= (uint64_t) sysconf(_SC_PAGE_SIZE
) * 8;
80 channel_cfg
.attr
.num_subbuf
= 8;
81 channel_cfg
.attr
.output
= LTTNG_EVENT_MMAP
;
83 enum lttng_rotation_status rotation_status
;
84 struct lttng_rotation_schedule
*rotation_schedule
= NULL
;
86 session_desriptor
= lttng_session_descriptor_local_create(
87 TEST_SESSION_NAME
, session_output_path
);
88 if (!session_desriptor
) {
89 fail("Failed to create session descriptor for session `%s`",
95 ret_code
= lttng_create_session_ext(session_desriptor
);
96 if (ret_code
!= LTTNG_OK
) {
97 fail("Failed to create session `%s`: %s", TEST_SESSION_NAME
,
98 lttng_strerror(-ret_code
));
103 ret
= lttng_enable_channel(&ust_channel_handle
, &channel_cfg
);
105 fail("Failed to enable channel `%s`: %s", TEST_CHANNEL_NAME
,
106 lttng_strerror(ret
));
111 ret
= lttng_start_tracing(TEST_SESSION_NAME
);
113 fail("Failed to start session `%s`: %s", TEST_SESSION_NAME
,
114 lttng_strerror(ret
));
119 rotation_schedule
= lttng_rotation_schedule_size_threshold_create();
120 if (!rotation_schedule
) {
121 fail("Failed to create rotation schedule descriptor");
127 * The rotation schedule size threshold doesn't matter; no event rules
128 * were specified so the session consumed size should not grow over
131 rotation_status
= lttng_rotation_schedule_size_threshold_set_threshold(
132 rotation_schedule
, sysconf(_SC_PAGE_SIZE
) * 4096);
133 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
134 fail("Failed to set size threshold of session rotation schedule");
139 rotation_status
= lttng_session_add_rotation_schedule(
140 TEST_SESSION_NAME
, rotation_schedule
);
141 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
142 fail("Failed to set size-based rotation schedule on session `%s`",
150 lttng_session_descriptor_destroy(session_desriptor
);
151 lttng_rotation_schedule_destroy(rotation_schedule
);
155 int main(int argc
, const char **argv
)
160 fail("Missing trace path");
164 plan_tests(TEST_COUNT
);
166 if (get_registered_triggers_count() != 0) {
167 fail("Session daemon already has registered triggers, bailing out");
171 ret
= setup_session_with_size_rotation_schedule(argv
[1]);
176 ok(get_registered_triggers_count() == 0,
177 "No triggers visible while session has an enabled size-based rotation schedule");
179 ret
= lttng_destroy_session(TEST_SESSION_NAME
);
181 fail("Failed to destroy session `%s`", TEST_SESSION_NAME
);
185 return exit_status();