tests: Implement tests for lttng-ust LTTNG_UST_BLOCKING_RETRY_TIMEOUT
[lttng-tools.git] / tests / regression / ust / blocking / test_blocking
diff --git a/tests/regression/ust/blocking/test_blocking b/tests/regression/ust/blocking/test_blocking
new file mode 100755 (executable)
index 0000000..261e0b8
--- /dev/null
@@ -0,0 +1,160 @@
+#!/bin/bash
+#
+# Copyright (C) - 2015 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
+# Copyright (C) - 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+#
+# This library is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+TEST_DESC="UST - Blocking mode"
+
+CURDIR=$(dirname $0)/
+TESTDIR=$CURDIR/../../..
+SESSION_NAME="blocking"
+
+TESTAPP_PATH="$TESTDIR/utils/testapp"
+TESTAPP_NAME="gen-ust-events"
+TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
+EVENT_NAME="tp:tptest"
+
+NUM_TESTS=45
+
+source $TESTDIR/utils/utils.sh
+
+# MUST set TESTDIR before calling those functions
+# Run app on CPU 0 to ensure we only write in a single ring buffer.
+function run_app()
+{
+       taskset 0x00000001 $TESTAPP_BIN $NUM_EVENT
+       ok $? "Application done"
+}
+
+function test_ust_implicit_no_blocking()
+{
+       NUM_EVENT=500000
+       diag "UST implicit non-blocking mode (default): will hang if fails"
+
+       # Test without the plugin
+       start_lttng_sessiond
+       create_lttng_session_no_output $SESSION_NAME
+       enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
+       start_lttng_tracing_ok $SESSION_NAME
+       run_app
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+       stop_lttng_sessiond
+
+       ok 0 "Does not hang"
+}
+
+function test_ust_explicit_no_blocking()
+{
+       NUM_EVENT=500000
+       diag "UST explicit non-blocking mode: will hang if fails"
+
+       # Test without the plugin
+       start_lttng_sessiond
+       create_lttng_session_no_output $SESSION_NAME
+       enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
+       start_lttng_tracing_ok $SESSION_NAME
+       LTTNG_UST_BLOCKING_RETRY_TIMEOUT=0 run_app
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+       stop_lttng_sessiond
+
+       ok 0 "Does not hang"
+}
+
+function test_ust_timeout_no_blocking()
+{
+       NUM_EVENT=12500
+       diag "UST 1ms timeout retry mode: will hang if fails"
+
+       start_lttng_sessiond
+       create_lttng_session_no_output $SESSION_NAME
+       enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
+       start_lttng_tracing_ok $SESSION_NAME
+       # retry timeout 1ms
+       LTTNG_UST_BLOCKING_RETRY_TIMEOUT=1 run_app
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+       stop_lttng_sessiond
+
+       ok 0 "Does not hang"
+}
+
+function test_ust_snapshot_no_blocking()
+{
+       NUM_EVENT=500000
+       diag "UST blocking mode: don't block in snapshot mode"
+
+       # Test without the plugin
+       start_lttng_sessiond
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH --snapshot
+       enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
+       start_lttng_tracing_ok $SESSION_NAME
+       LTTNG_UST_BLOCKING_RETRY_TIMEOUT=-1 run_app
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+       stop_lttng_sessiond
+
+       ok 0 "Does not hang"
+}
+
+function test_ust_blocking_no_discard()
+{
+       NUM_EVENT=500000
+       diag "UST blocking mode: no event discarded"
+
+       # Test without the plugin
+       start_lttng_sessiond
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
+       start_lttng_tracing_ok $SESSION_NAME
+       # infinite retry timeout
+       LTTNG_UST_BLOCKING_RETRY_TIMEOUT=-1 run_app
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+       stop_lttng_sessiond
+
+       nr_events=$(babeltrace $TRACE_PATH 2>/dev/null | wc -l)
+
+       test $nr_events -eq $NUM_EVENT
+       ok $? "No event lost with UST blocking mode: found $nr_events expect $NUM_EVENT"
+}
+
+plan_tests $NUM_TESTS
+
+print_test_banner "$TEST_DESC"
+
+TESTS=(
+       "test_ust_implicit_no_blocking"
+       "test_ust_explicit_no_blocking"
+       "test_ust_timeout_no_blocking"
+       "test_ust_snapshot_no_blocking"
+       "test_ust_blocking_no_discard"
+)
+
+TEST_COUNT=${#TESTS[@]}
+i=0
+
+while [ "$i" -lt "$TEST_COUNT" ]; do
+
+       TRACE_PATH=$(mktemp -d)
+
+       # Execute test
+       ${TESTS[$i]}
+
+       rm -rf $TRACE_PATH
+
+       let "i++"
+done
This page took 0.026113 seconds and 4 git commands to generate.