tests: Use session discarded counter to validate blocking test
[lttng-tools.git] / tests / regression / ust / blocking / test_blocking
CommitLineData
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
8TEST_DESC="UST - Blocking mode"
9
10CURDIR=$(dirname $0)/
11TESTDIR=$CURDIR/../../..
12SESSION_NAME="blocking"
491d1539 13CHANNEL_NAME="testchan"
de7e372e
MD
14
15TESTAPP_PATH="$TESTDIR/utils/testapp"
16TESTAPP_NAME="gen-ust-events"
17TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
18EVENT_NAME="tp:tptest"
19
491d1539 20NUM_TESTS=49
de7e372e 21
2a05e025
OD
22# shellcheck source=../utils/utils.sh
23source "$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
27function 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
33function 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
46function 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 64function 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
83function 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
103function 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
123function 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 136 stop_lttng_tracing_ok $SESSION_NAME
8e023ed4 137 discarded=$("${XML_EXTRACT}" <("${TESTDIR}/../src/bin/lttng/${LTTNG_BIN}" --mi=xml list --channel="${CHANNEL_NAME}" "${SESSION_NAME}") '//lttng:command/lttng:output/lttng:sessions/lttng:session/lttng:domains/lttng:domain/lttng:channels/lttng:channel/lttng:attributes/lttng:discarded_events')
de7e372e
MD
138 destroy_lttng_session_ok $SESSION_NAME
139 stop_lttng_sessiond
140
8e023ed4
KS
141 test "$(echo "${discarded}" | grep -Eo '[0-9]+')" = "0"
142 ok $? "No event lost with UST blocking mode: ${discarded}"
de7e372e
MD
143}
144
145plan_tests $NUM_TESTS
146
147print_test_banner "$TEST_DESC"
148
c125de8f
FD
149bail_out_if_no_babeltrace
150
ce8adea3
KS
151if ! check_disk_space "${TMPDIR:-/tmp}"; then
152 BAIL_OUT "Not enough free space to run blocking tests"
153fi
154
de7e372e
MD
155TESTS=(
156 "test_ust_implicit_no_blocking"
491d1539 157 "test_ust_implicit_no_blocking_with_channel_blocking"
de7e372e
MD
158 "test_ust_timeout_no_blocking"
159 "test_ust_snapshot_no_blocking"
160 "test_ust_blocking_no_discard"
161)
162
163TEST_COUNT=${#TESTS[@]}
164i=0
165
166while [ "$i" -lt "$TEST_COUNT" ]; do
167
8d5a3312 168 TRACE_PATH=$(mktemp -d -t tmp.test_blocking_ust_trace_path.XXXXXX)
de7e372e
MD
169
170 # Execute test
171 ${TESTS[$i]}
172
173 rm -rf $TRACE_PATH
174
175 let "i++"
176done
This page took 0.053759 seconds and 4 git commands to generate.