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
,
72 lttng_channel channel_cfg
{};
73 strcpy(channel_cfg
.name
, TEST_CHANNEL_NAME
);
74 channel_cfg
.enabled
= 1;
75 channel_cfg
.attr
.overwrite
= -1;
76 channel_cfg
.attr
.subbuf_size
= (uint64_t) sysconf(_SC_PAGE_SIZE
) * 8;
77 channel_cfg
.attr
.num_subbuf
= 8;
78 channel_cfg
.attr
.output
= LTTNG_EVENT_MMAP
;
80 enum lttng_rotation_status rotation_status
;
81 struct lttng_rotation_schedule
*rotation_schedule
= NULL
;
83 session_desriptor
= lttng_session_descriptor_local_create(
84 TEST_SESSION_NAME
, session_output_path
);
85 if (!session_desriptor
) {
86 fail("Failed to create session descriptor for session `%s`",
92 ret_code
= lttng_create_session_ext(session_desriptor
);
93 if (ret_code
!= LTTNG_OK
) {
94 fail("Failed to create session `%s`: %s", TEST_SESSION_NAME
,
95 lttng_strerror(-ret_code
));
100 ret
= lttng_enable_channel(&ust_channel_handle
, &channel_cfg
);
102 fail("Failed to enable channel `%s`: %s", TEST_CHANNEL_NAME
,
103 lttng_strerror(ret
));
108 ret
= lttng_start_tracing(TEST_SESSION_NAME
);
110 fail("Failed to start session `%s`: %s", TEST_SESSION_NAME
,
111 lttng_strerror(ret
));
116 rotation_schedule
= lttng_rotation_schedule_size_threshold_create();
117 if (!rotation_schedule
) {
118 fail("Failed to create rotation schedule descriptor");
124 * The rotation schedule size threshold doesn't matter; no event rules
125 * were specified so the session consumed size should not grow over
128 rotation_status
= lttng_rotation_schedule_size_threshold_set_threshold(
129 rotation_schedule
, sysconf(_SC_PAGE_SIZE
) * 4096);
130 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
131 fail("Failed to set size threshold of session rotation schedule");
136 rotation_status
= lttng_session_add_rotation_schedule(
137 TEST_SESSION_NAME
, rotation_schedule
);
138 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
139 fail("Failed to set size-based rotation schedule on session `%s`",
147 lttng_session_descriptor_destroy(session_desriptor
);
148 lttng_rotation_schedule_destroy(rotation_schedule
);
152 int main(int argc
, const char **argv
)
157 fail("Missing trace path");
161 plan_tests(TEST_COUNT
);
163 if (get_registered_triggers_count() != 0) {
164 fail("Session daemon already has registered triggers, bailing out");
168 ret
= setup_session_with_size_rotation_schedule(argv
[1]);
173 ok(get_registered_triggers_count() == 0,
174 "No triggers visible while session has an enabled size-based rotation schedule");
176 ret
= lttng_destroy_session(TEST_SESSION_NAME
);
178 fail("Failed to destroy session `%s`", TEST_SESSION_NAME
);
182 return exit_status();