Introduce lttng_event_rule_kernel_tracepoint
[lttng-tools.git] / tests / unit / test_event_rule.c
CommitLineData
dbc20d3c
JR
1/*
2 * Unit tests for the notification API.
3 *
4 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only
7 *
8 */
9
10#include <assert.h>
11#include <inttypes.h>
12#include <stdio.h>
13#include <string.h>
14#include <unistd.h>
15
16#include <tap/tap.h>
17
18#include <common/payload-view.h>
19#include <common/payload.h>
20#include <lttng/domain.h>
85522de5
JR
21#include <lttng/event-rule/kernel-kprobe-internal.h>
22#include <lttng/event-rule/kernel-kprobe.h>
4f7da553
JR
23#include <lttng/event-rule/kernel-syscall-internal.h>
24#include <lttng/event-rule/kernel-syscall.h>
dbc20d3c
JR
25#include <lttng/event-rule/tracepoint-internal.h>
26#include <lttng/event-rule/tracepoint.h>
af0818ef
JR
27#include <lttng/event-rule/kernel-tracepoint-internal.h>
28#include <lttng/event-rule/kernel-tracepoint.h>
46fd07ac
JR
29#include <lttng/event-rule/kernel-uprobe-internal.h>
30#include <lttng/event-rule/kernel-uprobe.h>
dbc20d3c
JR
31#include <lttng/event.h>
32#include <lttng/kernel-probe-internal.h>
33#include <lttng/kernel-probe.h>
34#include <lttng/userspace-probe-internal.h>
35#include <lttng/userspace-probe.h>
2b4c142d 36#include "bin/lttng/loglevel.h"
dbc20d3c
JR
37
38/* For error.h. */
39int lttng_opt_quiet = 1;
40int lttng_opt_verbose;
41int lttng_opt_mi;
42
af0818ef 43#define NUM_TESTS 254
dbc20d3c
JR
44
45struct tracepoint_test {
46 enum lttng_domain_type type;
975d26c5 47 bool support_name_pattern_exclusion;
dbc20d3c
JR
48};
49
2b4c142d
JG
50typedef const char *(*log_level_name_getter)(int log_level);
51
dbc20d3c
JR
52static
53void test_event_rule_tracepoint_by_domain(const struct tracepoint_test *test)
54{
dbc20d3c
JR
55 unsigned int count;
56 struct lttng_event_rule *tracepoint = NULL;
57 struct lttng_event_rule *tracepoint_from_buffer = NULL;
58 enum lttng_event_rule_status status;
59 enum lttng_domain_type domain_type, type;
dbc20d3c
JR
60 const char *pattern="my_event_*";
61 const char *filter="msg_id == 23 && size >= 2048";
62 const char *tmp;
975d26c5 63 const char *name_pattern_exclusions[] = {"my_event_test1", "my_event_test2" ,"my_event_test3"};
85b05318
JR
64 struct lttng_log_level_rule *log_level_rule = NULL;
65 const struct lttng_log_level_rule *log_level_rule_return = NULL;
dbc20d3c
JR
66 struct lttng_payload payload;
67
68 type = test->type;
69 diag("Testing domain %d.", type);
70
71 lttng_payload_init(&payload);
72
85b05318
JR
73 log_level_rule = lttng_log_level_rule_exactly_create(LTTNG_LOGLEVEL_INFO);
74 assert(log_level_rule);
75
dbc20d3c
JR
76 tracepoint = lttng_event_rule_tracepoint_create(type);
77 ok(tracepoint, "tracepoint object.");
78
79 status = lttng_event_rule_tracepoint_get_domain_type(tracepoint, &domain_type);
80 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "get tracepoint domain.");
81 ok(domain_type == type, "domain type got %d expected %d.", domain_type, type);
82
8bc73626 83 status = lttng_event_rule_tracepoint_set_name_pattern(tracepoint, pattern);
dbc20d3c 84 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern.");
8bc73626 85 status = lttng_event_rule_tracepoint_get_name_pattern(tracepoint, &tmp);
dbc20d3c
JR
86 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern.");
87 ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal.");
88
89 status = lttng_event_rule_tracepoint_set_filter(tracepoint, filter);
90 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter.");
91 status = lttng_event_rule_tracepoint_get_filter(tracepoint, &tmp);
92 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter.");
93 ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal.");
94
85b05318
JR
95 status = lttng_event_rule_tracepoint_get_log_level_rule(tracepoint, &log_level_rule_return);
96 ok(status == LTTNG_EVENT_RULE_STATUS_UNSET, "get unset log level rule.");
97
2b4c142d
JG
98 if (type != LTTNG_DOMAIN_KERNEL) {
99 status = lttng_event_rule_tracepoint_set_log_level_rule(tracepoint, log_level_rule);
100 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting log level rule.");
101 status = lttng_event_rule_tracepoint_get_log_level_rule(tracepoint, &log_level_rule_return);
102 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "get log level rule.");
103 }
dbc20d3c 104
975d26c5 105 if (test->support_name_pattern_exclusion) {
dbc20d3c
JR
106 int i;
107
108 for (i = 0; i < 3; i++) {
975d26c5
JR
109 status = lttng_event_rule_tracepoint_add_name_pattern_exclusion(tracepoint, name_pattern_exclusions[i]);
110 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting name pattern exclusions \"%s\"", name_pattern_exclusions[i]);
dbc20d3c
JR
111 }
112
975d26c5
JR
113 status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(tracepoint, &count);
114 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion count.");
dbc20d3c
JR
115 ok(count == 3, "count is %d/3", count);
116
117 for (i = 0; i < count; i++) {
975d26c5
JR
118 status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(tracepoint, i, &tmp);
119 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion at index %d.", i);
120 ok(!strncmp(name_pattern_exclusions[i], tmp, strlen(name_pattern_exclusions[i])), "%s == %s.", tmp, name_pattern_exclusions[i]);
dbc20d3c
JR
121 }
122 } else {
123 int i;
124
125 for (i = 0; i < 3; i++) {
975d26c5
JR
126 status = lttng_event_rule_tracepoint_add_name_pattern_exclusion(tracepoint, name_pattern_exclusions[i]);
127 ok(status == LTTNG_EVENT_RULE_STATUS_UNSUPPORTED, "setting name pattern exclusions unsupported \"%s\".", name_pattern_exclusions[i]);
dbc20d3c
JR
128 }
129
975d26c5
JR
130 status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(tracepoint, &count);
131 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion count.");
dbc20d3c
JR
132 ok(count == 0, "count is %d/0", count);
133 }
134
135 ok(lttng_event_rule_serialize(tracepoint, &payload) == 0, "Serializing.");
136
137 {
138 struct lttng_payload_view view =
139 lttng_payload_view_from_payload(
140 &payload, 0, -1);
141
142 ok(lttng_event_rule_create_from_payload(
143 &view, &tracepoint_from_buffer) > 0,
144 "Deserializing.");
145 }
146
147 ok(lttng_event_rule_is_equal(tracepoint, tracepoint_from_buffer), "serialized and from buffer are equal.");
148
149 lttng_payload_reset(&payload);
150 lttng_event_rule_destroy(tracepoint);
151 lttng_event_rule_destroy(tracepoint_from_buffer);
85b05318 152 lttng_log_level_rule_destroy(log_level_rule);
dbc20d3c
JR
153}
154
155static
156void test_event_rule_tracepoint(void)
157{
158 int i;
159 struct lttng_event_rule *tracepoint = NULL;
160 struct tracepoint_test tests[] = {{LTTNG_DOMAIN_JUL, false},
161 {LTTNG_DOMAIN_KERNEL, false},
162 {LTTNG_DOMAIN_LOG4J, false},
163 {LTTNG_DOMAIN_PYTHON, false},
164 {LTTNG_DOMAIN_UST, true}};
165
166 diag("Testing lttng_event_rule_tracepoint.");
167 tracepoint = lttng_event_rule_tracepoint_create(LTTNG_DOMAIN_NONE);
168 ok(!tracepoint, "Domain type restriction on create.");
169
170 for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
171 test_event_rule_tracepoint_by_domain(&tests[i]);
172 }
173}
174
af0818ef
JR
175static
176void test_event_rule_kernel_tracepoint(void)
177{
178 struct lttng_event_rule *tracepoint = NULL;
179 struct lttng_event_rule *tracepoint_from_buffer = NULL;
180 enum lttng_event_rule_status status;
181 const char *pattern="my_event_*";
182 const char *filter="msg_id == 23 && size >= 2048";
183 const char *tmp;
184 struct lttng_payload payload;
185
186 diag("Testing lttng_event_rule_kernel_tracepoint.");
187
188 lttng_payload_init(&payload);
189
190 tracepoint = lttng_event_rule_kernel_tracepoint_create();
191 ok(tracepoint, "tracepoint object.");
192
193 status = lttng_event_rule_kernel_tracepoint_set_name_pattern(tracepoint, pattern);
194 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern.");
195 status = lttng_event_rule_kernel_tracepoint_get_name_pattern(tracepoint, &tmp);
196 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern.");
197 ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal.");
198
199 status = lttng_event_rule_kernel_tracepoint_set_filter(tracepoint, filter);
200 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter.");
201 status = lttng_event_rule_kernel_tracepoint_get_filter(tracepoint, &tmp);
202 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter.");
203 ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal.");
204
205 ok(lttng_event_rule_serialize(tracepoint, &payload) == 0, "Serializing.");
206
207 {
208 struct lttng_payload_view view =
209 lttng_payload_view_from_payload(
210 &payload, 0, -1);
211
212 ok(lttng_event_rule_create_from_payload(
213 &view, &tracepoint_from_buffer) > 0,
214 "Deserializing.");
215 }
216
217 ok(lttng_event_rule_is_equal(tracepoint, tracepoint_from_buffer), "serialized and from buffer are equal.");
218
219 lttng_payload_reset(&payload);
220 lttng_event_rule_destroy(tracepoint);
221 lttng_event_rule_destroy(tracepoint_from_buffer);
222}
223
dbc20d3c
JR
224static void test_event_rule_syscall(void)
225{
226 struct lttng_event_rule *syscall = NULL;
227 struct lttng_event_rule *syscall_from_buffer = NULL;
228 enum lttng_event_rule_status status;
229 const char *pattern = "my_event_*";
230 const char *filter = "msg_id == 23 && size >= 2048";
231 const char *tmp;
232 struct lttng_payload payload;
233
234 diag("Event rule syscall.");
235
236 lttng_payload_init(&payload);
237
4f7da553 238 syscall = lttng_event_rule_kernel_syscall_create(LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY);
dbc20d3c
JR
239 ok(syscall, "syscall object.");
240
4f7da553 241 status = lttng_event_rule_kernel_syscall_set_name_pattern(syscall, pattern);
dbc20d3c 242 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern.");
4f7da553 243 status = lttng_event_rule_kernel_syscall_get_name_pattern(syscall, &tmp);
dbc20d3c
JR
244 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern.");
245 ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal.");
246
4f7da553 247 status = lttng_event_rule_kernel_syscall_set_filter(syscall, filter);
dbc20d3c 248 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter.");
4f7da553 249 status = lttng_event_rule_kernel_syscall_get_filter(syscall, &tmp);
dbc20d3c
JR
250 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter.");
251 ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal.");
252
253 ok(lttng_event_rule_serialize(syscall, &payload) == 0, "Serializing.");
254
255 {
256 struct lttng_payload_view view =
257 lttng_payload_view_from_payload(
258 &payload, 0, -1);
259
260 ok(lttng_event_rule_create_from_payload(
261 &view, &syscall_from_buffer) > 0,
262 "Deserializing.");
263 }
264
265 ok(lttng_event_rule_is_equal(syscall, syscall_from_buffer),
266 "serialized and from buffer are equal.");
267
268 lttng_payload_reset(&payload);
269 lttng_event_rule_destroy(syscall);
270 lttng_event_rule_destroy(syscall_from_buffer);
271}
272
1f1567a5 273static void test_event_rule_userspace_probe(void)
dbc20d3c
JR
274{
275 struct lttng_event_rule *uprobe = NULL;
276 struct lttng_event_rule *uprobe_from_buffer = NULL;
277 struct lttng_userspace_probe_location_lookup_method *lookup_method =
278 NULL;
279 struct lttng_userspace_probe_location *probe_location = NULL;
280 const struct lttng_userspace_probe_location *probe_location_tmp = NULL;
281 enum lttng_event_rule_status status;
282
283 const char *probe_name = "my_probe.";
284 const char *tmp;
285 struct lttng_payload payload;
286
287 diag("Event rule uprobe.");
288
289 lookup_method = lttng_userspace_probe_location_lookup_method_function_elf_create();
290 if (!lookup_method) {
291 fail("Setup error on userspace probe lookup method creation.");
292 goto end;
293 }
294
295 probe_location = lttng_userspace_probe_location_function_create(
296 "/proc/self/exe",
297 "lttng_userspace_probe_location_tracepoint_create",
298 lookup_method);
299 if (!probe_location) {
300 fail("Setup error on userspace probe location creation.");
301 goto end;
302 }
303
304 /* Ownership transferred to the probe location function object. */
305 lookup_method = NULL;
306
307 lttng_payload_init(&payload);
308
46fd07ac 309 uprobe = lttng_event_rule_kernel_uprobe_create(probe_location);
dbc20d3c
JR
310 ok(uprobe, "uprobe event rule object creation.");
311
46fd07ac 312 status = lttng_event_rule_kernel_uprobe_get_location(
dbc20d3c
JR
313 uprobe, &probe_location_tmp);
314 ok(status == LTTNG_EVENT_RULE_STATUS_OK,
315 "Getting uprobe event rule location.");
316 ok(lttng_userspace_probe_location_is_equal(
317 probe_location, probe_location_tmp),
318 "Location is equal.");
319
46fd07ac 320 status = lttng_event_rule_kernel_uprobe_set_event_name(uprobe, probe_name);
dbc20d3c
JR
321 ok(status == LTTNG_EVENT_RULE_STATUS_OK,
322 "Setting uprobe event rule name: %s.", probe_name);
46fd07ac 323 status = lttng_event_rule_kernel_uprobe_get_event_name(uprobe, &tmp);
dbc20d3c
JR
324 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting uprobe name.");
325 ok(!strcmp(probe_name, tmp), "Uprobe name are equal.");
326
327 ok(lttng_event_rule_serialize(uprobe, &payload) == 0, "Serializing.");
328
329 {
330 struct lttng_payload_view view =
331 lttng_payload_view_from_payload(
332 &payload, 0, -1);
333
334 ok(lttng_event_rule_create_from_payload(
335 &view, &uprobe_from_buffer) > 0,
336 "Deserializing.");
337 }
338
339 ok(lttng_event_rule_is_equal(uprobe, uprobe_from_buffer),
340 "serialized and from buffer are equal.");
341
342end:
343 lttng_payload_reset(&payload);
344 lttng_event_rule_destroy(uprobe);
345 lttng_event_rule_destroy(uprobe_from_buffer);
346 lttng_userspace_probe_location_destroy(probe_location);
347 lttng_userspace_probe_location_lookup_method_destroy(lookup_method);
348}
349
f2791161 350static void test_event_rule_kernel_probe_by_location(
dbc20d3c
JR
351 const struct lttng_kernel_probe_location *location)
352{
353 struct lttng_event_rule *kprobe = NULL;
354 struct lttng_event_rule *kprobe_from_buffer = NULL;
355 enum lttng_event_rule_status status;
356 const struct lttng_kernel_probe_location *_location;
357
358 const char *probe_name = "my_probe";
359 const char *tmp;
360 struct lttng_payload payload;
361
362 diag("Event rule kprobe for location type %d.",
363 lttng_kernel_probe_location_get_type(location));
364
365 lttng_payload_init(&payload);
366
85522de5 367 kprobe = lttng_event_rule_kernel_kprobe_create(location);
dbc20d3c
JR
368 ok(kprobe, "kprobe event rule object creation.");
369
85522de5 370 status = lttng_event_rule_kernel_kprobe_get_location(kprobe, &_location);
dbc20d3c
JR
371 ok(status == LTTNG_EVENT_RULE_STATUS_OK,
372 "Getting kprobe event rule location.");
373 ok(lttng_kernel_probe_location_is_equal(location, _location), "Locations are equal.");
374
85522de5 375 status = lttng_event_rule_kernel_kprobe_set_event_name(kprobe, probe_name);
dbc20d3c
JR
376 ok(status == LTTNG_EVENT_RULE_STATUS_OK,
377 "Setting kprobe event rule name: %s.", probe_name);
85522de5 378 status = lttng_event_rule_kernel_kprobe_get_event_name(kprobe, &tmp);
dbc20d3c
JR
379 ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting kprobe name.");
380 ok(!strcmp(probe_name, tmp), "kprobe name are equal.");
381
382 ok(lttng_event_rule_serialize(kprobe, &payload) == 0, "Serializing.");
383
384 {
385 struct lttng_payload_view view =
386 lttng_payload_view_from_payload(
387 &payload, 0, -1);
388
389 ok(lttng_event_rule_create_from_payload(
390 &view, &kprobe_from_buffer) > 0,
391 "Deserializing.");
392 }
393
394 ok(lttng_event_rule_is_equal(kprobe, kprobe_from_buffer),
395 "serialized and from buffer are equal.");
396
397 lttng_payload_reset(&payload);
398 lttng_event_rule_destroy(kprobe);
399 lttng_event_rule_destroy(kprobe_from_buffer);
400}
401
f2791161 402static void test_event_rule_kernel_probe(void)
dbc20d3c
JR
403{
404 struct lttng_kernel_probe_location *address_location = NULL;
405 struct lttng_kernel_probe_location *symbol_location = NULL;
406
407 address_location = lttng_kernel_probe_location_address_create(50);
408 symbol_location = lttng_kernel_probe_location_symbol_create("une_bonne", 50);
409 assert(address_location);
410 assert(symbol_location);
411
f2791161
JR
412 test_event_rule_kernel_probe_by_location(address_location);
413 test_event_rule_kernel_probe_by_location(symbol_location);
dbc20d3c
JR
414
415 lttng_kernel_probe_location_destroy(address_location);
416 lttng_kernel_probe_location_destroy(symbol_location);
417}
418
2b4c142d
JG
419static void test_set_event_rule_log_level_rules(
420 struct lttng_event_rule *event_rule,
421 int log_level,
422 enum lttng_event_rule_status *exactly_status,
423 enum lttng_event_rule_status *as_severe_status)
424{
425 struct lttng_log_level_rule *log_level_rule;
426
427 log_level_rule = lttng_log_level_rule_at_least_as_severe_as_create(
428 log_level);
429 assert(log_level_rule);
430
431 *as_severe_status = lttng_event_rule_tracepoint_set_log_level_rule(
432 event_rule, log_level_rule);
433 lttng_log_level_rule_destroy(log_level_rule);
434
435 log_level_rule = lttng_log_level_rule_exactly_create(log_level);
436 assert(log_level_rule);
437
438 *exactly_status = lttng_event_rule_tracepoint_set_log_level_rule(
439 event_rule, log_level_rule);
440 lttng_log_level_rule_destroy(log_level_rule);
441}
442
2b4c142d
JG
443static void test_event_rule_log_level_generic(const char *domain_name,
444 enum lttng_domain_type domain,
445 log_level_name_getter get_log_level_name,
446 const int tagged_log_level_values[],
447 size_t tagged_log_level_values_count,
448 const int valid_log_level_values[],
449 size_t valid_log_level_values_count,
450 const int invalid_log_level_values[],
451 size_t invalid_log_level_values_count)
452{
453 size_t i;
454 struct lttng_event_rule *tracepoint_rule;
455 enum lttng_event_rule_status er_exactly_status, er_as_severe_status;
456
457 diag("Test %s event rule + log level rule", domain_name);
458 tracepoint_rule = lttng_event_rule_tracepoint_create(domain);
459 assert(tracepoint_rule);
460
461 for (i = 0; i < tagged_log_level_values_count; i++) {
462 const int tagged_log_level_value = tagged_log_level_values[i];
463
464 test_set_event_rule_log_level_rules(tracepoint_rule,
465 tagged_log_level_value,
466 &er_exactly_status, &er_as_severe_status);
467 ok(er_exactly_status == LTTNG_EVENT_RULE_STATUS_OK,
468 "Log level rule \"exactly\" accepted by %s tracepoint event rule: level = %s",
469 domain_name,
470 get_log_level_name(
471 tagged_log_level_value));
472 ok(er_as_severe_status == LTTNG_EVENT_RULE_STATUS_OK,
473 "Log level rule \"as least as severe as\" accepted by %s tracepoint event rule: level = %s",
474 domain_name,
475 get_log_level_name(
476 tagged_log_level_value));
477 }
478
479 for (i = 0; i < valid_log_level_values_count; i++) {
480 const int valid_log_level_value = valid_log_level_values[i];
481
482 test_set_event_rule_log_level_rules(tracepoint_rule,
483 valid_log_level_value,
484 &er_exactly_status, &er_as_severe_status);
485 ok(er_exactly_status == LTTNG_EVENT_RULE_STATUS_OK,
486 "Log level rule \"exactly\" accepted by %s tracepoint event rule: level = %d",
487 domain_name,
488 valid_log_level_value);
489 ok(er_as_severe_status == LTTNG_EVENT_RULE_STATUS_OK,
490 "Log level rule \"as least as severe as\" accepted by %s tracepoint event rule: level = %d",
491 domain_name,
492 valid_log_level_value);
493 }
494
495 for (i = 0; i < invalid_log_level_values_count; i++) {
496 const int invalid_log_level_value = invalid_log_level_values[i];
497
498 test_set_event_rule_log_level_rules(tracepoint_rule,
499 invalid_log_level_value,
500 &er_exactly_status, &er_as_severe_status);
501 ok(er_exactly_status == LTTNG_EVENT_RULE_STATUS_INVALID,
502 "Log level rule \"exactly\" rejected by %s tracepoint event rule: level = %d",
503 domain_name,
504 invalid_log_level_value);
505 ok(er_as_severe_status == LTTNG_EVENT_RULE_STATUS_INVALID,
506 "Log level rule \"as least as severe as\" rejected by %s tracepoint event rule: level = %d",
507 domain_name,
508 invalid_log_level_value);
509 }
510
511 lttng_event_rule_destroy(tracepoint_rule);
512}
513
514static void test_event_rule_log_level_ust(void)
515{
516 const int tagged_log_level_values[] = {
517 LTTNG_LOGLEVEL_EMERG,
518 LTTNG_LOGLEVEL_ALERT,
519 LTTNG_LOGLEVEL_CRIT,
520 LTTNG_LOGLEVEL_ERR,
521 LTTNG_LOGLEVEL_WARNING,
522 LTTNG_LOGLEVEL_NOTICE,
523 LTTNG_LOGLEVEL_INFO,
524 LTTNG_LOGLEVEL_DEBUG_SYSTEM,
525 LTTNG_LOGLEVEL_DEBUG_PROGRAM,
526 LTTNG_LOGLEVEL_DEBUG_PROCESS,
527 LTTNG_LOGLEVEL_DEBUG_MODULE,
528 LTTNG_LOGLEVEL_DEBUG_UNIT,
529 LTTNG_LOGLEVEL_DEBUG_FUNCTION,
530 LTTNG_LOGLEVEL_DEBUG_LINE,
531 LTTNG_LOGLEVEL_DEBUG,
532 };
533 const int invalid_log_level_values[] = {
534 -1980,
535 1995,
536 LTTNG_LOGLEVEL_DEBUG + 1,
537 LTTNG_LOGLEVEL_EMERG - 1,
538 };
539
540 test_event_rule_log_level_generic("user space", LTTNG_DOMAIN_UST,
541 loglevel_value_to_name, tagged_log_level_values,
542 ARRAY_SIZE(tagged_log_level_values),
543 NULL, 0,
544 invalid_log_level_values,
545 ARRAY_SIZE(invalid_log_level_values));
546}
547
548static void test_event_rule_log_level_jul(void)
549{
550 const int tagged_log_level_values[] = {
551 LTTNG_LOGLEVEL_JUL_OFF,
552 LTTNG_LOGLEVEL_JUL_SEVERE,
553 LTTNG_LOGLEVEL_JUL_WARNING,
554 LTTNG_LOGLEVEL_JUL_INFO,
555 LTTNG_LOGLEVEL_JUL_CONFIG,
556 LTTNG_LOGLEVEL_JUL_FINE,
557 LTTNG_LOGLEVEL_JUL_FINER,
558 LTTNG_LOGLEVEL_JUL_FINEST,
559 LTTNG_LOGLEVEL_JUL_ALL,
560 };
561 const int valid_log_level_values[] = {
562 0,
563 -1980,
564 1995
565 };
566
567 test_event_rule_log_level_generic("Java Util Logging", LTTNG_DOMAIN_JUL,
568 loglevel_jul_value_to_name, tagged_log_level_values,
569 ARRAY_SIZE(tagged_log_level_values),
570 valid_log_level_values,
571 ARRAY_SIZE(valid_log_level_values), NULL, 0);
572}
573
574static void test_event_rule_log_level_log4j(void)
575{
576 const int tagged_log_level_values[] = {
577 LTTNG_LOGLEVEL_LOG4J_OFF,
578 LTTNG_LOGLEVEL_LOG4J_FATAL,
579 LTTNG_LOGLEVEL_LOG4J_ERROR,
580 LTTNG_LOGLEVEL_LOG4J_WARN,
581 LTTNG_LOGLEVEL_LOG4J_INFO,
582 LTTNG_LOGLEVEL_LOG4J_DEBUG,
583 LTTNG_LOGLEVEL_LOG4J_TRACE,
584 LTTNG_LOGLEVEL_LOG4J_ALL,
585 };
586 const int valid_log_level_values[] = {
587 0
588 -1980,
589 1995
590 };
591
592 test_event_rule_log_level_generic("Log4j", LTTNG_DOMAIN_LOG4J,
593 loglevel_log4j_value_to_name, tagged_log_level_values,
594 ARRAY_SIZE(tagged_log_level_values),
595 valid_log_level_values,
596 ARRAY_SIZE(valid_log_level_values), NULL, 0);
597}
598
599static void test_event_rule_log_level_python(void)
600{
601 const int tagged_log_level_values[] = {
602 LTTNG_LOGLEVEL_PYTHON_CRITICAL,
603 LTTNG_LOGLEVEL_PYTHON_ERROR,
604 LTTNG_LOGLEVEL_PYTHON_WARNING,
605 LTTNG_LOGLEVEL_PYTHON_INFO,
606 LTTNG_LOGLEVEL_PYTHON_DEBUG,
607 LTTNG_LOGLEVEL_PYTHON_NOTSET,
608 };
609 const int valid_log_level_values[] = {
610 45,
611 35,
612 0,
613 -657,
614 };
615
616 test_event_rule_log_level_generic("Python", LTTNG_DOMAIN_PYTHON,
617 loglevel_python_value_to_name, tagged_log_level_values,
618 ARRAY_SIZE(tagged_log_level_values),
619 valid_log_level_values,
620 ARRAY_SIZE(valid_log_level_values),
621 NULL, 0);
622}
623
dbc20d3c
JR
624int main(int argc, const char *argv[])
625{
626 plan_tests(NUM_TESTS);
627 test_event_rule_tracepoint();
af0818ef 628 test_event_rule_kernel_tracepoint();
dbc20d3c 629 test_event_rule_syscall();
1f1567a5 630 test_event_rule_userspace_probe();
f2791161 631 test_event_rule_kernel_probe();
2b4c142d
JG
632 test_event_rule_log_level_ust();
633 test_event_rule_log_level_jul();
634 test_event_rule_log_level_log4j();
635 test_event_rule_log_level_python();
dbc20d3c
JR
636 return exit_status();
637}
This page took 0.052366 seconds and 4 git commands to generate.