2 * Unit tests for the notification API.
4 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
6 * SPDX-License-Identifier: LGPL-2.1-only
18 #include <common/payload-view.h>
19 #include <common/payload.h>
20 #include <lttng/domain.h>
21 #include <lttng/event-rule/kernel-kprobe-internal.h>
22 #include <lttng/event-rule/kernel-kprobe.h>
23 #include <lttng/event-rule/kernel-syscall-internal.h>
24 #include <lttng/event-rule/kernel-syscall.h>
25 #include <lttng/event-rule/tracepoint-internal.h>
26 #include <lttng/event-rule/tracepoint.h>
27 #include <lttng/event-rule/kernel-tracepoint-internal.h>
28 #include <lttng/event-rule/kernel-tracepoint.h>
29 #include <lttng/event-rule/kernel-uprobe-internal.h>
30 #include <lttng/event-rule/kernel-uprobe.h>
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>
36 #include "bin/lttng/loglevel.h"
39 int lttng_opt_quiet
= 1;
40 int lttng_opt_verbose
;
45 struct tracepoint_test
{
46 enum lttng_domain_type type
;
47 bool support_name_pattern_exclusion
;
50 typedef const char *(*log_level_name_getter
)(int log_level
);
53 void test_event_rule_tracepoint_by_domain(const struct tracepoint_test
*test
)
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
;
60 const char *pattern
="my_event_*";
61 const char *filter
="msg_id == 23 && size >= 2048";
63 const char *name_pattern_exclusions
[] = {"my_event_test1", "my_event_test2" ,"my_event_test3"};
64 struct lttng_log_level_rule
*log_level_rule
= NULL
;
65 const struct lttng_log_level_rule
*log_level_rule_return
= NULL
;
66 struct lttng_payload payload
;
69 diag("Testing domain %d.", type
);
71 lttng_payload_init(&payload
);
73 log_level_rule
= lttng_log_level_rule_exactly_create(LTTNG_LOGLEVEL_INFO
);
74 assert(log_level_rule
);
76 tracepoint
= lttng_event_rule_tracepoint_create(type
);
77 ok(tracepoint
, "tracepoint object.");
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
);
83 status
= lttng_event_rule_tracepoint_set_name_pattern(tracepoint
, pattern
);
84 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "setting pattern.");
85 status
= lttng_event_rule_tracepoint_get_name_pattern(tracepoint
, &tmp
);
86 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "getting pattern.");
87 ok(!strncmp(pattern
, tmp
, strlen(pattern
)), "pattern is equal.");
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.");
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.");
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.");
105 if (test
->support_name_pattern_exclusion
) {
108 for (i
= 0; i
< 3; i
++) {
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
]);
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.");
115 ok(count
== 3, "count is %d/3", count
);
117 for (i
= 0; i
< count
; i
++) {
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
]);
125 for (i
= 0; i
< 3; i
++) {
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
]);
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.");
132 ok(count
== 0, "count is %d/0", count
);
135 ok(lttng_event_rule_serialize(tracepoint
, &payload
) == 0, "Serializing.");
138 struct lttng_payload_view view
=
139 lttng_payload_view_from_payload(
142 ok(lttng_event_rule_create_from_payload(
143 &view
, &tracepoint_from_buffer
) > 0,
147 ok(lttng_event_rule_is_equal(tracepoint
, tracepoint_from_buffer
), "serialized and from buffer are equal.");
149 lttng_payload_reset(&payload
);
150 lttng_event_rule_destroy(tracepoint
);
151 lttng_event_rule_destroy(tracepoint_from_buffer
);
152 lttng_log_level_rule_destroy(log_level_rule
);
156 void test_event_rule_tracepoint(void)
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}};
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.");
170 for (i
= 0; i
< sizeof(tests
) / sizeof(tests
[0]); i
++) {
171 test_event_rule_tracepoint_by_domain(&tests
[i
]);
176 void test_event_rule_kernel_tracepoint(void)
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";
184 struct lttng_payload payload
;
186 diag("Testing lttng_event_rule_kernel_tracepoint.");
188 lttng_payload_init(&payload
);
190 tracepoint
= lttng_event_rule_kernel_tracepoint_create();
191 ok(tracepoint
, "tracepoint object.");
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.");
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.");
205 ok(lttng_event_rule_serialize(tracepoint
, &payload
) == 0, "Serializing.");
208 struct lttng_payload_view view
=
209 lttng_payload_view_from_payload(
212 ok(lttng_event_rule_create_from_payload(
213 &view
, &tracepoint_from_buffer
) > 0,
217 ok(lttng_event_rule_is_equal(tracepoint
, tracepoint_from_buffer
), "serialized and from buffer are equal.");
219 lttng_payload_reset(&payload
);
220 lttng_event_rule_destroy(tracepoint
);
221 lttng_event_rule_destroy(tracepoint_from_buffer
);
224 static void test_event_rule_syscall(void)
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";
232 struct lttng_payload payload
;
234 diag("Event rule syscall.");
236 lttng_payload_init(&payload
);
238 syscall
= lttng_event_rule_kernel_syscall_create(LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY
);
239 ok(syscall
, "syscall object.");
241 status
= lttng_event_rule_kernel_syscall_set_name_pattern(syscall
, pattern
);
242 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "setting pattern.");
243 status
= lttng_event_rule_kernel_syscall_get_name_pattern(syscall
, &tmp
);
244 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "getting pattern.");
245 ok(!strncmp(pattern
, tmp
, strlen(pattern
)), "pattern is equal.");
247 status
= lttng_event_rule_kernel_syscall_set_filter(syscall
, filter
);
248 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "setting filter.");
249 status
= lttng_event_rule_kernel_syscall_get_filter(syscall
, &tmp
);
250 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "getting filter.");
251 ok(!strncmp(filter
, tmp
, strlen(filter
)), "filter is equal.");
253 ok(lttng_event_rule_serialize(syscall
, &payload
) == 0, "Serializing.");
256 struct lttng_payload_view view
=
257 lttng_payload_view_from_payload(
260 ok(lttng_event_rule_create_from_payload(
261 &view
, &syscall_from_buffer
) > 0,
265 ok(lttng_event_rule_is_equal(syscall
, syscall_from_buffer
),
266 "serialized and from buffer are equal.");
268 lttng_payload_reset(&payload
);
269 lttng_event_rule_destroy(syscall
);
270 lttng_event_rule_destroy(syscall_from_buffer
);
273 static void test_event_rule_userspace_probe(void)
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
=
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
;
283 const char *probe_name
= "my_probe.";
285 struct lttng_payload payload
;
287 diag("Event rule uprobe.");
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.");
295 probe_location
= lttng_userspace_probe_location_function_create(
297 "lttng_userspace_probe_location_tracepoint_create",
299 if (!probe_location
) {
300 fail("Setup error on userspace probe location creation.");
304 /* Ownership transferred to the probe location function object. */
305 lookup_method
= NULL
;
307 lttng_payload_init(&payload
);
309 uprobe
= lttng_event_rule_kernel_uprobe_create(probe_location
);
310 ok(uprobe
, "uprobe event rule object creation.");
312 status
= lttng_event_rule_kernel_uprobe_get_location(
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.");
320 status
= lttng_event_rule_kernel_uprobe_set_event_name(uprobe
, probe_name
);
321 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
,
322 "Setting uprobe event rule name: %s.", probe_name
);
323 status
= lttng_event_rule_kernel_uprobe_get_event_name(uprobe
, &tmp
);
324 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "Getting uprobe name.");
325 ok(!strcmp(probe_name
, tmp
), "Uprobe name are equal.");
327 ok(lttng_event_rule_serialize(uprobe
, &payload
) == 0, "Serializing.");
330 struct lttng_payload_view view
=
331 lttng_payload_view_from_payload(
334 ok(lttng_event_rule_create_from_payload(
335 &view
, &uprobe_from_buffer
) > 0,
339 ok(lttng_event_rule_is_equal(uprobe
, uprobe_from_buffer
),
340 "serialized and from buffer are equal.");
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
);
350 static void test_event_rule_kernel_probe_by_location(
351 const struct lttng_kernel_probe_location
*location
)
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
;
358 const char *probe_name
= "my_probe";
360 struct lttng_payload payload
;
362 diag("Event rule kprobe for location type %d.",
363 lttng_kernel_probe_location_get_type(location
));
365 lttng_payload_init(&payload
);
367 kprobe
= lttng_event_rule_kernel_kprobe_create(location
);
368 ok(kprobe
, "kprobe event rule object creation.");
370 status
= lttng_event_rule_kernel_kprobe_get_location(kprobe
, &_location
);
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.");
375 status
= lttng_event_rule_kernel_kprobe_set_event_name(kprobe
, probe_name
);
376 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
,
377 "Setting kprobe event rule name: %s.", probe_name
);
378 status
= lttng_event_rule_kernel_kprobe_get_event_name(kprobe
, &tmp
);
379 ok(status
== LTTNG_EVENT_RULE_STATUS_OK
, "Getting kprobe name.");
380 ok(!strcmp(probe_name
, tmp
), "kprobe name are equal.");
382 ok(lttng_event_rule_serialize(kprobe
, &payload
) == 0, "Serializing.");
385 struct lttng_payload_view view
=
386 lttng_payload_view_from_payload(
389 ok(lttng_event_rule_create_from_payload(
390 &view
, &kprobe_from_buffer
) > 0,
394 ok(lttng_event_rule_is_equal(kprobe
, kprobe_from_buffer
),
395 "serialized and from buffer are equal.");
397 lttng_payload_reset(&payload
);
398 lttng_event_rule_destroy(kprobe
);
399 lttng_event_rule_destroy(kprobe_from_buffer
);
402 static void test_event_rule_kernel_probe(void)
404 struct lttng_kernel_probe_location
*address_location
= NULL
;
405 struct lttng_kernel_probe_location
*symbol_location
= NULL
;
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
);
412 test_event_rule_kernel_probe_by_location(address_location
);
413 test_event_rule_kernel_probe_by_location(symbol_location
);
415 lttng_kernel_probe_location_destroy(address_location
);
416 lttng_kernel_probe_location_destroy(symbol_location
);
419 static void test_set_event_rule_log_level_rules(
420 struct lttng_event_rule
*event_rule
,
422 enum lttng_event_rule_status
*exactly_status
,
423 enum lttng_event_rule_status
*as_severe_status
)
425 struct lttng_log_level_rule
*log_level_rule
;
427 log_level_rule
= lttng_log_level_rule_at_least_as_severe_as_create(
429 assert(log_level_rule
);
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
);
435 log_level_rule
= lttng_log_level_rule_exactly_create(log_level
);
436 assert(log_level_rule
);
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
);
443 static 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
)
454 struct lttng_event_rule
*tracepoint_rule
;
455 enum lttng_event_rule_status er_exactly_status
, er_as_severe_status
;
457 diag("Test %s event rule + log level rule", domain_name
);
458 tracepoint_rule
= lttng_event_rule_tracepoint_create(domain
);
459 assert(tracepoint_rule
);
461 for (i
= 0; i
< tagged_log_level_values_count
; i
++) {
462 const int tagged_log_level_value
= tagged_log_level_values
[i
];
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",
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",
476 tagged_log_level_value
));
479 for (i
= 0; i
< valid_log_level_values_count
; i
++) {
480 const int valid_log_level_value
= valid_log_level_values
[i
];
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",
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",
492 valid_log_level_value
);
495 for (i
= 0; i
< invalid_log_level_values_count
; i
++) {
496 const int invalid_log_level_value
= invalid_log_level_values
[i
];
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",
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",
508 invalid_log_level_value
);
511 lttng_event_rule_destroy(tracepoint_rule
);
514 static void test_event_rule_log_level_ust(void)
516 const int tagged_log_level_values
[] = {
517 LTTNG_LOGLEVEL_EMERG
,
518 LTTNG_LOGLEVEL_ALERT
,
521 LTTNG_LOGLEVEL_WARNING
,
522 LTTNG_LOGLEVEL_NOTICE
,
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
,
533 const int invalid_log_level_values
[] = {
536 LTTNG_LOGLEVEL_DEBUG
+ 1,
537 LTTNG_LOGLEVEL_EMERG
- 1,
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
),
544 invalid_log_level_values
,
545 ARRAY_SIZE(invalid_log_level_values
));
548 static void test_event_rule_log_level_jul(void)
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
,
561 const int valid_log_level_values
[] = {
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);
574 static void test_event_rule_log_level_log4j(void)
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
,
586 const int valid_log_level_values
[] = {
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);
599 static void test_event_rule_log_level_python(void)
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
,
609 const int valid_log_level_values
[] = {
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
),
624 int main(int argc
, const char *argv
[])
626 plan_tests(NUM_TESTS
);
627 test_event_rule_tracepoint();
628 test_event_rule_kernel_tracepoint();
629 test_event_rule_syscall();
630 test_event_rule_userspace_probe();
631 test_event_rule_kernel_probe();
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();
636 return exit_status();