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>
17 static void register_trigger(const char *trigger_name
,
18 struct lttng_condition
*condition
,
19 struct lttng_action
*action
)
21 struct lttng_trigger
*trigger
;
22 enum lttng_error_code ret
;
24 trigger
= lttng_trigger_create(condition
, action
);
25 ret
= lttng_register_trigger_with_name(trigger
, trigger_name
);
26 LTTNG_ASSERT(ret
== LTTNG_OK
);
30 * Register a trigger with the given condition and an action list containing a
31 * single notify action.
33 static void register_trigger_action_list_notify(
34 const char *trigger_name
, struct lttng_condition
*condition
)
36 struct lttng_action
*action_notify
;
37 struct lttng_action
*action_list
;
38 enum lttng_action_status action_status
;
40 action_list
= lttng_action_list_create();
41 action_notify
= lttng_action_notify_create();
42 action_status
= lttng_action_list_add_action(
43 action_list
, action_notify
);
44 LTTNG_ASSERT(action_status
== LTTNG_ACTION_STATUS_OK
);
46 register_trigger(trigger_name
, condition
, action_list
);
49 static struct lttng_condition
*create_session_consumed_size_condition(
50 const char *session_name
, uint64_t threshold
)
52 struct lttng_condition
*condition
;
53 enum lttng_condition_status condition_status
;
55 condition
= lttng_condition_session_consumed_size_create();
57 lttng_condition_session_consumed_size_set_session_name(
58 condition
, session_name
);
59 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
60 condition_status
= lttng_condition_session_consumed_size_set_threshold(
61 condition
, threshold
);
62 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
67 static void test_session_consumed_size_condition(void)
69 register_trigger_action_list_notify(
70 "trigger-with-session-consumed-size-condition",
71 create_session_consumed_size_condition(
72 "the-session-name", 1234));
75 static void fill_buffer_usage_condition(struct lttng_condition
*condition
,
76 const char *session_name
,
77 const char *channel_name
,
78 enum lttng_domain_type domain_type
)
80 enum lttng_condition_status condition_status
;
82 condition_status
= lttng_condition_buffer_usage_set_session_name(
83 condition
, session_name
);
84 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
85 condition_status
= lttng_condition_buffer_usage_set_channel_name(
86 condition
, channel_name
);
87 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
88 condition_status
= lttng_condition_buffer_usage_set_domain_type(
89 condition
, domain_type
);
90 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
93 static void fill_buffer_usage_bytes_condition(struct lttng_condition
*condition
,
94 const char *session_name
,
95 const char *channel_name
,
96 enum lttng_domain_type domain_type
,
99 enum lttng_condition_status condition_status
;
101 fill_buffer_usage_condition(
102 condition
, session_name
, channel_name
, domain_type
);
103 condition_status
= lttng_condition_buffer_usage_set_threshold(
104 condition
, threshold
);
105 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
108 static void fill_buffer_usage_ratio_condition(struct lttng_condition
*condition
,
109 const char *session_name
,
110 const char *channel_name
,
111 enum lttng_domain_type domain_type
,
114 enum lttng_condition_status condition_status
;
116 fill_buffer_usage_condition(
117 condition
, session_name
, channel_name
, domain_type
);
118 condition_status
= lttng_condition_buffer_usage_set_threshold_ratio(
120 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
123 static struct lttng_condition
*create_buffer_usage_high_bytes_condition(
124 const char *session_name
,
125 const char *channel_name
,
126 enum lttng_domain_type domain_type
,
129 struct lttng_condition
*condition
;
131 condition
= lttng_condition_buffer_usage_high_create();
132 fill_buffer_usage_bytes_condition(condition
, session_name
, channel_name
,
133 domain_type
, threshold
);
138 static struct lttng_condition
*create_buffer_usage_low_bytes_condition(
139 const char *session_name
,
140 const char *channel_name
,
141 enum lttng_domain_type domain_type
,
144 struct lttng_condition
*condition
;
146 condition
= lttng_condition_buffer_usage_low_create();
147 fill_buffer_usage_bytes_condition(condition
, session_name
, channel_name
,
148 domain_type
, threshold
);
153 static struct lttng_condition
*create_buffer_usage_high_ratio_condition(
154 const char *session_name
,
155 const char *channel_name
,
156 enum lttng_domain_type domain_type
,
159 struct lttng_condition
*condition
;
161 condition
= lttng_condition_buffer_usage_high_create();
162 fill_buffer_usage_ratio_condition(condition
, session_name
, channel_name
,
168 static struct lttng_condition
*create_buffer_usage_low_ratio_condition(
169 const char *session_name
,
170 const char *channel_name
,
171 enum lttng_domain_type domain_type
,
174 struct lttng_condition
*condition
;
176 condition
= lttng_condition_buffer_usage_low_create();
177 fill_buffer_usage_ratio_condition(condition
, session_name
, channel_name
,
183 static void test_buffer_usage_conditions(void)
185 register_trigger_action_list_notify(
186 "trigger-with-buffer-usage-high-bytes-condition",
187 create_buffer_usage_high_bytes_condition(
188 "the-session-name", "the-channel-name",
189 LTTNG_DOMAIN_UST
, 1234));
191 register_trigger_action_list_notify(
192 "trigger-with-buffer-usage-low-bytes-condition",
193 create_buffer_usage_low_bytes_condition(
194 "the-session-name", "the-channel-name",
195 LTTNG_DOMAIN_UST
, 2345));
197 register_trigger_action_list_notify(
198 "trigger-with-buffer-usage-high-ratio-condition",
199 create_buffer_usage_high_ratio_condition(
200 "the-session-name", "the-channel-name",
201 LTTNG_DOMAIN_UST
, 0.25));
203 register_trigger_action_list_notify(
204 "trigger-with-buffer-usage-low-ratio-condition",
205 create_buffer_usage_low_ratio_condition(
206 "the-session-name", "the-channel-name",
207 LTTNG_DOMAIN_UST
, 0.4));
210 static void fill_session_rotation_condition(
211 struct lttng_condition
*condition
, const char *session_name
)
213 enum lttng_condition_status condition_status
;
215 condition_status
= lttng_condition_session_rotation_set_session_name(
216 condition
, session_name
);
217 LTTNG_ASSERT(condition_status
== LTTNG_CONDITION_STATUS_OK
);
220 static struct lttng_condition
*create_session_rotation_ongoing_condition(
221 const char *session_name
)
223 struct lttng_condition
*condition
;
225 condition
= lttng_condition_session_rotation_ongoing_create();
227 fill_session_rotation_condition(condition
, session_name
);
232 static struct lttng_condition
*create_session_rotation_completed_condition(
233 const char *session_name
)
235 struct lttng_condition
*condition
;
237 condition
= lttng_condition_session_rotation_completed_create();
239 fill_session_rotation_condition(condition
, session_name
);
244 static void test_session_rotation_conditions(void)
246 register_trigger_action_list_notify(
247 "trigger-with-session-rotation-ongoing-condition",
248 create_session_rotation_ongoing_condition(
249 "the-session-name"));
251 register_trigger_action_list_notify(
252 "trigger-with-session-rotation-completed-condition",
253 create_session_rotation_completed_condition(
254 "the-session-name"));
259 void (*callback
)(void);
262 "test_session_consumed_size_condition",
263 test_session_consumed_size_condition
,
265 {"test_buffer_usage_conditions", test_buffer_usage_conditions
},
266 {"test_session_rotation_conditions",
267 test_session_rotation_conditions
},
270 static void show_known_tests(void)
274 for (i
= 0; i
< ARRAY_SIZE(tests
); i
++) {
275 fprintf(stderr
, " - %s\n", tests
[i
].name
);
279 int main(int argc
, char **argv
)
286 fprintf(stderr
, "Usage: %s <test>\n", argv
[0]);
287 fprintf(stderr
, "\n");
288 fprintf(stderr
, "Test must be one of:\n");
295 for (i
= 0; i
< ARRAY_SIZE(tests
); i
++) {
296 if (strcmp(tests
[i
].name
, test
) == 0) {
301 if (i
== ARRAY_SIZE(tests
)) {
302 fprintf(stderr
, "Unrecognized test `%s`\n", test
);
303 fprintf(stderr
, "\n");
304 fprintf(stderr
, "Known tests:\n");