From de7e372efecc2cf51921f2ac5a657337e04a39d3 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 8 Nov 2016 17:59:12 -0500 Subject: [PATCH] tests: Implement tests for lttng-ust LTTNG_UST_BLOCKING_RETRY_TIMEOUT MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Mathieu Desnoyers CC: "Carlos O'Donell" Signed-off-by: Jérémie Galarneau --- configure.ac | 1 + tests/fast_regression | 1 + tests/regression/Makefile.am | 3 +- tests/regression/ust/Makefile.am | 2 +- tests/regression/ust/blocking/Makefile.am | 16 ++ tests/regression/ust/blocking/test_blocking | 160 ++++++++++++++++++++ 6 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 tests/regression/ust/blocking/Makefile.am create mode 100755 tests/regression/ust/blocking/test_blocking diff --git a/configure.ac b/configure.ac index 8b2decc71..6badbf9e6 100644 --- a/configure.ac +++ b/configure.ac @@ -1023,6 +1023,7 @@ AC_CONFIG_FILES([ tests/regression/ust/clock-override/Makefile tests/regression/ust/type-declarations/Makefile tests/regression/ust/rotation-destroy-flush/Makefile + tests/regression/ust/blocking/Makefile tests/stress/Makefile tests/unit/Makefile tests/unit/ini_config/Makefile diff --git a/tests/fast_regression b/tests/fast_regression index 23211f49a..bbce068f7 100644 --- a/tests/fast_regression +++ b/tests/fast_regression @@ -29,6 +29,7 @@ regression/ust/python-logging/test_python_logging regression/ust/getcpu-override/test_getcpu_override regression/ust/clock-override/test_clock_override regression/ust/rotation-destroy-flush/test_rotation_destroy_flush +regression/ust/blocking/test_blocking regression/ust/test_event_basic regression/ust/test_event_tracef regression/ust/test_event_perf diff --git a/tests/regression/Makefile.am b/tests/regression/Makefile.am index 01cff148c..86a55634b 100644 --- a/tests/regression/Makefile.am +++ b/tests/regression/Makefile.am @@ -39,7 +39,8 @@ TESTS += ust/before-after/test_before_after \ ust/clock-override/test_clock_override \ ust/test_event_basic \ ust/test_event_tracef \ - ust/test_event_perf + ust/test_event_perf \ + ust/blocking/test_blocking endif # HAVE_LIBLTTNG_UST_CTL if PYTHON_BINDING diff --git a/tests/regression/ust/Makefile.am b/tests/regression/ust/Makefile.am index 76862514b..06cf97a47 100644 --- a/tests/regression/ust/Makefile.am +++ b/tests/regression/ust/Makefile.am @@ -3,7 +3,7 @@ SUBDIRS = nprocesses high-throughput low-throughput before-after multi-session \ overlap buffers-pid linking daemon exit-fast fork libc-wrapper \ periodical-metadata-flush java-jul java-log4j python-logging \ getcpu-override clock-override type-declarations \ - rotation-destroy-flush + rotation-destroy-flush blocking if HAVE_OBJCOPY SUBDIRS += baddr-statedump ust-dl diff --git a/tests/regression/ust/blocking/Makefile.am b/tests/regression/ust/blocking/Makefile.am new file mode 100644 index 000000000..178cc4510 --- /dev/null +++ b/tests/regression/ust/blocking/Makefile.am @@ -0,0 +1,16 @@ +noinst_SCRIPTS = test_blocking +EXTRA_DIST = test_blocking + +all-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + cp -f $(srcdir)/$$script $(builddir); \ + done; \ + fi + +clean-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + rm -f $(builddir)/$$script; \ + done; \ + fi 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 -- 2.34.1