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
12 #include <common/macros.hpp>
14 #include <lttng/lttng.h>
25 #define TEST_SESSION_NAME "test_session"
26 #define TEST_CHANNEL_NAME "test_channel"
28 static int get_registered_triggers_count()
31 enum lttng_error_code ret_code
;
32 enum lttng_trigger_status trigger_status
;
33 struct lttng_triggers
*triggers
= nullptr;
34 unsigned int trigger_count
;
36 ret_code
= lttng_list_triggers(&triggers
);
37 if (ret_code
!= LTTNG_OK
) {
38 fail("Failed to list triggers");
43 trigger_status
= lttng_triggers_get_count(triggers
, &trigger_count
);
44 if (trigger_status
!= LTTNG_TRIGGER_STATUS_OK
) {
45 fail("Failed to get count of triggers returned by listing");
50 ret
= (int) trigger_count
;
53 lttng_triggers_destroy(triggers
);
57 static int setup_session_with_size_rotation_schedule(const char *session_output_path
)
60 struct lttng_session_descriptor
*session_desriptor
= nullptr;
61 enum lttng_error_code ret_code
;
62 struct lttng_handle ust_channel_handle
= { TEST_SESSION_NAME
,
64 .type
= LTTNG_DOMAIN_UST
,
65 .buf_type
= LTTNG_BUFFER_PER_UID
,
71 lttng_channel channel_cfg
{};
72 strcpy(channel_cfg
.name
, TEST_CHANNEL_NAME
);
73 channel_cfg
.enabled
= 1;
74 channel_cfg
.attr
.overwrite
= -1;
75 channel_cfg
.attr
.subbuf_size
= (uint64_t) sysconf(_SC_PAGE_SIZE
) * 8;
76 channel_cfg
.attr
.num_subbuf
= 8;
77 channel_cfg
.attr
.output
= LTTNG_EVENT_MMAP
;
79 enum lttng_rotation_status rotation_status
;
80 struct lttng_rotation_schedule
*rotation_schedule
= nullptr;
83 lttng_session_descriptor_local_create(TEST_SESSION_NAME
, session_output_path
);
84 if (!session_desriptor
) {
85 fail("Failed to create session descriptor for session `%s`", TEST_SESSION_NAME
);
90 ret_code
= lttng_create_session_ext(session_desriptor
);
91 if (ret_code
!= LTTNG_OK
) {
92 fail("Failed to create session `%s`: %s",
94 lttng_strerror(-ret_code
));
99 ret
= lttng_enable_channel(&ust_channel_handle
, &channel_cfg
);
101 fail("Failed to enable channel `%s`: %s", TEST_CHANNEL_NAME
, lttng_strerror(ret
));
106 ret
= lttng_start_tracing(TEST_SESSION_NAME
);
108 fail("Failed to start session `%s`: %s", TEST_SESSION_NAME
, 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_PAGE_SIZE
) * 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(TEST_SESSION_NAME
, rotation_schedule
);
134 if (rotation_status
!= LTTNG_ROTATION_STATUS_OK
) {
135 fail("Failed to set size-based rotation schedule on session `%s`",
143 lttng_session_descriptor_destroy(session_desriptor
);
144 lttng_rotation_schedule_destroy(rotation_schedule
);
148 int main(int argc
, const char **argv
)
153 fail("Missing trace path");
157 plan_tests(TEST_COUNT
);
159 if (get_registered_triggers_count() != 0) {
160 fail("Session daemon already has registered triggers, bailing out");
164 ret
= setup_session_with_size_rotation_schedule(argv
[1]);
169 ok(get_registered_triggers_count() == 0,
170 "No triggers visible while session has an enabled size-based rotation schedule");
172 ret
= lttng_destroy_session(TEST_SESSION_NAME
);
174 fail("Failed to destroy session `%s`", TEST_SESSION_NAME
);
178 return exit_status();