3 # Copyright (C) - 2014 Jonathan Rajotte <jonathan.r.julien@gmail.com>
5 # This library is free software; you can redistribute it and/or modify it under
6 # the terms of the GNU Lesser General Public License as published by the Free
7 # Software Foundation; version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14 # You should have received a copy of the GNU Lesser General Public License
15 # along with this library; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 TEST_DESC
="Machine interface testing"
21 TESTDIR
=$CURDIR/..
/..
/..
/
22 XSD_PATH
=$TESTDIR/..
/src
/common
/mi_lttng.xsd
23 SESSIOND_BIN
="lttng-sessiond"
24 RELAYD_BIN
="lttng-relayd"
28 #OUTPUT_DIR=$(mktemp -d)
29 OUTPUT_DIR
="/tmp/test"
30 OUTPUT_FILE
="default.xml"
32 #Path to custom xml utilities
33 XML_VALIDATE
="$CURDIR/validate_xml $XSD_PATH"
34 XML_EXTRACT
="$CURDIR/extract_xml"
36 XPATH_COMMAND_SUCCESS
="/command/success/text()"
37 XPATH_SESSION_NAME
="/command/output/sessions/session/name/text()"
38 XPATH_ENABLE_CHANNEL_NAME
="/command/output/channels/channel/name/text()"
40 DEVNULL
=/dev
/null
2>&1
42 DIR
=$
(readlink
-f $TESTDIR)
46 source $TESTDIR/utils
/utils.sh
48 #Overwrite the lttng_bin to get mi output
49 LTTNG_BIN
="lttng --mi xml"
51 #Global devlaration for simplification
52 LTTNG
=$TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN
54 #Overwrite the default output for utils.sh command
56 #MUST set TESTDIR before calling those functions
59 print_test_banner
"$TEST_DESC"
61 function extract_xml
()
66 local output
=$
($XML_EXTRACT $xml $xpath)
67 ok $?
"Extraction of xpath $xpath"
68 eval $__result="'$output'"
71 # Arg1 is path to xml file
73 # is true if we expected the success element to be false
77 function is_command_success
()
82 local xpath
=$XPATH_COMMAND_SUCCESS
84 #Extract the success element
86 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
87 if [[ $expect_false ]]; then
88 if [[ $result ]]; then
89 pass
"Mi test: $xml command failed as expected"
91 fail
"Mi test: $xml command did not fail as expected"
94 if [[ $result ]]; then
95 fail
"Mi test: $xml command failed"
97 pass
"Mi test: $xml command success"
102 function mi_print_version
()
107 $LTTNG version
$opt > $1
108 ok $?
"MI test: Lttng version"
112 function test_version
()
114 OUTPUT_FILE
="version.xml"
115 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
116 mi_print_version
$OUTPUT_DEST
117 $XML_VALIDATE $OUTPUT_DEST
118 ok $?
"MI test: Version xsd validation"
121 function test_create_session
()
123 local session_name
="testSession"
125 OUTPUT_FILE
="create_session.xml"
126 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
127 create_lttng_session
$session_name $OUTPUT_DIR
128 $XML_VALIDATE $OUTPUT_DEST
129 ok $?
"MI test: create session xsd validation"
131 #try to recreate a session. Expecting it to fail
132 create_lttng_session
$session_name $OUTPUT_DIR true
133 $XML_VALIDATE $OUTPUT_DEST
134 ok $?
"MI test: expecting fail create session xsd validation"
135 is_command_success
$OUTPUT_DEST true
138 destroy_lttng_session
$session_name
141 function test_destroy_session
()
148 OUTPUT_FILE
="destroy_session.xml"
152 for (( i
= 0; i
< 3; i
++ )); do
153 create_lttng_session
${session_name[$i]} $OUTPUT_DIR
156 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
157 destroy_lttng_session
${session_name[0]}
158 $XML_VALIDATE $OUTPUT_DEST
159 ok $?
"MI test: destroy session ${session_name[0]} xsd validation"
161 #Verify that we destroyed the good session
162 extract_xml
$OUTPUT_DEST $XPATH_SESSION_NAME result
163 if [[ "$result" == "${session_name[0]}" ]]; then
164 ok
0 "Mi test: delete by name"
166 ok
1 "Mi test: we deleted the wrong session"
169 #Destroy all and count:should be 2
170 destroy_lttng_sessions
171 $XML_VALIDATE $OUTPUT_DEST
172 ok $?
"MI test: destroy all session xsd validation"
174 #Verify that we destroyed 2 sessions
175 extract_xml
$OUTPUT_DEST $XPATH_SESSION_NAME result
176 num
=$
(echo "$result" |
wc -l)
178 ok $?
"Mi test: $num / 2 sessions discovered"
181 function test_list_sessions
()
188 OUTPUT_FILE
="list_sessions.xml"
192 for (( i
= 0; i
< 3; i
++ )); do
193 create_lttng_session
${session_name[$i]} $OUTPUT_DIR
196 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
198 $XML_VALIDATE $OUTPUT_DEST
199 ok $?
"Mi test: list session xsd validation"
201 #We should have 3 session
202 extract_xml
$OUTPUT_DEST $XPATH_SESSION_NAME result
203 num
=$
(echo "$result" |
wc -l)
205 ok $?
"Mi test: $num / 3 sessions discovered"
209 destroy_lttng_sessions
212 function test_ust_channel
()
214 local session_name
="testsession"
215 local channel_name
=("channelUst0"
219 OUTPUT_FILE
="ust_channel.xml"
223 create_lttng_session
$session_name $OUTPUT_DIR
225 #Test the enable_channel command
226 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
227 enable_ust_lttng_channel
$session_name ${channel_name[0]}
228 $XML_VALIDATE $OUTPUT_DEST
229 ok $?
"Mi test: enable ust channel xsd validation"
230 is_command_success
$OUTPUT_DIR false
232 #Expect the command to fail
233 enable_ust_lttng_channel
$session_name ${channel_name[0]} true
234 $XML_VALIDATE $OUTPUT_DEST
235 ok $?
"Mi test: fail enable ust channel xsd validation"
236 is_command_success
$OUTPUT_DIR true
238 #Create two ust channel to test multiple disable
239 for (( i
= 1; i
< 3; i
++ )); do
240 enable_ust_lttng_channel
$session_name ${channel_name[$i]}
243 #Test the disable_channel command
244 disable_ust_lttng_channel
$session_name ${channel_name[0]}
245 $XML_VALIDATE $OUTPUT_DEST
246 ok $?
"Mi test: disable ust channel xsd validation"
247 is_command_success
$OUTPUT_DIR false
248 #Check that we delete the good channel
249 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result
250 test "$result" == "${channel_name[0]}"
251 ok $?
"MI test: ${channel_name[0]} disabled"
253 #Test multiple disable_channel;
254 disable_ust_lttng_channel
$session_name ${channel_name[1]},${channel_name[2]}
255 $XML_VALIDATE $OUTPUT_DEST
256 ok $?
"Mi test: multiple disable ust channel xsd validation"
257 is_command_success
$OUTPUT_DIR false
259 #Make sure we have two disabled channel
260 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result
261 local num
=$
(echo "$result" |
wc -l)
263 ok $?
"Mi test: disabled ust channel $num/2"
267 destroy_lttng_sessions
281 for fct_test
in ${TESTS[@]};
285 if [ $?
-ne 0 ]; then
288 # Only delete if successful
293 OUTPUT_DEST
=/dev
/null
2>&1