2 * Copyright (C) 2021 Simon Marchi <simon.marchi@efficios.com>
4 * SPDX-License-Identifier: GPL-2.0-only
8 /* Utility to register some triggers, for test purposes. */
10 #include <common/filter/filter-ast.h>
11 #include <common/macros.h>
12 #include <lttng/lttng.h>
18 static void register_trigger(const char *trigger_name
,
19 struct lttng_condition
*condition
,
20 struct lttng_action
*action
)
22 struct lttng_trigger
*trigger
;
23 enum lttng_error_code ret
;
25 trigger
= lttng_trigger_create(condition
, action
);
26 ret
= lttng_register_trigger_with_name(trigger
, trigger_name
);
27 assert(ret
== LTTNG_OK
);
28 lttng_trigger_destroy(trigger
);
29 lttng_condition_destroy(condition
);
30 lttng_action_destroy(action
);
34 * Register a trigger with the given condition and an action list containing a
35 * single notify action.
37 static void register_trigger_action_list_notify(
38 const char *trigger_name
, struct lttng_condition
*condition
)
40 struct lttng_action
*action_notify
;
41 struct lttng_action
*action_list
;
42 enum lttng_action_status action_status
;
44 action_list
= lttng_action_list_create();
45 action_notify
= lttng_action_notify_create();
46 action_status
= lttng_action_list_add_action(
47 action_list
, action_notify
);
48 assert(action_status
== LTTNG_ACTION_STATUS_OK
);
49 lttng_action_destroy(action_notify
);
51 register_trigger(trigger_name
, condition
, action_list
);
54 static struct lttng_condition
*create_session_consumed_size_condition(
55 const char *session_name
, uint64_t threshold
)
57 struct lttng_condition
*condition
;
58 enum lttng_condition_status condition_status
;
60 condition
= lttng_condition_session_consumed_size_create();
62 lttng_condition_session_consumed_size_set_session_name(
63 condition
, session_name
);
64 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
65 condition_status
= lttng_condition_session_consumed_size_set_threshold(
66 condition
, threshold
);
67 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
72 static void test_session_consumed_size_condition(void)
74 register_trigger_action_list_notify(
75 "trigger-with-session-consumed-size-condition",
76 create_session_consumed_size_condition(
77 "the-session-name", 1234));
80 static void fill_buffer_usage_condition(struct lttng_condition
*condition
,
81 const char *session_name
,
82 const char *channel_name
,
83 enum lttng_domain_type domain_type
)
85 enum lttng_condition_status condition_status
;
87 condition_status
= lttng_condition_buffer_usage_set_session_name(
88 condition
, session_name
);
89 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
90 condition_status
= lttng_condition_buffer_usage_set_channel_name(
91 condition
, channel_name
);
92 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
93 condition_status
= lttng_condition_buffer_usage_set_domain_type(
94 condition
, domain_type
);
95 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
98 static void fill_buffer_usage_bytes_condition(struct lttng_condition
*condition
,
99 const char *session_name
,
100 const char *channel_name
,
101 enum lttng_domain_type domain_type
,
104 enum lttng_condition_status condition_status
;
106 fill_buffer_usage_condition(
107 condition
, session_name
, channel_name
, domain_type
);
108 condition_status
= lttng_condition_buffer_usage_set_threshold(
109 condition
, threshold
);
110 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
113 static void fill_buffer_usage_ratio_condition(struct lttng_condition
*condition
,
114 const char *session_name
,
115 const char *channel_name
,
116 enum lttng_domain_type domain_type
,
119 enum lttng_condition_status condition_status
;
121 fill_buffer_usage_condition(
122 condition
, session_name
, channel_name
, domain_type
);
123 condition_status
= lttng_condition_buffer_usage_set_threshold_ratio(
125 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
128 static struct lttng_condition
*create_buffer_usage_high_bytes_condition(
129 const char *session_name
,
130 const char *channel_name
,
131 enum lttng_domain_type domain_type
,
134 struct lttng_condition
*condition
;
136 condition
= lttng_condition_buffer_usage_high_create();
137 fill_buffer_usage_bytes_condition(condition
, session_name
, channel_name
,
138 domain_type
, threshold
);
143 static struct lttng_condition
*create_buffer_usage_low_bytes_condition(
144 const char *session_name
,
145 const char *channel_name
,
146 enum lttng_domain_type domain_type
,
149 struct lttng_condition
*condition
;
151 condition
= lttng_condition_buffer_usage_low_create();
152 fill_buffer_usage_bytes_condition(condition
, session_name
, channel_name
,
153 domain_type
, threshold
);
158 static struct lttng_condition
*create_buffer_usage_high_ratio_condition(
159 const char *session_name
,
160 const char *channel_name
,
161 enum lttng_domain_type domain_type
,
164 struct lttng_condition
*condition
;
166 condition
= lttng_condition_buffer_usage_high_create();
167 fill_buffer_usage_ratio_condition(condition
, session_name
, channel_name
,
173 static struct lttng_condition
*create_buffer_usage_low_ratio_condition(
174 const char *session_name
,
175 const char *channel_name
,
176 enum lttng_domain_type domain_type
,
179 struct lttng_condition
*condition
;
181 condition
= lttng_condition_buffer_usage_low_create();
182 fill_buffer_usage_ratio_condition(condition
, session_name
, channel_name
,
188 static void test_buffer_usage_conditions(void)
190 register_trigger_action_list_notify(
191 "trigger-with-buffer-usage-high-bytes-condition",
192 create_buffer_usage_high_bytes_condition(
193 "the-session-name", "the-channel-name",
194 LTTNG_DOMAIN_UST
, 1234));
196 register_trigger_action_list_notify(
197 "trigger-with-buffer-usage-low-bytes-condition",
198 create_buffer_usage_low_bytes_condition(
199 "the-session-name", "the-channel-name",
200 LTTNG_DOMAIN_UST
, 2345));
202 register_trigger_action_list_notify(
203 "trigger-with-buffer-usage-high-ratio-condition",
204 create_buffer_usage_high_ratio_condition(
205 "the-session-name", "the-channel-name",
206 LTTNG_DOMAIN_UST
, 0.25));
208 register_trigger_action_list_notify(
209 "trigger-with-buffer-usage-low-ratio-condition",
210 create_buffer_usage_low_ratio_condition(
211 "the-session-name", "the-channel-name",
212 LTTNG_DOMAIN_UST
, 0.4));
215 static void fill_session_rotation_condition(
216 struct lttng_condition
*condition
, const char *session_name
)
218 enum lttng_condition_status condition_status
;
220 condition_status
= lttng_condition_session_rotation_set_session_name(
221 condition
, session_name
);
222 assert(condition_status
== LTTNG_CONDITION_STATUS_OK
);
225 static struct lttng_condition
*create_session_rotation_ongoing_condition(
226 const char *session_name
)
228 struct lttng_condition
*condition
;
230 condition
= lttng_condition_session_rotation_ongoing_create();
232 fill_session_rotation_condition(condition
, session_name
);
237 static struct lttng_condition
*create_session_rotation_completed_condition(
238 const char *session_name
)
240 struct lttng_condition
*condition
;
242 condition
= lttng_condition_session_rotation_completed_create();
244 fill_session_rotation_condition(condition
, session_name
);
249 static void test_session_rotation_conditions(void)
251 register_trigger_action_list_notify(
252 "trigger-with-session-rotation-ongoing-condition",
253 create_session_rotation_ongoing_condition(
254 "the-session-name"));
256 register_trigger_action_list_notify(
257 "trigger-with-session-rotation-completed-condition",
258 create_session_rotation_completed_condition(
259 "the-session-name"));
264 void (*callback
)(void);
267 "test_session_consumed_size_condition",
268 test_session_consumed_size_condition
,
270 {"test_buffer_usage_conditions", test_buffer_usage_conditions
},
271 {"test_session_rotation_conditions",
272 test_session_rotation_conditions
},
275 static void show_known_tests(void)
279 for (i
= 0; i
< ARRAY_SIZE(tests
); i
++) {
280 fprintf(stderr
, " - %s\n", tests
[i
].name
);
284 int main(int argc
, char **argv
)
291 fprintf(stderr
, "Usage: %s <test>\n", argv
[0]);
292 fprintf(stderr
, "\n");
293 fprintf(stderr
, "Test must be one of:\n");
300 for (i
= 0; i
< ARRAY_SIZE(tests
); i
++) {
301 if (strcmp(tests
[i
].name
, test
) == 0) {
306 if (i
== ARRAY_SIZE(tests
)) {
307 fprintf(stderr
, "Unrecognized test `%s`\n", test
);
308 fprintf(stderr
, "\n");
309 fprintf(stderr
, "Known tests:\n");