From 312dabc3ec56987e3c92ecf7cdfb037abe1ec4fb Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Julien Date: Wed, 2 Jul 2014 10:12:02 -0400 Subject: [PATCH] Mi test: Refactoring and multiple test suites Test for: destroy command basic list command enable_channel disable_channel --- tests/fast_regression | 2 +- tests/regression/tools/mi/Makefile.am | 2 +- tests/regression/tools/mi/test_mi | 294 ++++++++++++++++++++++ tests/regression/tools/mi/test_mi_version | 78 ------ tests/utils/utils.sh | 22 +- 5 files changed, 314 insertions(+), 84 deletions(-) create mode 100755 tests/regression/tools/mi/test_mi delete mode 100755 tests/regression/tools/mi/test_mi_version diff --git a/tests/fast_regression b/tests/fast_regression index 6fae89d03..638c82f0e 100644 --- a/tests/fast_regression +++ b/tests/fast_regression @@ -13,7 +13,7 @@ regression/tools/snapshots/test_ust_fast regression/tools/snapshots/test_ust_streaming regression/tools/save-load/test_save regression/tools/save-load/test_load -regression/tools/mi/test_mi_version +regression/tools/mi/test_mi regression/ust/before-after/test_before_after regression/ust/buffers-pid/test_buffers_pid regression/ust/multi-session/test_multi_session diff --git a/tests/regression/tools/mi/Makefile.am b/tests/regression/tools/mi/Makefile.am index 7a54c3487..5586461a0 100644 --- a/tests/regression/tools/mi/Makefile.am +++ b/tests/regression/tools/mi/Makefile.am @@ -9,7 +9,7 @@ extract_xml_SOURCES = extract_xml.c extract_xml_CPPFLAGS = $(XML_CPPFLAGS) $(AM_CPPFLAGS) extract_xml_LDADD = $(XML_LIBS) -noinst_SCRIPTS = test_mi_version +noinst_SCRIPTS = test_mi EXTRA_DIST = all-local: diff --git a/tests/regression/tools/mi/test_mi b/tests/regression/tools/mi/test_mi new file mode 100755 index 000000000..dc0990e31 --- /dev/null +++ b/tests/regression/tools/mi/test_mi @@ -0,0 +1,294 @@ +#!/bin/bash +# +# Copyright (C) - 2014 Jonathan Rajotte +# +# 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="Machine interface testing" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../../ +XSD_PATH=$TESTDIR/../src/common/mi_lttng.xsd +SESSIOND_BIN="lttng-sessiond" +RELAYD_BIN="lttng-relayd" + + +#Temp file output +#OUTPUT_DIR=$(mktemp -d) +OUTPUT_DIR="/tmp/test" +OUTPUT_FILE="default.xml" + +#Path to custom xml utilities +XML_VALIDATE="$CURDIR/validate_xml $XSD_PATH" +XML_EXTRACT="$CURDIR/extract_xml" + +XPATH_COMMAND_SUCCESS="/command/success/text()" +XPATH_SESSION_NAME="/command/output/sessions/session/name/text()" +XPATH_ENABLE_CHANNEL_NAME="/command/output/channels/channel/name/text()" + +DEVNULL=/dev/null 2>&1 + +DIR=$(readlink -f $TESTDIR) + +NUM_TESTS=60 + +source $TESTDIR/utils/utils.sh + +#Overwrite the lttng_bin to get mi output +LTTNG_BIN="lttng --mi xml" + +#Global devlaration for simplification +LTTNG=$TESTDIR/../src/bin/lttng/$LTTNG_BIN + +#Overwrite the default output for utils.sh command + +#MUST set TESTDIR before calling those functions +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +function extract_xml () +{ + local xml=$1 + local xpath=$2 + local __result=$3 + local output=$($XML_EXTRACT $xml $xpath) + ok $? "Extraction of xpath $xpath" + eval $__result="'$output'" +} + +# Arg1 is path to xml file +# Arg2: +# is true if we expected the success element to be false +# else +# passe false + +function is_command_success () +{ + local xml=$1 + local expect_false=$2 + + local xpath=$XPATH_COMMAND_SUCCESS + + #Extract the success element + #expect false + extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result + if [[ $expect_false ]]; then + if [[ $result ]]; then + pass "Mi test: $xml command failed as expected" + else + fail "Mi test: $xml command did not fail as expected" + fi + else + if [[ $result ]]; then + fail "Mi test: $xml command failed" + else + pass "Mi test: $xml command success" + fi + fi +} + +function mi_print_version () +{ + local opt=$2 + local output_path=$1 + + $LTTNG version $opt > $1 + ok $? "MI test: Lttng version" + +} + +function test_version () +{ + OUTPUT_FILE="version.xml" + OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE + mi_print_version $OUTPUT_DEST + $XML_VALIDATE $OUTPUT_DEST + ok $? "MI test: Version xsd validation" +} + +function test_create_session () +{ + local session_name="testSession" + + OUTPUT_FILE="create_session.xml" + OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE + create_lttng_session $session_name $OUTPUT_DIR + $XML_VALIDATE $OUTPUT_DEST + ok $? "MI test: create session xsd validation" + + #try to recreate a session. Expecting it to fail + create_lttng_session $session_name $OUTPUT_DIR true + $XML_VALIDATE $OUTPUT_DEST + ok $? "MI test: expecting fail create session xsd validation" + is_command_success $OUTPUT_DEST true + + OUTPUT_DEST=$DEVNULL + destroy_lttng_session $session_name +} + +function test_destroy_session () +{ + local session_name=( + "testSession1" + "testSession2" + "testSession3") + + OUTPUT_FILE="destroy_session.xml" + + #Test build up + OUTPUT_DEST=$DEVNULL + for (( i = 0; i < 3; i++ )); do + create_lttng_session ${session_name[$i]} $OUTPUT_DIR + done + + OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE + destroy_lttng_session ${session_name[0]} + $XML_VALIDATE $OUTPUT_DEST + ok $? "MI test: destroy session ${session_name[0]} xsd validation" + + #Verify that we destroyed the good session + extract_xml $OUTPUT_DEST $XPATH_SESSION_NAME result + if [[ "$result" == "${session_name[0]}" ]]; then + ok 0 "Mi test: delete by name" + else + ok 1 "Mi test: we deleted the wrong session" + fi + + #Destroy all and count:should be 2 + destroy_lttng_sessions + $XML_VALIDATE $OUTPUT_DEST + ok $? "MI test: destroy all session xsd validation" + + #Verify that we destroyed 2 sessions + extract_xml $OUTPUT_DEST $XPATH_SESSION_NAME result + num=$(echo "$result" | wc -l) + test "$num" -eq "2" + ok $? "Mi test: $num / 2 sessions discovered" +} + +function test_list_sessions () +{ + local session_name=( + "testSession1" + "testSession2" + "testSession3") + + OUTPUT_FILE="list_sessions.xml" + + #Test buid up + OUTPUT_DEST=$DEVNULL + for (( i = 0; i < 3; i++ )); do + create_lttng_session ${session_name[$i]} $OUTPUT_DIR + done + + OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE + list_lttng_with_opts + $XML_VALIDATE $OUTPUT_DEST + ok $? "Mi test: list session xsd validation" + + #We should have 3 session + extract_xml $OUTPUT_DEST $XPATH_SESSION_NAME result + num=$(echo "$result" | wc -l) + test "$num" -eq "3" + ok $? "Mi test: $num / 3 sessions discovered" + + #Teardown + OUTPUT_DEST=$DEVNULL + destroy_lttng_sessions +} + +function test_ust_channel () +{ + local session_name="testsession" + local channel_name=("channelUst0" + "channelUst1" + "channelUst2") + + OUTPUT_FILE="ust_channel.xml" + + #Test buil up + OUTPUT_DEST=$DEVNULL + create_lttng_session $session_name $OUTPUT_DIR + + #Test the enable_channel command + OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE + enable_ust_lttng_channel $session_name ${channel_name[0]} + $XML_VALIDATE $OUTPUT_DEST + ok $? "Mi test: enable ust channel xsd validation" + is_command_success $OUTPUT_DIR false + + #Expect the command to fail + enable_ust_lttng_channel $session_name ${channel_name[0]} true + $XML_VALIDATE $OUTPUT_DEST + ok $? "Mi test: fail enable ust channel xsd validation" + is_command_success $OUTPUT_DIR true + + #Create two ust channel to test multiple disable + for (( i = 1; i < 3; i++ )); do + enable_ust_lttng_channel $session_name ${channel_name[$i]} + done + + #Test the disable_channel command + disable_ust_lttng_channel $session_name ${channel_name[0]} + $XML_VALIDATE $OUTPUT_DEST + ok $? "Mi test: disable ust channel xsd validation" + is_command_success $OUTPUT_DIR false + #Check that we delete the good channel + extract_xml $OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result + test "$result" == "${channel_name[0]}" + ok $? "MI test: ${channel_name[0]} disabled" + + #Test multiple disable_channel; + disable_ust_lttng_channel $session_name ${channel_name[1]},${channel_name[2]} + $XML_VALIDATE $OUTPUT_DEST + ok $? "Mi test: multiple disable ust channel xsd validation" + is_command_success $OUTPUT_DIR false + + #Make sure we have two disabled channel + extract_xml $OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result + local num=$(echo "$result" | wc -l) + test "$num" == "2" + ok $? "Mi test: disabled ust channel $num/2" + + #Teardown + OUTPUT_DEST=$DEVNULL + destroy_lttng_sessions + +} + +start_lttng_sessiond +TESTS=( + test_version + test_create_session + test_destroy_session + test_list_sessions + test_ust_channel +) + +echo $OUTPUT_DIR +for fct_test in ${TESTS[@]}; +do + + ${fct_test} + if [ $? -ne 0 ]; then + break; + fi + # Only delete if successful + #TO REMOVE comment + #rm -rf $OUTPUT_DIR +done + +OUTPUT_DEST=/dev/null 2>&1 +stop_lttng_sessiond diff --git a/tests/regression/tools/mi/test_mi_version b/tests/regression/tools/mi/test_mi_version deleted file mode 100755 index 1d89453bb..000000000 --- a/tests/regression/tools/mi/test_mi_version +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# -# Copyright (C) - 2014 Jonathan Rajotte -# -# 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="Mi test command version" - -CURDIR=$(dirname $0)/ -TESTDIR=$CURDIR/../../../ -XSD_PATH=$TESTDIR/../src/common/mi_lttng.xsd -SESSIOND_BIN="lttng-sessiond" -RELAYD_BIN="lttng-relayd" -LTTNG_BIN="lttng --mi xml" - -XML_VALIDATE="$CURDIR/validate_xml $XSD_PATH" - -LTTNG=$TESTDIR/../src/bin/lttng/$LTTNG_BIN - - -DIR=$(readlink -f $TESTDIR) - -NUM_TESTS=4 - -source $TESTDIR/utils/utils.sh - -# MUST set TESTDIR before calling those functions -plan_tests $NUM_TESTS - -print_test_banner "$TEST_DESC" - -function mi_print_version() -{ - local opt=$2 - local output_path=$1 - - $LTTNG version $opt > $output_path - ok $? "Machine Interface Lttng version" - -} - -function test_version_validation() -{ - mi_print_version version.xml - $XML_VALIDATE version.xml - ok $? "Machine Interface Version xsd validation" -} - -start_lttng_sessiond - -TESTS=( - test_version_validation -) - -for fct_test in ${TESTS[@]}; -do - TRACE_PATH=$(mktemp -d) - - ${fct_test} - if [ $? -ne 0 ]; then - break; - fi - # Only delete if successful - rm -rf $TRACE_PATH -done - -stop_lttng_sessiond diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh index 32f5bd193..21212bc8a 100644 --- a/tests/utils/utils.sh +++ b/tests/utils/utils.sh @@ -210,7 +210,7 @@ function stop_lttng_sessiond () function list_lttng_with_opts () { opts=$1 - $TESTDIR/../src/bin/lttng/$LTTNG_BIN $opts >$OUTPUT_DEST + $TESTDIR/../src/bin/lttng/$LTTNG_BIN list $opts >$OUTPUT_DEST ok $? "Lttng-tool list command with option $opts" } @@ -230,8 +230,12 @@ function create_lttng_session () $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $sess_name -o $trace_path > $OUTPUT_DEST ret=$? - if [[ $expected_to_fail && $ret ]]; then - ok 0 "Expected fail on session creation $sess_name in $trace_path" + if [[ $expected_to_fail ]]; then + if [[ $ret ]]; then + pass "Expected fail on session creation $sess_name in $trace_path" + else + fail "Session $sess_name creation in $trace_path was expected to fail" + fi else ok $ret "Create session $sess_name in $trace_path" fi @@ -241,9 +245,19 @@ function enable_ust_lttng_channel() { sess_name=$1 channel_name=$2 + expect_fail=$3 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -u $channel_name -s $sess_name >$OUTPUT_DEST - ok $? "Enable channel $channel_name for session $sess_name" + ret=$? + if [[ $expect_fail ]]; then + if [[ $ret ]]; then + pass "Enable channel $channel_name for session $sess_name expected fail" + else + fail "Enable channel $channel_name for session $sess_name did not fail as expected" + fi + else + ok $ret "Enable channel $channel_name for session $sess_name" + fi } function disable_ust_lttng_channel() -- 2.34.1