Commit | Line | Data |
---|---|---|
854382b8 JR |
1 | #!/bin/bash |
2 | # | |
4942c256 | 3 | # Copyright (C) 2017 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> |
854382b8 | 4 | # |
9d16b343 | 5 | # SPDX-License-Identifier: LGPL-2.1-only |
854382b8 | 6 | |
069fc1c5 | 7 | CURDIR=$(dirname "$0")/ |
854382b8 JR |
8 | TESTDIR=$CURDIR/../../../ |
9 | ||
345ed219 JR |
10 | TMPDIR=$(mktemp -d) |
11 | ||
854382b8 | 12 | #This is needed since the testpoint create a pipe with the consumerd type suffixed |
345ed219 | 13 | TESTPOINT_BASE_PATH=$(readlink -f "$TMPDIR/lttng.t_p_n") |
854382b8 | 14 | TESTPOINT_PIPE_PATH=$(mktemp -u "${TESTPOINT_BASE_PATH}.XXXXXX") |
069fc1c5 | 15 | TESTPOINT=$(readlink -f "${CURDIR}/.libs/libpause_consumer.so") |
345ed219 | 16 | TESTAPP_STATE_PATH=$(mktemp -u "$TMPDIR/application_state.XXXXXXXXXX") |
854382b8 | 17 | |
854382b8 JR |
18 | |
19 | SESSION_NAME="my_session" | |
20 | CHANNEL_NAME="my_channel" | |
21 | ||
854382b8 JR |
22 | NUM_TESTS=104 |
23 | ||
069fc1c5 FD |
24 | # shellcheck source=../../../utils/utils.sh |
25 | source "$TESTDIR/utils/utils.sh" | |
854382b8 | 26 | |
cb723729 | 27 | function kernel_event_generator_toggle_state |
854382b8 JR |
28 | { |
29 | kernel_event_generator_suspended=$((kernel_event_generator_suspended==0)) | |
069fc1c5 | 30 | } |
854382b8 | 31 | |
069fc1c5 FD |
32 | function generate_filter_events |
33 | { | |
34 | /bin/echo -n "10" > /proc/lttng-test-filter-event 2> /dev/null | |
854382b8 | 35 | } |
069fc1c5 | 36 | |
854382b8 JR |
37 | function kernel_event_generator |
38 | { | |
069fc1c5 FD |
39 | command_to_run=$1 |
40 | state_file=$2 | |
854382b8 | 41 | kernel_event_generator_suspended=0 |
cb723729 | 42 | trap kernel_event_generator_toggle_state SIGUSR1 |
3be453c9 | 43 | |
854382b8 JR |
44 | while (true); do |
45 | if [[ $kernel_event_generator_suspended -eq "1" ]]; then | |
46 | touch $state_file | |
47 | sleep 0.5 | |
48 | else | |
49 | if [[ -f $state_file ]]; then | |
50 | rm $state_file 2> /dev/null | |
51 | fi | |
069fc1c5 | 52 | $command_to_run |
854382b8 JR |
53 | fi |
54 | done | |
55 | } | |
56 | ||
069fc1c5 | 57 | function test_buffer_usage_notification |
854382b8 | 58 | { |
854382b8 | 59 | local event_name="lttng_test_filter_event" |
069fc1c5 FD |
60 | local trace_path |
61 | local page_size | |
62 | local consumerd_pipe=() | |
854382b8 | 63 | |
069fc1c5 FD |
64 | trace_path=$(mktemp -d) |
65 | page_size=$(getconf PAGE_SIZE) | |
854382b8 | 66 | |
069fc1c5 | 67 | create_lttng_session_notap $SESSION_NAME "$trace_path" |
854382b8 | 68 | |
069fc1c5 FD |
69 | lttng_enable_kernel_channel_notap $SESSION_NAME $CHANNEL_NAME \ |
70 | --subbuf-size="$page_size" | |
854382b8 JR |
71 | enable_kernel_lttng_event_notap $SESSION_NAME $event_name $CHANNEL_NAME |
72 | ||
069fc1c5 FD |
73 | kernel_event_generator generate_filter_events "$TESTAPP_STATE_PATH" & |
74 | APP_PID=$! | |
75 | ||
76 | # This is needed since the testpoint create a pipe with the consumer | |
77 | # type suffixed. | |
854382b8 JR |
78 | for f in "$TESTPOINT_BASE_PATH"*; do |
79 | consumerd_pipe+=("$f") | |
80 | done | |
81 | ||
069fc1c5 FD |
82 | "$CURDIR/notification" 2 LTTNG_DOMAIN_KERNEL $SESSION_NAME $CHANNEL_NAME \ |
83 | $APP_PID $TESTAPP_STATE_PATH ${consumerd_pipe[@]} | |
854382b8 JR |
84 | |
85 | destroy_lttng_session_notap $SESSION_NAME | |
854382b8 JR |
86 | |
87 | kill -9 $APP_PID | |
88 | wait $APP_PID 2> /dev/null | |
854382b8 JR |
89 | } |
90 | ||
91 | if [ "$(id -u)" == "0" ]; then | |
069fc1c5 | 92 | |
5da3fc85 | 93 | validate_lttng_modules_present |
069fc1c5 FD |
94 | |
95 | ||
96 | modprobe lttng-test | |
97 | ||
98 | # Used on sessiond launch. | |
99 | LTTNG_SESSIOND_ENV_VARS="LTTNG_TESTPOINT_ENABLE=1 \ | |
100 | CONSUMER_PAUSE_PIPE_PATH=${TESTPOINT_PIPE_PATH} \ | |
101 | LD_PRELOAD=${TESTPOINT}" | |
102 | start_lttng_sessiond_notap | |
103 | ||
104 | test_buffer_usage_notification | |
105 | ||
106 | stop_lttng_sessiond_notap | |
107 | rmmod lttng-test | |
108 | ||
109 | rm -rf "${consumerd_pipe[@]}" 2> /dev/null | |
854382b8 JR |
110 | else |
111 | # Kernel tests are skipped. | |
112 | plan_tests $NUM_TESTS | |
113 | skip 0 "Root access is needed. Skipping all kernel notification tests." $NUM_TESTS | |
114 | fi | |
115 | ||
069fc1c5 | 116 | rm -rf "$TMPDIR" |