X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Fregression%2Fust%2Fbuffers-uid%2Ftest_buffers_uid;fp=tests%2Fregression%2Fust%2Fbuffers-uid%2Ftest_buffers_uid;h=a97a90aa830ac9a24595a0b4a44dbe2a965c2e1e;hp=0000000000000000000000000000000000000000;hb=7972aab22f74b18faa168c0482216a3dd711a075;hpb=45893984238b2e2c12fc0d84b90336c98a6d98c9 diff --git a/tests/regression/ust/buffers-uid/test_buffers_uid b/tests/regression/ust/buffers-uid/test_buffers_uid new file mode 100755 index 000000000..a97a90aa8 --- /dev/null +++ b/tests/regression/ust/buffers-uid/test_buffers_uid @@ -0,0 +1,242 @@ +#!/bin/bash +# +# Copyright (C) - 2012 David Goulet +# +# 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 tracer - Tracing with per UID buffers" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. +NR_ITER=100 +SESSION_NAME="buffers-uid" +EVENT_NAME="ust_gen_nevents:tptest" +BIN_NAME="gen-nevents" +NUM_TESTS=58 + +source $TESTDIR/utils/utils.sh + +print_test_banner "$TEST_DESC" + +if [ ! -x "$CURDIR/gen-nevents" ]; then + BAIL_OUT "No UST nevents binary detected." +fi + +# MUST set TESTDIR before calling those functions + +function enable_channel_per_uid() +{ + sess_name=$1 + channel_name=$2 + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name >/dev/null 2>&1 + ok $? "Enable channel $channel_name per UID for session $sess_name" +} + +function wait_apps +{ + diag "Waiting for applications to end..." + while [ -n "$(pidof $BIN_NAME)" ]; do + sleep 1 + done +} + +test_after_multiple_apps() { + local out + local i + + diag "Start multiple applications AFTER tracing is started" + + # BEFORE application is spawned + create_lttng_session $SESSION_NAME $TRACE_PATH + enable_channel_per_uid $SESSION_NAME "channel0" + enable_ust_lttng_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing $SESSION_NAME + + for i in `seq 1 5`; do + ./$CURDIR/$BIN_NAME $NR_ITER & >/dev/null 2>&1 + ok $? "Start application $i for tracing" + done + wait_apps + + stop_lttng_tracing $SESSION_NAME + destroy_lttng_session $SESSION_NAME + + trace_matches $EVENT_NAME $[NR_ITER * 5] $TRACE_PATH + + return $? +} + +test_before_multiple_apps() { + local out + local i + + diag "Start multiple applications BEFORE tracing is started" + + for i in `seq 1 5`; do + ./$CURDIR/$BIN_NAME $NR_ITER & >/dev/null 2>&1 + ok $? "Start application $i for tracing" + done + + # BEFORE application is spawned + create_lttng_session $SESSION_NAME $TRACE_PATH + enable_channel_per_uid $SESSION_NAME "channel0" + enable_ust_lttng_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing $SESSION_NAME + + # At least hit one event + sleep 2 + + stop_lttng_tracing $SESSION_NAME + destroy_lttng_session $SESSION_NAME + + out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l) + if [ $out -eq 0 ]; then + fail "Trace validation" + diag "No event(s) found. We are supposed to have at least one." + out=1 + else + pass "Trace validation" + diag "Found $out event(s). Coherent." + out=0 + fi + + wait_apps + + return $out +} + +test_after_app() { + local out + + diag "Start application AFTER tracing is started" + + # BEFORE application is spawned + create_lttng_session $SESSION_NAME $TRACE_PATH + enable_channel_per_uid $SESSION_NAME "channel0" + enable_ust_lttng_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing $SESSION_NAME + + ./$CURDIR/$BIN_NAME $NR_ITER + ok $? "Start application to trace" + + stop_lttng_tracing $SESSION_NAME + destroy_lttng_session $SESSION_NAME + + trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH + + return $? +} + +test_before_app() { + local out + + diag "Start application BEFORE tracing is started" + + ./$CURDIR/$BIN_NAME $NR_ITER & + ok $? "Start application to trace" + + # BEFORE application is spawned + create_lttng_session $SESSION_NAME $TRACE_PATH + enable_channel_per_uid $SESSION_NAME "channel0" + enable_ust_lttng_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing $SESSION_NAME + + # At least hit one event + sleep 2 + + stop_lttng_tracing $SESSION_NAME + destroy_lttng_session $SESSION_NAME + + out=$(babeltrace $TRACE_PATH | grep $EVENT_NAME | wc -l) + if [ $out -eq 0 ]; then + fail "Trace validation" + diag "No event(s) found. We are supposed to have at least one." + out=1 + else + pass "Trace validation" + diag "Found $out event(s). Coherent." + out=0 + fi + + wait_apps + + return $out +} + +test_multiple_channels() { + local out + + diag "Start with multiple channels" + + # BEFORE application is spawned + create_lttng_session $SESSION_NAME $TRACE_PATH + enable_channel_per_uid $SESSION_NAME "channel0" + enable_channel_per_uid $SESSION_NAME "channel1" + enable_channel_per_uid $SESSION_NAME "channel2" + enable_channel_per_uid $SESSION_NAME "channel3" + enable_channel_per_uid $SESSION_NAME "channel4" + # Enable event in all channels. + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel0 -s $SESSION_NAME -u >/dev/null 2>&1 + ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel0" + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel1 -s $SESSION_NAME -u >/dev/null 2>&1 + ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel1" + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel2 -s $SESSION_NAME -u >/dev/null 2>&1 + ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel2" + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel3 -s $SESSION_NAME -u >/dev/null 2>&1 + ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel3" + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $EVENT_NAME -c channel4 -s $SESSION_NAME -u >/dev/null 2>&1 + ok $? "Enable event $EVENT_NAME for session $SESSION_NAME in channel4" + start_lttng_tracing $SESSION_NAME + + ./$CURDIR/$BIN_NAME $NR_ITER + ok $? "Start application to trace" + + stop_lttng_tracing $SESSION_NAME + trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH + out=$? + + destroy_lttng_session $SESSION_NAME + + return $out +} + +# MUST set TESTDIR before calling those functions +plan_tests $NUM_TESTS + +TESTS=( + "test_before_app" + "test_after_app" + "test_after_multiple_apps" + "test_before_multiple_apps" + "test_multiple_channels" +) + +TEST_COUNT=${#TESTS[@]} +i=0 + +start_lttng_sessiond + +while [ $i -lt $TEST_COUNT ]; do + TRACE_PATH=$(mktemp -d) + ${TESTS[$i]} + if [ $? -ne 0 ]; then + stop_lttng_sessiond + exit 1 + fi + + rm -rf $TRACE_PATH + let "i++" +done + +stop_lttng_sessiond