Commit | Line | Data |
---|---|---|
de7e372e MD |
1 | #!/bin/bash |
2 | # | |
9d16b343 MJ |
3 | # Copyright (C) 2015 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> |
4 | # Copyright (C) 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
de7e372e | 5 | # |
9d16b343 MJ |
6 | # SPDX-License-Identifier: LGPL-2.1-only |
7 | ||
de7e372e MD |
8 | TEST_DESC="UST - Blocking mode" |
9 | ||
10 | CURDIR=$(dirname $0)/ | |
11 | TESTDIR=$CURDIR/../../.. | |
12 | SESSION_NAME="blocking" | |
491d1539 | 13 | CHANNEL_NAME="testchan" |
de7e372e MD |
14 | |
15 | TESTAPP_PATH="$TESTDIR/utils/testapp" | |
16 | TESTAPP_NAME="gen-ust-events" | |
17 | TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" | |
18 | EVENT_NAME="tp:tptest" | |
19 | ||
491d1539 | 20 | NUM_TESTS=49 |
de7e372e | 21 | |
2a05e025 OD |
22 | # shellcheck source=../utils/utils.sh |
23 | source "$TESTDIR/utils/utils.sh" | |
de7e372e MD |
24 | |
25 | # MUST set TESTDIR before calling those functions | |
2a05e025 | 26 | # Run app on a single CPU to ensure we only write in a single ring buffer. |
de7e372e MD |
27 | function run_app() |
28 | { | |
2a05e025 | 29 | taskset --cpu-list "$(get_any_available_cpu)" $TESTAPP_BIN -i $NUM_EVENT |
de7e372e MD |
30 | ok $? "Application done" |
31 | } | |
32 | ||
ce8adea3 KS |
33 | function check_disk_space() |
34 | { | |
35 | local path | |
36 | ||
37 | path="${1:?}" | |
38 | kb_free=$(df -k -P "${path}" | tail -n 1 | awk '{ print $4 }') | |
39 | if [ "${kb_free}" -lt "1048576" ] ; then | |
40 | return 1 | |
41 | fi | |
42 | ||
43 | return 0 | |
44 | } | |
45 | ||
de7e372e MD |
46 | function test_ust_implicit_no_blocking() |
47 | { | |
491d1539 | 48 | NUM_EVENT=5000000 |
de7e372e MD |
49 | diag "UST implicit non-blocking mode (default): will hang if fails" |
50 | ||
de7e372e | 51 | start_lttng_sessiond |
491d1539 | 52 | # session in no-output mode |
de7e372e MD |
53 | create_lttng_session_no_output $SESSION_NAME |
54 | enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" | |
55 | start_lttng_tracing_ok $SESSION_NAME | |
56 | run_app | |
57 | stop_lttng_tracing_ok $SESSION_NAME | |
58 | destroy_lttng_session_ok $SESSION_NAME | |
59 | stop_lttng_sessiond | |
60 | ||
61 | ok 0 "Does not hang" | |
62 | } | |
63 | ||
491d1539 | 64 | function test_ust_implicit_no_blocking_with_channel_blocking() |
de7e372e | 65 | { |
491d1539 | 66 | NUM_EVENT=5000000 |
63dd9b28 | 67 | diag "UST implicit non-blocking mode (default) with blocking-timeout=inf channel: will hang if fails" |
de7e372e | 68 | |
de7e372e | 69 | start_lttng_sessiond |
491d1539 | 70 | # session in no-output mode |
de7e372e | 71 | create_lttng_session_no_output $SESSION_NAME |
63dd9b28 | 72 | enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf" |
491d1539 | 73 | enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME |
de7e372e | 74 | start_lttng_tracing_ok $SESSION_NAME |
491d1539 | 75 | run_app |
de7e372e MD |
76 | stop_lttng_tracing_ok $SESSION_NAME |
77 | destroy_lttng_session_ok $SESSION_NAME | |
78 | stop_lttng_sessiond | |
79 | ||
80 | ok 0 "Does not hang" | |
81 | } | |
82 | ||
83 | function test_ust_timeout_no_blocking() | |
84 | { | |
85 | NUM_EVENT=12500 | |
491d1539 | 86 | diag "UST 1ms timeout blocking mode: will hang if fails" |
de7e372e MD |
87 | |
88 | start_lttng_sessiond | |
491d1539 | 89 | # session in no-output mode |
de7e372e | 90 | create_lttng_session_no_output $SESSION_NAME |
491d1539 MD |
91 | # blocking timeout 1ms |
92 | enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000" | |
93 | enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME | |
de7e372e | 94 | start_lttng_tracing_ok $SESSION_NAME |
491d1539 | 95 | LTTNG_UST_ALLOW_BLOCKING=1 run_app |
de7e372e MD |
96 | stop_lttng_tracing_ok $SESSION_NAME |
97 | destroy_lttng_session_ok $SESSION_NAME | |
98 | stop_lttng_sessiond | |
99 | ||
100 | ok 0 "Does not hang" | |
101 | } | |
102 | ||
103 | function test_ust_snapshot_no_blocking() | |
104 | { | |
491d1539 | 105 | NUM_EVENT=5000000 |
de7e372e MD |
106 | diag "UST blocking mode: don't block in snapshot mode" |
107 | ||
108 | # Test without the plugin | |
109 | start_lttng_sessiond | |
110 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH --snapshot | |
491d1539 MD |
111 | # blocking timeout 1ms |
112 | enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000" | |
113 | enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME | |
de7e372e | 114 | start_lttng_tracing_ok $SESSION_NAME |
491d1539 | 115 | LTTNG_UST_ALLOW_BLOCKING=1 run_app |
de7e372e MD |
116 | stop_lttng_tracing_ok $SESSION_NAME |
117 | destroy_lttng_session_ok $SESSION_NAME | |
118 | stop_lttng_sessiond | |
119 | ||
120 | ok 0 "Does not hang" | |
121 | } | |
122 | ||
123 | function test_ust_blocking_no_discard() | |
124 | { | |
491d1539 | 125 | NUM_EVENT=5000000 |
de7e372e MD |
126 | diag "UST blocking mode: no event discarded" |
127 | ||
128 | # Test without the plugin | |
129 | start_lttng_sessiond | |
130 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH | |
491d1539 | 131 | # infinite blocking timeout |
63dd9b28 | 132 | enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf" |
491d1539 | 133 | enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME |
de7e372e | 134 | start_lttng_tracing_ok $SESSION_NAME |
491d1539 | 135 | LTTNG_UST_ALLOW_BLOCKING=1 run_app |
de7e372e MD |
136 | stop_lttng_tracing_ok $SESSION_NAME |
137 | destroy_lttng_session_ok $SESSION_NAME | |
138 | stop_lttng_sessiond | |
139 | ||
c125de8f | 140 | nr_events=$("$BABELTRACE_BIN" $TRACE_PATH 2>/dev/null | wc -l) |
de7e372e MD |
141 | |
142 | test $nr_events -eq $NUM_EVENT | |
143 | ok $? "No event lost with UST blocking mode: found $nr_events expect $NUM_EVENT" | |
144 | } | |
145 | ||
146 | plan_tests $NUM_TESTS | |
147 | ||
148 | print_test_banner "$TEST_DESC" | |
149 | ||
c125de8f FD |
150 | bail_out_if_no_babeltrace |
151 | ||
ce8adea3 KS |
152 | if ! check_disk_space "${TMPDIR:-/tmp}"; then |
153 | BAIL_OUT "Not enough free space to run blocking tests" | |
154 | fi | |
155 | ||
de7e372e MD |
156 | TESTS=( |
157 | "test_ust_implicit_no_blocking" | |
491d1539 | 158 | "test_ust_implicit_no_blocking_with_channel_blocking" |
de7e372e MD |
159 | "test_ust_timeout_no_blocking" |
160 | "test_ust_snapshot_no_blocking" | |
161 | "test_ust_blocking_no_discard" | |
162 | ) | |
163 | ||
164 | TEST_COUNT=${#TESTS[@]} | |
165 | i=0 | |
166 | ||
167 | while [ "$i" -lt "$TEST_COUNT" ]; do | |
168 | ||
8d5a3312 | 169 | TRACE_PATH=$(mktemp -d -t tmp.test_blocking_ust_trace_path.XXXXXX) |
de7e372e MD |
170 | |
171 | # Execute test | |
172 | ${TESTS[$i]} | |
173 | ||
174 | rm -rf $TRACE_PATH | |
175 | ||
176 | let "i++" | |
177 | done |