3 # Copyright (C) 2014 Jonathan Rajotte <jonathan.r.julien@gmail.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="Machine interface testing"
10 TESTDIR
=$CURDIR/..
/..
/..
/
12 #Test app for ust event
13 TESTAPP_PATH
="$TESTDIR/utils/testapp"
14 TESTAPP_NAME
="gen-ust-events"
15 TESTAPP_BIN
="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
20 OUTPUT_DIR
=$
(mktemp
--tmpdir -d tmp.test_mi_output_dir.XXXXXX
)
21 SESSIOND_LOAD_DIR
=$
(mktemp
--tmpdir -d tmp.test_mi_sessiond_load_dir.XXXXXX
)
22 OUTPUT_FILE
="default.xml"
24 XPATH_CMD_OUTPUT
="//lttng:command/lttng:output"
25 XPATH_COMMAND_SUCCESS
="/lttng:command/lttng:success/text()"
26 XPATH_SESSION
="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session"
27 XPATH_ENABLE_CHANNEL_NAME
="$XPATH_CMD_OUTPUT/lttng:channels/lttng:channel/lttng:name/text()"
28 XPATH_ENABLE_EVENT_SUCCESS
="$XPATH_CMD_OUTPUT/lttng:events/lttng:event/lttng:success/text()"
29 XPATH_DISABLE_EVENT_SUCCESS
="$XPATH_CMD_OUTPUT/lttng:channel/lttng:events/lttng:event/lttng:success/text()"
30 XPATH_LIST_DOMAIN
="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session/lttng:domains/lttng:domain"
31 XPATH_LIST_CHANNEL
="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session/lttng:domains/lttng:domain/lttng:channels/lttng:channel"
32 XPATH_LIST_UST_EVENT
="$XPATH_CMD_OUTPUT/lttng:domains/lttng:domain[./lttng:type ='UST']/lttng:pids/lttng:pid/lttng:events/lttng:event"
33 XPATH_SNAPSHOT_ADD_SNAPSHOT
="$XPATH_CMD_OUTPUT/lttng:snapshot_action[./lttng:name = 'add-output']/lttng:output"
34 XPATH_SNAPSHOT_LIST
="$XPATH_CMD_OUTPUT/lttng:snapshot_action[./lttng:name = 'list-output']/lttng:output"
35 XPATH_SNAPSHOT_DEL
="$XPATH_CMD_OUTPUT/lttng:snapshot_action[./lttng:name = 'del-output']/lttng:output"
36 XPATH_TRACK_UNTRACK_VPID
="$XPATH_CMD_OUTPUT/lttng:process_attr_trackers/lttng:vpid_process_attr_tracker/lttng:process_attr_values/lttng:vpid/lttng:type"
37 XPATH_VPID_TRACKER
="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session/lttng:domains/lttng:domain/lttng:process_attr_trackers/lttng:vpid_process_attr_tracker"
39 DEVNULL
=/dev
/null
2>&1
41 DIR
=$
(readlink
-f $TESTDIR)
45 source $TESTDIR/utils
/utils.sh
47 #Overwrite the lttng_bin to get mi output
48 LTTNG_BIN
="lttng --mi xml"
50 #Global declaration for simplification
51 LTTNG
=$TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN
53 #Overwrite the default output for utils.sh command
55 #MUST set TESTDIR before calling those functions
58 print_test_banner
"$TEST_DESC"
60 function extract_xml
()
66 output
=$
($XML_EXTRACT $xml "$xpath")
67 ok $?
"Extraction of xpath $xpath"
68 eval $__result="'$output'"
71 function node_check_xml
()
77 output
=$
($XML_NODE_CHECK $xml "$xpath")
78 ok $?
"Check of node existence with xpath $xpath"
79 eval $__result="'$output'"
82 # Arg1 is path to xml file
84 # is true if we expected the success element to be false
88 function is_command_success
()
93 local xpath
=$XPATH_COMMAND_SUCCESS
96 #Extract the success element
98 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
99 if [[ $expect_false = "true" ]]; then
100 if [[ $result ]]; then
101 pass
"Mi test: $xml command failed as expected"
103 fail
"Mi test: $xml command did not fail as expected"
106 if [[ $result ]]; then
107 pass
"Mi test: $xml command success"
109 fail
"Mi test: $xml command failed"
114 function mi_print_version
()
119 $LTTNG version
$opt > $output_path
120 ok $?
"MI test: Lttng version"
124 function test_version
()
126 OUTPUT_FILE
="version.xml"
127 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
128 mi_print_version
$OUTPUT_DEST
129 $MI_VALIDATE $OUTPUT_DEST
130 ok $?
"MI test: Version xsd validation"
133 function test_create_session
()
135 local session_name
="testSession"
137 OUTPUT_FILE
="create_session.xml"
138 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
139 create_lttng_session_ok
$session_name $OUTPUT_DIR
140 $MI_VALIDATE $OUTPUT_DEST
141 ok $?
"MI test: create session xsd validation"
143 #try to recreate a session. Expecting it to fail
144 create_lttng_session_fail
$session_name $OUTPUT_DIR
145 $MI_VALIDATE $OUTPUT_DEST
146 ok $?
"MI test: expecting fail create session xsd validation"
147 is_command_success
$OUTPUT_DEST true
150 destroy_lttng_session_ok
$session_name
153 function test_destroy_session
()
160 OUTPUT_FILE
="destroy_session.xml"
164 for (( i
= 0; i
< 3; i
++ )); do
165 create_lttng_session_ok
${session_name[$i]} $OUTPUT_DIR
168 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
169 destroy_lttng_session_ok
${session_name[0]}
170 $MI_VALIDATE $OUTPUT_DEST
171 ok $?
"MI test: destroy session ${session_name[0]} xsd validation"
173 #Verify that we destroyed the good session
174 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
175 test "$result" = "${session_name[0]}"
176 ok $?
"Mi test: deleted session: $result expected: ${session_name[0]}"
178 #Destroy all and count:should be 2
179 destroy_lttng_sessions
180 $MI_VALIDATE $OUTPUT_DEST
181 ok $?
"MI test: destroy all session xsd validation"
183 #Verify that we destroyed 2 sessions
184 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
185 num
=$
(echo "$result" |
wc -l)
187 ok $?
"Mi test: $num / 2 sessions discovered"
189 #Verify that if no session is present command fail and mi report it.
190 destroy_lttng_session_fail
${session_name[0]}
191 $MI_VALIDATE $OUTPUT_DEST
192 ok $?
"MI test: failing destroy session ${session_name[0]} xsd validation"
193 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
194 test "$result" = "false"
195 ok $?
"Mi test: destroy command on ${session_name[0]} failed as expected"
199 function test_list_sessions
()
206 OUTPUT_FILE
="list_sessions.xml"
210 for (( i
= 0; i
< 3; i
++ )); do
211 create_lttng_session_ok
${session_name[$i]} $OUTPUT_DIR
214 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
216 $MI_VALIDATE $OUTPUT_DEST
217 ok $?
"Mi test: list sessions xsd validation"
219 #We should have 3 session
220 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
221 num
=$
(echo "$result" |
wc -l)
223 ok $?
"Mi test: $num / 3 sessions discovered"
227 destroy_lttng_sessions
230 function test_list_session_long_path
()
232 local session_name
="session_long_path"
234 output_basedir
=$OUTPUT_DIR/$
(randstring
254 0)
235 mkdir
-p ${output_basedir}
237 OUTPUT_FILE
="list_sessions.xml"
241 create_lttng_session_ok
$session_name ${output_basedir}
243 OUTPUT_DEST
=${output_basedir}/$OUTPUT_FILE
245 $MI_VALIDATE $OUTPUT_DEST
246 ok $?
"Mi test: list session with long path xsd validation"
250 destroy_lttng_sessions
252 function test_ust_channel
()
254 local session_name
="testsession"
255 local channel_name
=("channelUst0"
259 OUTPUT_FILE
="ust_channel.xml"
263 create_lttng_session_ok
$session_name $OUTPUT_DIR
265 #Test the enable_channel command
266 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
267 enable_ust_lttng_channel_ok
$session_name ${channel_name[0]}
268 $MI_VALIDATE $OUTPUT_DEST
269 ok $?
"Mi test: enable ust channel xsd validation"
270 is_command_success
$OUTPUT_DEST false
272 #Expect the command to fail
273 enable_ust_lttng_channel_fail
$session_name ${channel_name[0]}
274 $MI_VALIDATE $OUTPUT_DEST
275 ok $?
"Mi test: fail enable ust channel xsd validation"
276 is_command_success
$OUTPUT_DEST true
278 #Create two ust channel to test multiple disable
279 for (( i
= 1; i
< 3; i
++ )); do
280 enable_ust_lttng_channel_ok
$session_name ${channel_name[$i]}
283 #Test the disable_channel command
284 disable_ust_lttng_channel
$session_name ${channel_name[0]}
285 $MI_VALIDATE $OUTPUT_DEST
286 ok $?
"Mi test: disable ust channel xsd validation"
287 is_command_success
$OUTPUT_DEST false
288 #Check that we delete the good channel
289 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result
290 test "$result" = "${channel_name[0]}"
291 ok $?
"MI test: ${channel_name[0]} disabled"
293 #Test multiple disable_channel;
294 disable_ust_lttng_channel
$session_name ${channel_name[1]},${channel_name[2]}
295 $MI_VALIDATE $OUTPUT_DEST
296 ok $?
"Mi test: multiple disable ust channel xsd validation"
297 is_command_success
$OUTPUT_DEST false
299 #Make sure we have two disabled channel
300 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_CHANNEL_NAME result
301 local num
=$
(echo "$result" |
wc -l)
303 ok $?
"Mi test: disabled ust channel $num/2"
307 destroy_lttng_sessions
311 function test_ust_lttng_event
()
313 local session_name
="testSession"
314 local channel_name
="testChannel"
315 local event
=("ev1" "ev2" "ev3")
317 OUTPUT_FILE
="ust_event.xml"
321 create_lttng_session_ok
$session_name $OUTPUT_DIR
322 enable_ust_lttng_channel_ok
$session_name $channel_name
324 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
325 #Test the enable event for ust domain
326 enable_ust_lttng_event_ok
$session_name ${event[0]} $channel_name
327 $MI_VALIDATE $OUTPUT_DEST
328 ok $?
"Mi test: Enable_event for ust domain xsd validation"
329 is_command_success
$OUTPUT_DEST false
331 #Try to reenable an enabled event. Should fail
332 enable_ust_lttng_event_fail
$session_name ${event[0]} $channel_name
333 $MI_VALIDATE $OUTPUT_DEST
334 ok $?
"Mi test: Fail enable_event for ust domain xsd validation"
335 is_command_success
$OUTPUT_DEST true
337 #Enable multiple event including the last one command will fail
338 #But 2 events should success
340 #Nice little hack, create a string ev,ev,ev
341 #IFS stand for Internal field separator
342 #Event[*] print all the element inside the array with the IFS in between
343 concat_event
=$
( IFS
=$
','; echo "${event[*]}" )
345 enable_ust_lttng_event_fail
$session_name $concat_event $channel_name
346 $MI_VALIDATE $OUTPUT_DEST
347 ok $?
"Mi test: Multiple enable ust event with inside fail xsd validation"
349 #Check for 2 success = true and 1 success = false
350 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_EVENT_SUCCESS result
351 num_ocur
=$
(grep -o "true" <<< "$result" |
wc -l)
352 test "$num_ocur" -eq "2"
353 ok $?
"Mi test: Enabled event on failing enable command $num_ocur_true/2"
355 extract_xml
$OUTPUT_DEST $XPATH_ENABLE_EVENT_SUCCESS result
356 num_ocur
=$
(grep -o "false" <<< "$result" |
wc -l)
357 test "$num_ocur" -eq "1"
358 ok $?
"Mi test: Enabled event on failing enable command $num_ocur_true/2"
361 disable_ust_lttng_event
$session_name ${event[0]} $channel_name
362 $MI_VALIDATE $OUTPUT_DEST
363 ok $?
"Mi test: Disable ust event xsd validation"
364 is_command_success
$OUTPUT_DEST false
366 #Disable the 3 event combined. Should pass
367 disable_ust_lttng_event
$session_name $concat_event $channel_name
368 $MI_VALIDATE $OUTPUT_DEST
369 ok $?
"Mi test: Disable multiple ust event xsd validation"
370 is_command_success
$OUTPUT_DEST false
372 #Make sure we have 3 inner success
373 extract_xml
$OUTPUT_DEST $XPATH_DISABLE_EVENT_SUCCESS result
374 num_ocur
=$
(grep -o "true" <<< "$result" |
wc -l)
375 test "$num_ocur" -eq "3"
376 ok $?
"Mi test: Disable multiple ust event success $num_ocur/3"
380 destroy_lttng_sessions
383 function test_list_channel
()
385 local session_name
="testSession"
386 local channel_name
="testChannel"
387 local event
=("ev1" "ev2" "ev3")
389 OUTPUT_FILE
="list_channel.xml"
393 create_lttng_session_ok
$session_name $OUTPUT_DIR
394 enable_ust_lttng_channel_ok
$session_name $channel_name
396 #Enable ust and jul events
397 concat_event
=$
( IFS
=$
','; echo "${event[*]}" )
398 enable_ust_lttng_event_ok
$session_name $concat_event $channel_name
401 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
402 list_lttng_with_opts
"$session_name -c $channel_name"
403 $MI_VALIDATE $OUTPUT_DEST
404 ok $?
"Mi test: list channel xsd validation"
406 #Expect 1 domain: UST
407 extract_xml
$OUTPUT_DEST $XPATH_LIST_DOMAIN"/lttng:type/text()" result
408 num
=$
(echo "$result" |
wc -l)
410 ok $?
"Mi test: $num / 1 domains discovered"
412 #Expect 1 channel: test
413 extract_xml
$OUTPUT_DEST $XPATH_LIST_CHANNEL"/lttng:name/text()" result
414 num
=$
(echo "$result" |
wc -l)
416 ok $?
"Mi test: $num / 1 channel discovered"
418 test "$result" = "$channel_name"
419 ok $?
"Mi test: expected channel: $channel_name found: $result"
421 #Add a channel and make sure we have 2 channel now
423 enable_ust_lttng_channel_ok
$session_name $channel_name"a"
427 destroy_lttng_sessions
430 function test_list_domain
()
432 local session_name
="testSession"
433 local channel_name
="testChannel"
434 local event
=("ev1" "ev2" "ev3")
436 OUTPUT_FILE
="list_domain.xml"
440 create_lttng_session_ok
$session_name $OUTPUT_DIR
441 enable_ust_lttng_channel_ok
$session_name $channel_name
443 #Enable ust and jul events
444 concat_event
=$
( IFS
=$
','; echo "${event[*]}" )
445 enable_ust_lttng_event_ok
$session_name $concat_event $channel_name
446 enable_jul_lttng_event
$session_name $concat_event $channel_name
449 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
450 list_lttng_with_opts
"$session_name -d"
451 $MI_VALIDATE $OUTPUT_DEST
452 ok $?
"Mi test: list domain xsd validation"
454 #Expect 2 domain: Jul and UST
455 extract_xml
$OUTPUT_DEST $XPATH_LIST_DOMAIN"/lttng:type/text()" result
456 num
=$
(echo "$result" |
wc -l)
458 ok $?
"Mi test: $num / 2 domains discovered"
460 #Test for valid value
461 if [[ "$result" = *"JUL"* ]]; then
462 pass
"Mi test: domains Jul is present"
464 fail
"Mi test: domains Jul is absent"
467 if [[ "$result" = *"UST"* ]]; then
468 pass
"Mi test: domains UST is present"
470 fail
"Mi test: domains UST is absent"
475 destroy_lttng_sessions
478 function test_list_session
()
480 local session_name
="testSession"
481 local channel_name
="testChannel"
482 local event
=("ev1" "ev2" "ev3")
484 OUTPUT_FILE
="list_session.xml"
488 create_lttng_session_ok
$session_name $OUTPUT_DIR
489 enable_ust_lttng_channel_ok
$session_name $channel_name
491 #Enable ust and jul events
492 concat_event
=$
( IFS
=$
','; echo "${event[*]}" )
493 enable_ust_lttng_event_ok
$session_name $concat_event $channel_name
494 enable_jul_lttng_event
$session_name $concat_event $channel_name
497 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
498 list_lttng_with_opts
$session_name
499 $MI_VALIDATE $OUTPUT_DEST
500 ok $?
"Mi test: list session xsd validation"
502 #Expect 2 domain: Jul and UST
503 extract_xml
$OUTPUT_DEST $XPATH_LIST_DOMAIN"/lttng:type/text()" result
504 num
=$
(echo "$result" |
wc -l)
506 ok $?
"Mi test: $num / 2 domains discovered"
508 #Expect 2 channel: test and lttng_jul_event
509 extract_xml
$OUTPUT_DEST $XPATH_LIST_CHANNEL"/lttng:name/text()" result
510 num
=$
(echo "$result" |
wc -l)
512 ok $?
"Mi test: $num / 2 channel discovered"
516 destroy_lttng_sessions
519 function test_list_ust_event
()
521 local file_sync_after_first
=$
(mktemp
--tmpdir -u "tmp.${FUNCNAME[0]}_sync_after_first.XXXXXX")
522 local file_sync_before_last
=$
(mktemp
--tmpdir -u "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX")
524 OUTPUT_FILE
="list_ust_event.xml"
527 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
530 $TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT \
531 --sync-after-first-event ${file_sync_after_first} \
532 --sync-before-last-event ${file_sync_before_last} & 2>/dev
/null
534 while [ ! -f "${file_sync_after_first}" ]; do
538 list_lttng_with_opts
"-u -f"
540 touch ${file_sync_before_last}
542 $MI_VALIDATE $OUTPUT_DEST
543 ok $?
"Mi test: list ust event xsd validation"
546 extract_xml
$OUTPUT_DEST "$XPATH_LIST_UST_EVENT""/lttng:name/text()" result
547 num
=$
(echo "$result" |
wc -l)
549 #Since the number of events is prone to change we only look for >= from a
550 #base number. An alternative would be to look for each events but this
551 #is complicated for nothing.
553 ok $?
"Mi test: $num / 5 ust events discovered"
555 #Extract field from tp:tptest event. Expect >= to 12 because number of
556 #field is prone to change.
557 extract_xml
$OUTPUT_DEST "$XPATH_LIST_UST_EVENT""[./lttng:name = 'tp:tptest']/lttng:event_fields/lttng:event_field/lttng:name/text()" result
558 num
=$
(echo "$result" |
wc -l)
560 ok $?
"Mi test: $num / 12 ust event fields discovered"
562 #Wait for all background processes
565 rm -f ${file_sync_after_first}
566 rm -f ${file_sync_before_last}
569 function test_start_stop
() {
570 local session_name
="testStartStopSession"
571 local channel_name
="startStopChannel"
573 OUTPUT_FILE
="list_start_stop.xml"
577 create_lttng_session_ok
$session_name $OUTPUT_DIR
580 #No channel enable start command should return element success false
581 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
582 start_lttng_tracing_fail
$session_name
583 $MI_VALIDATE $OUTPUT_DEST
584 ok $?
"Mi test: failed start xsd validation"
586 #Expect a false element
587 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
588 test "$result" = "false"
589 ok $?
"Mi test: mi report failure on start command as expected"
591 #Enable a channel to test success
593 enable_ust_lttng_channel_ok
$session_name $channel_name
596 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
597 start_lttng_tracing_ok
$session_name
598 $MI_VALIDATE $OUTPUT_DEST
599 ok $?
"Mi test: start xsd validation"
601 #Expect a true element
602 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
603 test "$result" = "true"
604 ok $?
"Mi test: mi report success on start command as expected"
606 #Extract session name from xml
607 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
608 test "$result" = "$session_name"
609 ok $?
"Mi test: started $session_name"
611 #Extract enabled expect true
612 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:enabled/text()" result
613 test "$result" = "true"
614 ok $?
"Mi test: enabled element : $result expected: true"
616 #Test metadata regenerate command
617 regenerate_metadata_ok
$session_name
618 $MI_VALIDATE $OUTPUT_DEST
619 ok $?
"Mi test: regenerate metadata"
622 stop_lttng_tracing_ok
$session_name
623 $MI_VALIDATE $OUTPUT_DEST
624 ok $?
"Mi test: stop xsd validation"
626 #Extract session name from xml
627 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
628 test "$result" = "$session_name"
629 ok $?
"Mi test: stopped $session_name"
631 #Extract enabled expect false
632 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:enabled/text()" result
633 test "$result" = "false"
634 ok $?
"Mi test: enabled element : $result expected: false"
636 #Test failing stop command
637 stop_lttng_tracing_fail
$session_name
638 $MI_VALIDATE $OUTPUT_DEST
639 ok $?
"Mi test: failed stop xsd validation"
641 #Expect a false element
642 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
643 test "$result" = "false"
644 ok $?
"Mi test: mi report failure on start command as expected"
648 destroy_lttng_sessions
651 function test_snapshot
() {
652 local session_name
="testSnapshotAdd"
653 local snapshot_path
="$OUTPUT_DIR/snapshotoutput"
654 OUTPUT_FILE
="snapshot.xml"
659 create_lttng_session_no_output
$session_name
662 #No channel enable start command should return element success false
663 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
664 lttng_snapshot_add_output_ok
$session_name file://$snapshot_path
665 $MI_VALIDATE $OUTPUT_DEST
666 ok $?
"Mi test: snapshot xsd validation"
668 #Expect a true element
669 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
670 test "$result" = "true"
671 ok $?
"Mi test: add snapshot is a success"
674 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_ADD_SNAPSHOT""/lttng:snapshot/lttng:session_name/text()" result
675 test "$result" = "$session_name"
676 ok $?
"Mi test: added snapshot for: $result expected $session_name"
678 #Get name of generated output and id
679 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_ADD_SNAPSHOT""/lttng:snapshot/lttng:name/text()" snapshot_name
680 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_ADD_SNAPSHOT""/lttng:snapshot/lttng:id/text()" snapshot_id
683 lttng_snapshot_list
$session_name
684 $MI_VALIDATE $OUTPUT_DEST
685 ok $?
"Mi test: snapshot list xsd validation"
687 #Expect a true element
688 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
689 test "$result" = "true"
690 ok $?
"Mi test: add snapshot is a success"
692 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_LIST""/lttng:session[./lttng:name ='$session_name']/lttng:snapshots/lttng:snapshot/lttng:name/text()" result
693 test "$result" = "$snapshot_name"
694 ok $?
"Mi test: snapshot list extracted snapshot: $result expected: $snapshot_name"
697 lttng_snapshot_del_output_ok
$session_name $snapshot_id
698 $MI_VALIDATE $OUTPUT_DEST
699 ok $?
"Mi test: snapshot delete xsd validation"
702 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
703 test "$result" = "true"
704 ok $?
"Mi test: del snapshot is a success"
707 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_DEL""/lttng:snapshot/lttng:id/text()" result
708 test "$result" = "$snapshot_id"
709 ok $?
"Mi test: snapshot del extracted snapshot id: $result expected: $snapshot_id"
711 extract_xml
$OUTPUT_DEST "$XPATH_SNAPSHOT_DEL""/lttng:snapshot/lttng:session_name/text()" result
712 test "$result" = "$session_name"
713 ok $?
"Mi test: snapshot del extracted snapshot id: $result expected: $session_name"
715 #Test fail on delete command
716 lttng_snapshot_del_output_fail
$session_name $snapshot_id
717 $MI_VALIDATE $OUTPUT_DEST
718 ok $?
"Mi test: snapshot delete xsd validation"
721 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
722 test "$result" = "false"
723 ok $?
"Mi test: del snapshot is a success"
726 destroy_lttng_sessions
729 function test_track_untrack
()
731 diag
"Test track/untrack pid"
733 local session_name
="testTrack"
735 OUTPUT_FILE
="track.xml"
739 create_lttng_session_no_output
$session_name
741 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
742 lttng_track_ok
"-p $pid -u"
743 $MI_VALIDATE $OUTPUT_DEST
744 ok $?
"Mi test: track pid xsd validation"
746 #Expect a true element
747 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
748 test "$result" = "true"
749 ok $?
"Mi test: track pid is a success"
751 #Verify that there is 3 process
752 extract_xml
$OUTPUT_DEST $XPATH_TRACK_UNTRACK_VPID"/lttng:id" result
753 num
=$
(echo "$result" |
wc -l)
755 ok $?
"Mi test: track pid expecting 3 processes got $num"
757 #Test the pid_tracker listing
758 list_lttng_with_opts
$session_name
759 $MI_VALIDATE $OUTPUT_DEST
760 ok $?
"Mi test: session list with pid_tracker validate"
762 #Check the good count
763 extract_xml
$OUTPUT_DEST $XPATH_VPID_TRACKER"/lttng:process_attr_values/lttng:vpid/lttng:type/lttng:id" result
764 num
=$
(echo "$result" |
wc -l)
766 ok $?
"Mi test: tracker pid listing expecting 3 target got $num"
769 lttng_untrack_ok
"-p 2,3 -u"
770 $MI_VALIDATE $OUTPUT_DEST
771 ok $?
"Mi test: untrack pid xsd validation"
773 #Expect a true element
774 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
775 test "$result" = "true"
776 ok $?
"Mi test: untrack pid is a success"
778 #Verify that there is 2 untracked pids
779 extract_xml
$OUTPUT_DEST $XPATH_TRACK_UNTRACK_VPID"/lttng:id" result
780 num
=$
(echo "$result" |
wc -l)
782 ok $?
"Mi test: untrack pid expecting 2 process got $num"
784 #Check pid_tracker listing
785 list_lttng_with_opts
$session_name
786 $MI_VALIDATE $OUTPUT_DEST
787 ok $?
"Mi test: session list with pid_tracker validate"
789 #Check the good count
790 extract_xml
$OUTPUT_DEST $XPATH_VPID_TRACKER"/lttng:targets/lttng:vpid_target/lttng:type/lttng:pid" result
791 num
=$
(echo "$result" |
wc -l)
793 ok $?
"Mi test: tracker pid listing expecting 1 process got $num"
796 lttng_untrack_ok
"-p -u -a"
797 $MI_VALIDATE $OUTPUT_DEST
798 ok $?
"Mi test: untrack pid xsd validation"
800 #Expect a true element
801 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
802 test "$result" = "true"
803 ok $?
"Mi test: untrack all pid is a success"
805 #Verify that there is 1 untracked pid
806 extract_xml
$OUTPUT_DEST $XPATH_TRACK_UNTRACK_VPID"/lttng:all" result
807 num
=$
(echo "$result" |
wc -l)
809 ok $?
"Mi test: untrack pid expecting 1 process got $num"
811 #Test if type "all" is "true" which represent the all argument
812 test "$result" = "true"
813 ok $?
"Mi test: pid expected is true got $result"
815 #Test if pid_tracker is enabled as definied by pid_tracker
816 #behavior. If all pid are untrack than the pid_tracker is still
817 #enabled (pid_tracker node is present).
818 list_lttng_with_opts
$session_name
819 $MI_VALIDATE $OUTPUT_DEST
820 ok $?
"Mi test: session list with pid_tracker validate"
822 #Check the good count
823 extract_xml
$OUTPUT_DEST $XPATH_VPID_TRACKER"/lttng:targets/lttng:vpid_target/lttng:type/lttng:pid" result
824 num
=$
(echo -n "$result" |
wc -l)
826 ok $?
"Mi test: tracker pid listing expecting 0 process got $num"
829 lttng_track_ok
"-p -u -a"
830 $MI_VALIDATE $OUTPUT_DEST
831 ok $?
"Mi test: track pid xsd validation"
833 #Expect a true element
834 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
835 test "$result" = "true"
836 ok $?
"Mi test: track all pid is a success"
838 #Verify that there is 1 tracked process
839 extract_xml
$OUTPUT_DEST $XPATH_TRACK_UNTRACK_VPID"/lttng:all" result
840 num
=$
(echo "$result" |
wc -l)
842 ok $?
"Mi test: track pid expecting 1 process got $num"
844 #Test if the id is true wich represent the all argument
845 test "$result" = "true"
846 ok $?
"Mi test: pid expected is true got $result"
848 #Test if pid_tracker is enabled as definied by pid_tracker
849 #behavior. If all pid are untrack thant the pid_tracker is
850 #disabled (node pid_tracker do not exist)
851 list_lttng_with_opts
$session_name
852 $MI_VALIDATE $OUTPUT_DEST
853 ok $?
"Mi test: session list with pid_tracker validate"
855 node_check_xml
$OUTPUT_DEST $XPATH_VPID_TRACKER result
857 ok $?
"Mi test: VPID_tracker node is absent as defined"
860 destroy_lttng_sessions
863 function test_add_context_list
()
865 diag
"Test context listing"
867 OUTPUT_FILE
="list-context.xml"
868 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
869 lttng_add_context_list
871 $MI_VALIDATE $OUTPUT_DEST
872 ok $?
"Mi test: context listing validation"
875 function test_clear_session
()
877 # Since the session are not started there is no real clear done.
878 # We are testing the MI output only here.
884 OUTPUT_FILE
="clear_session.xml"
888 for (( i
= 0; i
< 3; i
++ )); do
889 create_lttng_session_ok
${session_name[$i]} $OUTPUT_DIR
892 OUTPUT_DEST
=$OUTPUT_DIR/$OUTPUT_FILE
893 lttng_clear_session_ok
${session_name[0]}
894 $MI_VALIDATE $OUTPUT_DEST
895 ok $?
"MI test: clear session ${session_name[0]} xsd validation"
897 #Verify that we cleared the good session
898 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
899 test "$result" = "${session_name[0]}"
900 ok $?
"Mi test: cleared session: $result expected: ${session_name[0]}"
902 #Destroy all and count:should be 3
904 $MI_VALIDATE $OUTPUT_DEST
905 ok $?
"MI test: clear all session xsd validation"
907 #Verify that we cleared 3 sessions
908 extract_xml
$OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
909 num
=$
(echo "$result" |
wc -l)
911 ok $?
"Mi test: $num / 3 sessions discovered"
913 destroy_lttng_sessions
915 #Verify that if no session is present command fail and mi report it.
916 lttng_clear_session_fail
${session_name[0]}
917 $MI_VALIDATE $OUTPUT_DEST
918 ok $?
"MI test: failing clear session ${session_name[0]} xsd validation"
919 extract_xml
$OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
920 test "$result" = "false"
921 ok $?
"Mi test: clear command on ${session_name[0]} failed as expected"
925 start_lttng_sessiond
$SESSIOND_LOAD_DIR
940 test_list_session_long_path
941 test_add_context_list
947 for fct_test
in ${TESTS[@]};
950 if [ $?
-ne 0 ]; then
955 rm -rf $SESSIOND_LOAD_DIR
957 OUTPUT_DEST
=/dev
/null
2>&1