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
21 #include <common/macros.h>
22 #include <lttng/lttng.h>
26 #define TEST_SESSION_NAME "test_session"
27 #define TEST_CHANNEL_NAME "test_channel"
30 int get_registered_triggers_count(void)
33 enum lttng_error_code ret_code
;
34 enum lttng_trigger_status trigger_status
;
35 struct lttng_triggers
*triggers
= NULL
;
36 unsigned int trigger_count
;
38 ret_code
= lttng_list_triggers(&triggers
);
39 if (ret_code
!= LTTNG_OK
) {
40 fail("Failed to list triggers");
45 trigger_status
= lttng_triggers_get_count(triggers
, &trigger_count
);
46 if (trigger_status
!= LTTNG_TRIGGER_STATUS_OK
) {
47 fail("Failed to get count of triggers returned by listing");
52 ret
= (int) trigger_count
;
55 lttng_triggers_destroy(triggers
);
60 int setup_session_with_size_rotation_schedule(const char *session_output_path
)
63 struct lttng_session_descriptor
*session_desriptor
= NULL
;
64 enum lttng_error_code ret_code
;
65 struct lttng_handle ust_channel_handle
= {
66 .session_name
= TEST_SESSION_NAME
,
67 .domain
.type
= LTTNG_DOMAIN_UST
,
68 .domain
.buf_type
= LTTNG_BUFFER_PER_UID
,
70 struct lttng_channel channel_cfg
= {
71 .name
= TEST_CHANNEL_NAME
,
74 .attr
.subbuf_size
= sysconf(_SC_PAGESIZE
) * 8,
76 .attr
.output
= LTTNG_EVENT_MMAP
,
78 enum lttng_rotation_status rotation_status
;
79 struct lttng_rotation_schedule
*rotation_schedule
= NULL
;
81 session_desriptor
= lttng_session_descriptor_local_create(
82 TEST_SESSION_NAME
, session_output_path
);
83 if (!session_desriptor
) {
84 fail("Failed to create session descriptor for session `%s`",
90 ret_code
= lttng_create_session_ext(session_desriptor
);
91 if (ret_code
!= LTTNG_OK
) {
92 fail("Failed to create session `%s`: %s", TEST_SESSION_NAME
,
93 lttng_strerror(-ret_code
));
98 ret
= lttng_enable_channel(&ust_channel_handle
, &channel_cfg
);
100 fail("Failed to enable channel `%s`: %s", TEST_CHANNEL_NAME
,
101 lttng_strerror(ret
));
106 ret
= lttng_start_tracing(TEST_SESSION_NAME
);
108 fail("Failed to start session `%s`: %s", TEST_SESSION_NAME
,
109 lttng_strerror(ret
));
114 rotation_schedule
= lttng_rotation_schedule_size_threshold_create();
115 if (!rotation_schedule
) {
116 fail("Failed to create rotation schedule descriptor");
122 * The rotation schedule size threshold doesn't matter; no event rules
123 * were specified so the session consumed size should not grow over
126 rotation_status
= lttng_rotation_schedule_size_threshold_set_threshold(
127 rotation_schedule
, sysconf(_SC_PAGESIZE
) * 4096);
128 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
129 fail("Failed to set size threshold of session rotation schedule");
134 rotation_status
= lttng_session_add_rotation_schedule(
135 TEST_SESSION_NAME
, rotation_schedule
);
136 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
137 fail("Failed to set size-based rotation schedule on session `%s`",
145 lttng_session_descriptor_destroy(session_desriptor
);
146 lttng_rotation_schedule_destroy(rotation_schedule
);
150 int main(int argc
, const char **argv
)
155 fail("Missing trace path");
159 plan_tests(TEST_COUNT
);
161 if (get_registered_triggers_count() != 0) {
162 fail("Session daemon already has registered triggers, bailing out");
166 ret
= setup_session_with_size_rotation_schedule(argv
[1]);
171 ok(get_registered_triggers_count() == 0,
172 "No triggers visible while session has an enabled size-based rotation schedule");
174 ret
= lttng_destroy_session(TEST_SESSION_NAME
);
176 fail("Failed to destroy session `%s`", TEST_SESSION_NAME
);
180 return exit_status();