X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Fregression%2Fust%2Fblocking%2Ftest_blocking;fp=tests%2Fregression%2Fust%2Fblocking%2Ftest_blocking;h=261e0b8b3f3f40d72dbd96f18a163f077a5e51ec;hb=de7e372efecc2cf51921f2ac5a657337e04a39d3;hp=0000000000000000000000000000000000000000;hpb=deb35f495e89dd75b7fef7ffe46dc2301bd29c69;p=lttng-tools.git diff --git a/tests/regression/ust/blocking/test_blocking b/tests/regression/ust/blocking/test_blocking new file mode 100755 index 000000000..261e0b8b3 --- /dev/null +++ b/tests/regression/ust/blocking/test_blocking @@ -0,0 +1,160 @@ +#!/bin/bash +# +# Copyright (C) - 2015 Jonathan Rajotte +# Copyright (C) - 2016 Mathieu Desnoyers +# +# 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