X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Futils%2Futils.sh;h=d65662e4265a8fc05c429549d8097c231bd39ba3;hp=a8b9b3bdf5e76718f0aca85991868809a3ed9eda;hb=f5fb86c1254b785eee8caf87cb996d33eda0ede9;hpb=f3630ec4ac23f0bc4f2e9b438310eadb5d3ebcb4 diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh index a8b9b3bdf..d65662e42 100644 --- a/tests/utils/utils.sh +++ b/tests/utils/utils.sh @@ -1,17 +1,7 @@ -# Copyright (C) - 2012 David Goulet +# 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. +# SPDX-License-Identifier: LGPL-2.1-only # -# 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 SESSIOND_BIN="lttng-sessiond" SESSIOND_MATCH=".*lttng-sess.*" @@ -46,7 +36,7 @@ export LTTNG_SESSIOND_PATH="/bin/true" source $TESTDIR/utils/tap/tap.sh -if [ -z $LTTNG_TEST_TEARDOWN_TIMEOUT ]; then +if [ -z ${LTTNG_TEST_TEARDOWN_TIMEOUT+x} ]; then LTTNG_TEST_TEARDOWN_TIMEOUT=60 fi @@ -149,10 +139,19 @@ function conf_proc_count() # Bail out on failure function validate_lttng_modules_present () { + # Check for loadable modules. modprobe -n lttng-tracer 2>/dev/null - if [ $? -ne 0 ]; then - BAIL_OUT "LTTng modules not detected." + if [ $? -eq 0 ]; then + return 0 + fi + + # Check for builtin modules. + ls /proc/lttng > /dev/null 2>&1 + if [ $? -eq 0 ]; then + return 0 fi + + BAIL_OUT "LTTng modules not detected." } function enable_kernel_lttng_event @@ -331,9 +330,9 @@ function lttng_enable_kernel_channel() local expected_to_fail=$2 local sess_name=$3 local channel_name=$4 - local opt=$5 + local opts="${@:5}" - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -k $channel_name -s $sess_name $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -k $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ret=$? if [[ $expected_to_fail -eq "1" ]]; then test "$ret" -ne "0" @@ -402,7 +401,7 @@ function start_lttng_relayd_opt() DIR=$(readlink -f "$TESTDIR") - if [ -z $(pgrep $RELAYD_MATCH) ]; then + if [ -z $(pgrep -f $RELAYD_MATCH) ]; then # shellcheck disable=SC2086 $DIR/../src/bin/lttng-relayd/$RELAYD_BIN $process_mode $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST #$DIR/../src/bin/lttng-relayd/$RELAYD_BIN $opt -vvv >>/tmp/relayd.log 2>&1 & @@ -451,7 +450,7 @@ function stop_lttng_relayd_opt() local retval=0 local pids= - pids=$(pgrep "$RELAYD_MATCH") + pids=$(pgrep -f "$RELAYD_MATCH") if [ -z "$pids" ]; then if [ "$withtap" -eq "1" ]; then pass "No relay daemon to kill" @@ -470,7 +469,7 @@ function stop_lttng_relayd_opt() else out=1 while [ -n "$out" ]; do - out=$(pgrep "$RELAYD_MATCH") + out=$(pgrep -f "$RELAYD_MATCH") if [ -n "$dtimeleft_s" ]; then if [ $dtimeleft_s -lt 0 ]; then out= @@ -548,7 +547,7 @@ function start_lttng_sessiond_opt() : "${LTTNG_SESSION_CONFIG_XSD_PATH="${DIR}/../src/common/config/"}" export LTTNG_SESSION_CONFIG_XSD_PATH - if [ -z "$(pgrep "${SESSIOND_MATCH}")" ]; then + if [ -z "$(pgrep -f "${SESSIOND_MATCH}")" ]; then # Have a load path ? if [ -n "$load_path" ]; then # shellcheck disable=SC2086 @@ -600,10 +599,10 @@ function stop_lttng_sessiond_opt() local retval=0 local runas_pids= - runas_pids=$(pgrep "$RUNAS_MATCH") + runas_pids=$(pgrep -f "$RUNAS_MATCH") local pids= - pids=$(pgrep "$SESSIOND_MATCH") + pids=$(pgrep -f "$SESSIOND_MATCH") if [ -n "$runas_pids" ]; then pids="$pids $runas_pids" @@ -627,7 +626,7 @@ function stop_lttng_sessiond_opt() else out=1 while [ -n "$out" ]; do - out=$(pgrep "${SESSIOND_MATCH}") + out=$(pgrep -f "${SESSIOND_MATCH}") if [ -n "$dtimeleft_s" ]; then if [ $dtimeleft_s -lt 0 ]; then out= @@ -639,7 +638,7 @@ function stop_lttng_sessiond_opt() done out=1 while [ -n "$out" ]; do - out=$(pgrep "$CONSUMERD_MATCH") + out=$(pgrep -f "$CONSUMERD_MATCH") if [ -n "$dtimeleft_s" ]; then if [ $dtimeleft_s -lt 0 ]; then out= @@ -693,7 +692,7 @@ function sigstop_lttng_sessiond_opt() return fi - PID_SESSIOND="$(pgrep "${SESSIOND_MATCH}") $(pgrep "$RUNAS_MATCH")" + PID_SESSIOND="$(pgrep -f "${SESSIOND_MATCH}") $(pgrep -f "$RUNAS_MATCH")" if [ "$withtap" -eq "1" ]; then diag "Sending SIGSTOP to lt-$SESSIOND_BIN and $SESSIOND_BIN pids: $(echo "$PID_SESSIOND" | tr '\n' ' ')" @@ -707,7 +706,7 @@ function sigstop_lttng_sessiond_opt() else out=1 while [ $out -ne 0 ]; do - pid="$(pgrep "$SESSIOND_MATCH")" + pid="$(pgrep -f "$SESSIOND_MATCH")" # Wait until state becomes stopped for session # daemon(s). @@ -755,7 +754,7 @@ function stop_lttng_consumerd_opt() local retval=0 - PID_CONSUMERD="$(pgrep "$CONSUMERD_MATCH")" + PID_CONSUMERD="$(pgrep -f "$CONSUMERD_MATCH")" if [ -z "$PID_CONSUMERD" ]; then if [ "$withtap" -eq "1" ]; then @@ -775,7 +774,7 @@ function stop_lttng_consumerd_opt() else out=1 while [ $out -ne 0 ]; do - pid="$(pgrep "$CONSUMERD_MATCH")" + pid="$(pgrep -f "$CONSUMERD_MATCH")" # If consumerds are still present check their status. # A zombie status qualifies the consumerd as *killed* @@ -822,7 +821,7 @@ function sigstop_lttng_consumerd_opt() local withtap=$1 local signal=SIGSTOP - PID_CONSUMERD="$(pgrep "$CONSUMERD_MATCH")" + PID_CONSUMERD="$(pgrep -f "$CONSUMERD_MATCH")" diag "Sending SIGSTOP to $CONSUMERD_BIN pids: $(echo "$PID_CONSUMERD" | tr '\n' ' ')" @@ -838,7 +837,7 @@ function sigstop_lttng_consumerd_opt() else out=1 while [ $out -ne 0 ]; do - pid="$(pgrep "$CONSUMERD_MATCH")" + pid="$(pgrep -f "$CONSUMERD_MATCH")" # Wait until state becomes stopped for all # consumers. @@ -946,9 +945,9 @@ function enable_ust_lttng_channel () local expected_to_fail=$2 local sess_name=$3 local channel_name=$4 - local opt=$5 + local opts="${@:5}" - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name $opt 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ret=$? if [[ $expected_to_fail -eq "1" ]]; then test "$ret" -ne "0" @@ -1180,8 +1179,16 @@ function enable_ust_lttng_event_filter() local sess_name="$1" local event_name="$2" local filter="$3" + local channel_name=$4 - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + if [ -z $channel_name ]; then + # default channel if none specified + chan="" + else + chan="-c $channel_name" + fi + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ok $? "Enable event $event_name with filtering for session $sess_name" } @@ -1369,14 +1376,15 @@ function lttng_snapshot_add_output () local expected_to_fail=$1 local sess_name=$2 local trace_path=$3 + local opts=$4 - $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output -s $sess_name $trace_path 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output -s $sess_name $trace_path $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ret=$? if [[ $expected_to_fail -eq 1 ]]; then test "$ret" -ne "0" - ok $? "Added snapshot output file://$trace_path failed as expected" + ok $? "Added snapshot output $trace_path failed as expected" else - ok $ret "Added snapshot output file://$trace_path" + ok $ret "Added snapshot output $trace_path" fi } @@ -1419,7 +1427,6 @@ function lttng_snapshot_del_output_fail () function lttng_snapshot_record () { local sess_name=$1 - local trace_path=$2 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s $sess_name $trace_path 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ok $? "Snapshot recorded" @@ -1468,8 +1475,9 @@ function lttng_load_fail() function lttng_track() { - local expected_to_fail=$1 - local opts=$2 + local expected_to_fail="$1" + shift 1 + local opts="$@" $TESTDIR/../src/bin/lttng/$LTTNG_BIN track $opts >$OUTPUT_DEST ret=$? if [[ $expected_to_fail -eq "1" ]]; then @@ -1492,8 +1500,9 @@ function lttng_track_fail() function lttng_untrack() { - local expected_to_fail=$1 - local opts=$2 + local expected_to_fail="$1" + shift 1 + local opts="$@" $TESTDIR/../src/bin/lttng/$LTTNG_BIN untrack $opts >$OUTPUT_DEST ret=$? if [[ $expected_to_fail -eq "1" ]]; then @@ -1527,6 +1536,46 @@ function lttng_untrack_kernel_all_ok() ok $? "Lttng untrack all pid on the kernel domain" } +function lttng_track_ust_ok() +{ + lttng_track_ok -u "$@" +} + +function lttng_track_ust_fail() +{ + lttng_track_fail -u "$@" +} + +function lttng_track_kernel_ok() +{ + lttng_track_ok -k "$@" +} + +function lttng_track_kernel_fail() +{ + lttng_track_fail -k "$@" +} + +function lttng_untrack_ust_ok() +{ + lttng_untrack_ok -u "$@" +} + +function lttng_untrack_ust_fail() +{ + lttng_untrack_fail -u "$@" +} + +function lttng_untrack_kernel_ok() +{ + lttng_untrack_ok -k "$@" +} + +function lttng_untrack_kernel_fail() +{ + lttng_untrack_fail -k "$@" +} + function lttng_add_context_list() { $TESTDIR/../src/bin/lttng/$LTTNG_BIN add-context --list 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST @@ -1572,6 +1621,32 @@ function add_context_kernel_fail() add_context_lttng 1 -k "$@" } +function wait_live_trace_ready () +{ + local url=$1 + local zero_client_match=0 + + diag "Waiting for live trace at url: $url" + while [ $zero_client_match -eq 0 ]; do + zero_client_match=$($BABELTRACE_BIN -i lttng-live $url | grep "0 client(s) connected" | wc -l) + sleep 0.5 + done + pass "Waiting for live trace at url: $url" +} + +function wait_live_viewer_connect () +{ + local url=$1 + local one_client_match=0 + + diag "Waiting for live viewers on url: $url" + while [ $one_client_match -eq 0 ]; do + one_client_match=$($BABELTRACE_BIN -i lttng-live $url | grep "1 client(s) connected" | wc -l) + sleep 0.5 + done + pass "Waiting for live viewers on url: $url" +} + function validate_metadata_event () { local event_name=$1 @@ -1689,6 +1764,36 @@ function validate_trace_count ok $? "Read a total of $cnt events, expected $expected_count" } +function validate_trace_count_range_incl_min_excl_max +{ + local event_name=$1 + local trace_path=$2 + local expected_min=$3 + local expected_max=$4 + + which $BABELTRACE_BIN >/dev/null + if [ $? -ne 0 ]; then + skip 0 "Babeltrace binary not found. Skipping trace validation" + fi + + cnt=0 + OLDIFS=$IFS + IFS="," + for i in $event_name; do + traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l) + if [ "$traced" -ge $expected_min ]; then + pass "Validate trace for event $i, $traced events" + else + fail "Validate trace for event $i" + diag "Found $traced occurences of $i" + fi + cnt=$(($cnt + $traced)) + done + IFS=$OLDIFS + test $cnt -lt $expected_max + ok $? "Read a total of $cnt events, expected between [$expected_min, $expected_max[" +} + function trace_first_line { local trace_path=$1 @@ -1768,6 +1873,33 @@ function validate_trace_empty() return $ret } +function validate_directory_empty () +{ + local trace_path="$1" + + # Do not double quote `$trace_path` below as we want wildcards to be + # expanded. + files="$(ls -A $trace_path)" + ret=$? + if [ $ret -ne 0 ]; then + fail "Failed to list content of directory \"$trace_path\"" + return $ret + fi + + nb_files="$(echo -n "$files" | wc -l)" + ok $nb_files "Directory \"$trace_path\" is empty" +} + +function validate_trace_session_ust_empty() +{ + validate_directory_empty "$1"/ust +} + +function validate_trace_session_kernel_empty() +{ + validate_trace_empty "$1"/kernel +} + function regenerate_metadata () { local expected_to_fail=$1 @@ -1903,3 +2035,34 @@ function lttng_enable_rotation_size_fail () { lttng_enable_rotation_size 1 $@ } + +function lttng_clear_session () +{ + local expected_to_fail=$1 + local sess_name=$2 + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + ret=$? + if [[ $expected_to_fail -eq "1" ]]; then + test "$ret" -ne "0" + ok $? "Expected fail on clear session $sess_name" + else + ok $ret "Clear session $sess_name" + fi +} + +function lttng_clear_session_ok () +{ + lttng_clear_session 0 $@ +} + +function lttng_clear_session_fail () +{ + lttng_clear_session 1 $@ +} + +function lttng_clear_all () +{ + $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + ok $? "Clear all lttng sessions" +}