From eae79fb914fa4f4aa9d09b32f08723f74dcb9c71 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 18 May 2016 14:04:18 -0400 Subject: [PATCH] test: kernel tracing destroy flush behavior with tracefile rotation Signed-off-by: Mathieu Desnoyers --- tests/regression/kernel/Makefile.am | 3 +- .../kernel/test_rotation_destroy_flush | 153 ++++++++++++++++++ tests/root_regression | 1 + 3 files changed, 156 insertions(+), 1 deletion(-) create mode 100755 tests/regression/kernel/test_rotation_destroy_flush diff --git a/tests/regression/kernel/Makefile.am b/tests/regression/kernel/Makefile.am index ca73ed43e..a8c397a85 100644 --- a/tests/regression/kernel/Makefile.am +++ b/tests/regression/kernel/Makefile.am @@ -1,4 +1,5 @@ -EXTRA_DIST = test_event_basic test_all_events test_syscall test_clock_override +EXTRA_DIST = test_event_basic test_all_events test_syscall \ + test_clock_override test_rotation_destroy_flush all-local: @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ diff --git a/tests/regression/kernel/test_rotation_destroy_flush b/tests/regression/kernel/test_rotation_destroy_flush new file mode 100755 index 000000000..0b0b0ca75 --- /dev/null +++ b/tests/regression/kernel/test_rotation_destroy_flush @@ -0,0 +1,153 @@ +#!/bin/bash +# +# Copyright (C) - 2013 Christian Babeux +# Copyright (C) - 2014, 2016 Mathieu Desnoyers +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License, version 2 only, as +# published by the Free Software Foundation. +# +# This program 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 General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +TEST_DESC="Kernel tracer - Rotation destroy flush" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../.. +SESSION_NAME="rotation_destroy_flush" + +NR_ITER=10 +NUM_TESTS=$((13*$NR_ITER)) +EVENT_NAME="lttng_test_filter_event" +CHANNEL_NAME="testchan" +PAGE_SIZE=$(getconf PAGE_SIZE) +SIZE_LIMIT=$PAGE_SIZE + +TESTCMD="echo -n 10000 > /proc/lttng-test-filter-event" + +# Ensure the daemons invoke abort on error. +export LTTNG_ABORT_ON_ERROR=1 + +source $TESTDIR/utils/utils.sh + +function signal_cleanup() +{ + diag "*** Exiting ***" + rmmod lttng-test + stop_lttng_sessiond + exit 1 +} + +function enable_kernel_lttng_channel_size_limit () +{ + sess_name="$1" + channel_name="$2" + tracefile_size_limit="$3" + + test_name="Enable channel $channel_name " + test_name+="for session $sess_name: " + test_name+="$tracefile_size_limit bytes tracefile limit" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ + -k $channel_name -s $sess_name \ + -C $tracefile_size_limit >/dev/null 2>&1 + + ok $? "$test_name" +} + +function enable_kernel_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 -k -c $channel_name >/dev/null 2>&1 + + ok $? "$test_name" +} + +function test_rotation_destroy_flush_single() +{ + start_lttng_sessiond + modprobe lttng-test + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_kernel_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_kernel_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + eval ${TESTCMD} + # stop and destroy + stop_lttng_tracing_ok $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_kernel_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_kernel_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + eval ${TESTCMD} + # destroy only + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + rmmod lttng-test + stop_lttng_sessiond +} + +function test_rotation_destroy_flush() +{ + for a in $(seq 1 ${NR_ITER}); do + diag "Iteration ${a}/${NR_ITER}" + test_rotation_destroy_flush_single + done +} + +# MUST set TESTDIR before calling those functions +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +TESTS=( + "test_rotation_destroy_flush" +) + +TEST_COUNT=${#TESTS[@]} +i=0 + +if [ "$(id -u)" == "0" ]; then + isroot=1 +else + isroot=0 +fi + +skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || +{ + trap signal_cleanup SIGTERM SIGINT + + while [ "$i" -lt "$TEST_COUNT" ]; do + + TRACE_PATH=$(mktemp -d) + + # Execute test + ${TESTS[$i]} + + let "i++" + done +} diff --git a/tests/root_regression b/tests/root_regression index 4655c091c..2981dc6d4 100644 --- a/tests/root_regression +++ b/tests/root_regression @@ -2,6 +2,7 @@ regression/kernel/test_all_events regression/kernel/test_event_basic regression/kernel/test_syscall regression/kernel/test_clock_override +regression/kernel/test_rotation_destroy_flush regression/tools/live/test_kernel regression/tools/live/test_lttng_kernel regression/tools/streaming/test_high_throughput_limits -- 2.34.1