From d946d662cade27143f8068d25a712270bcbd1240 Mon Sep 17 00:00:00 2001 From: Christian Babeux Date: Tue, 14 May 2013 17:53:46 -0400 Subject: [PATCH] Tests: Add the tracefile count test This test validate the newly introduced tracefile count feature. In order to so, we enable a channel with the appropriate limits in overwrite mode. The later constraint is to ensure that at least the last few events are properly recorded and that we can validate that they are present in the resulting trace (with the help of babeltrace and babelstats). We also validate that the tracefile count (per stream) in the trace folder is conform to the one passed on the command line. Signed-off-by: Christian Babeux Signed-off-by: David Goulet --- configure.ac | 1 + tests/fast_regression | 1 + tests/long_regression | 1 + tests/regression/tools/Makefile.am | 2 +- .../tools/tracefile-limits/Makefile.am | 2 + .../tracefile-limits/test_tracefile_count | 174 ++++++++++++++++++ 6 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 tests/regression/tools/tracefile-limits/Makefile.am create mode 100755 tests/regression/tools/tracefile-limits/test_tracefile_count diff --git a/configure.ac b/configure.ac index 6f19e570b..d5733b3b4 100644 --- a/configure.ac +++ b/configure.ac @@ -332,6 +332,7 @@ AC_CONFIG_FILES([ tests/regression/tools/streaming/Makefile tests/regression/tools/filtering/Makefile tests/regression/tools/health/Makefile + tests/regression/tools/tracefile-limits/Makefile tests/regression/ust/Makefile tests/regression/ust/nprocesses/Makefile tests/regression/ust/high-throughput/Makefile diff --git a/tests/fast_regression b/tests/fast_regression index e6a883be7..db26f1c09 100644 --- a/tests/fast_regression +++ b/tests/fast_regression @@ -5,6 +5,7 @@ regression/tools/health/test_thread_exit regression/tools/health/test_thread_stall regression/tools/health/test_tp_fail regression/tools/streaming/test_ust +regression/tools/tracefile-limits/test_tracefile_count regression/ust/before-after/test_before_after regression/ust/buffers-uid/test_buffers_uid regression/ust/periodical-metadata-flush/test_periodical_metadata_flush diff --git a/tests/long_regression b/tests/long_regression index c198178ec..3780bd402 100644 --- a/tests/long_regression +++ b/tests/long_regression @@ -5,6 +5,7 @@ regression/tools/health/test_thread_exit regression/tools/health/test_thread_stall regression/tools/health/test_tp_fail regression/tools/streaming/test_ust +regression/tools/tracefile-limits/test_tracefile_count regression/ust/before-after/test_before_after regression/ust/buffers-uid/test_buffers_uid regression/ust/high-throughput/test_high_throughput diff --git a/tests/regression/tools/Makefile.am b/tests/regression/tools/Makefile.am index eef793a42..1b256d78e 100644 --- a/tests/regression/tools/Makefile.am +++ b/tests/regression/tools/Makefile.am @@ -1 +1 @@ -SUBDIRS = streaming filtering health +SUBDIRS = streaming filtering health tracefile-limits diff --git a/tests/regression/tools/tracefile-limits/Makefile.am b/tests/regression/tools/tracefile-limits/Makefile.am new file mode 100644 index 000000000..441d2bdde --- /dev/null +++ b/tests/regression/tools/tracefile-limits/Makefile.am @@ -0,0 +1,2 @@ +noinst_SCRIPTS = test_tracefile_count +EXTRA_DIST = test_tracefile_count diff --git a/tests/regression/tools/tracefile-limits/test_tracefile_count b/tests/regression/tools/tracefile-limits/test_tracefile_count new file mode 100755 index 000000000..41b89f005 --- /dev/null +++ b/tests/regression/tools/tracefile-limits/test_tracefile_count @@ -0,0 +1,174 @@ +#!/bin/bash +# +# Copyright (C) - 2013 Christian Babeux +# +# 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="Tracefile count limits" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. + +TESTAPP_PATH="$TESTDIR/utils/testapp" +TESTAPP_NAME="gen-ust-events" +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" + +STATS_BIN="$TESTDIR/utils/babelstats.pl" +NUM_TESTS=146 + +source $TESTDIR/utils/utils.sh + +if [ ! -x "$TESTAPP_BIN" ]; then + BAIL_OUT "No UST events binary detected." +fi + +function wait_apps +{ + while [ -n "$(pidof $TESTAPP_NAME)" ]; do + sleep 0.5 + done + pass "Wait for applications to end" +} + +function enable_lttng_channel_count_limit () +{ + sess_name="$1" + channel_name="$2" + tracefile_count_limit="$3" + + test_name="Enable channel $channel_name " + test_name+="for session $sess_name: " + test_name+="$tracefile_count_limit tracefiles" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ + -u $channel_name -s $sess_name \ + -C 4096 -W $tracefile_count_limit \ + --overwrite >/dev/null 2>&1 + + ok $? "$test_name" +} + +function enable_ust_lttng_event_per_channel () +{ + sess_name="$1" + event_name="$2" + channel_name="$3" + + test_name="Enable event $event_name " + test_name+="for session $sess_name " + test_name+="in channel $channel_name" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" \ + -s $sess_name -u -c $channel_name >/dev/null 2>&1 + + ok $? "$test_name" +} + +function validate_min_max +{ + stats="$1" + field="$2" + expected_min="$3" + expected_max="$4" + + echo $stats | grep -q -E "$field $expected_min $expected_max" + return $? +} + +function validate_file_count +{ + path="$1" + file_pattern="$2" + expected_max_count="$3" + + count=`find $path -name "$file_pattern" -type f | wc -l` + + if [ "$count" -gt "$expected_max_count" ]; then + fail "Validate file count: $file_pattern" + diag "File count: $count expected: $expected_max_count" + else + pass "Validate file count: $file_pattern" + fi +} + +function test_tracefile_count_limit () +{ + count_limit="$1" + trace_path=$(mktemp -d) + session_name=$(randstring 16 0) + channel_name="channel" + event_name="tp:tptest" + num_iter=1000 + expected_max=$(($num_iter - 1)) + + diag "Test tracefile count limit : $count_limit tracefiles" + + create_lttng_session $session_name $trace_path + + enable_lttng_channel_count_limit \ + $session_name $channel_name $count_limit + + enable_ust_lttng_event_per_channel \ + $session_name $event_name $channel_name + + start_lttng_tracing $session_name + + $TESTAPP_BIN $num_iter >/dev/null 2>&1 & + + wait_apps + + stop_lttng_tracing $session_name + + destroy_lttng_session $session_name + + # Validate tracing dir + + num_cpu=`nproc` + + for cpuno in $(seq 0 $(($num_cpu - 1))) + do + validate_file_count \ + $trace_path "${channel_name}_${cpuno}_*" $count_limit + done + + # Validate tracing data + + stats=`babeltrace $trace_path | $STATS_BIN --tracepoint $event_name` + + validate_min_max "$stats" "intfield" "[0-9]+" "$expected_max" + ok $? "Trace validation - intfield" + + validate_min_max "$stats" "netintfield" "[0-9]+" "$expected_max" + ok $? "Trace validation - netintfield" + + validate_min_max "$stats" "longfield" "[0-9]+" "$expected_max" + ok $? "Trace validation - longfield" + + rm -rf $trace_path +} + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +start_lttng_sessiond + +LIMITS=("1" "2" "4" "8" "10" "16" "32" "64") + +for limit in ${LIMITS[@]}; +do + test_tracefile_count_limit $limit +done + +stop_lttng_sessiond -- 2.34.1