+function test_track_untrack ()
+{
+ diag "Test track/untrack pid"
+
+ local session_name="testTrack"
+ local pid="1,2,3"
+ OUTPUT_FILE="track.xml"
+
+ #Test buid up
+ OUTPUT_DEST=$DEVNULL
+ create_lttng_session_no_output $session_name
+
+ OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
+ lttng_track_ok "-p $pid -u"
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: track pid xsd validation"
+
+ #Expect a true element
+ extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
+ test "$result" = "true"
+ ok $? "Mi test: track pid is a success"
+
+ #Verify that there is 3 process
+ extract_xml $OUTPUT_DEST $XPATH_TRACK_UNTRACK_PID"/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "3"
+ ok $? "Mi test: track pid expecting 3 processes got $num"
+
+ #Test the pid_tracker listing
+ list_lttng_with_opts $session_name
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: session list with pid_tracker validate"
+
+ #Check the good count
+ extract_xml $OUTPUT_DEST $XPATH_PID_TRACKER"/lttng:targets/lttng:pid_target/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "3"
+ ok $? "Mi test: tracker pid listing expecting 3 target got $num"
+
+ #Untrack pid 2,3
+ lttng_untrack_ok "-p 2,3 -u"
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: untrack pid xsd validation"
+
+ #Expect a true element
+ extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
+ test "$result" = "true"
+ ok $? "Mi test: untrack pid is a success"
+
+ #Verify that there is 2 untracked pids
+ extract_xml $OUTPUT_DEST $XPATH_TRACK_UNTRACK_PID"/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "2"
+ ok $? "Mi test: untrack pid expecting 2 process got $num"
+
+ #Check pid_tracker listing
+ list_lttng_with_opts $session_name
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: session list with pid_tracker validate"
+
+ #Check the good count
+ extract_xml $OUTPUT_DEST $XPATH_PID_TRACKER"/lttng:targets/lttng:pid_target/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "1"
+ ok $? "Mi test: tracker pid listing expecting 1 process got $num"
+
+ #Untrack all
+ lttng_untrack_ok "-p -u -a"
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: untrack pid xsd validation"
+
+ #Expect a true element
+ extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
+ test "$result" = "true"
+ ok $? "Mi test: untrack all pid is a success"
+
+ #Verify that there is 1 untracked pid
+ extract_xml $OUTPUT_DEST $XPATH_TRACK_UNTRACK_PID"/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "1"
+ ok $? "Mi test: untrack pid expecting 1 process got $num"
+
+ #Test if the id is * which represent the all argument
+ test "$result" = "*"
+ ok $? "Mi test: pid expected is * got $result"
+
+ #Test if pid_tracker is enabled as definied by pid_tracker
+ #behavior. If all pid are untrack than the pid_tracker is still
+ #enabled (pid_tracker node is present).
+ list_lttng_with_opts $session_name
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: session list with pid_tracker validate"
+
+ #Check the good count
+ extract_xml $OUTPUT_DEST $XPATH_PID_TRACKER"/lttng:targets/lttng:pid_target/lttng:pid" result
+ num=$(echo -n "$result" | wc -l)
+ test "$num" -eq "0"
+ ok $? "Mi test: tracker pid listing expecting 0 process got $num"
+
+ #Test track all
+ lttng_track_ok "-p -u -a"
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: track pid xsd validation"
+
+ #Expect a true element
+ extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
+ test "$result" = "true"
+ ok $? "Mi test: track all pid is a success"
+
+ #Verify that there is 1 tracked process
+ extract_xml $OUTPUT_DEST $XPATH_TRACK_UNTRACK_PID"/lttng:pid" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "1"
+ ok $? "Mi test: track pid expecting 1 process got $num"
+
+ #Test if the id is * wich represent the all argument
+ test "$result" = "*"
+ ok $? "Mi test: pid expected is * got $result"
+
+ #Test if pid_tracker is enabled as definied by pid_tracker
+ #behavior. If all pid are untrack thant the pid_tracker is
+ #disabled (node pid_tracker do not exist)
+ list_lttng_with_opts $session_name
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: session list with pid_tracker validate"
+
+ node_check_xml $OUTPUT_DEST $XPATH_PID_TRACKER result
+ test "$result" = ""
+ ok $? "Mi test: Pid_tracker node is absent as defined"
+
+ OUTPUT_DEST=$DEVNULL
+ destroy_lttng_sessions
+}
+
+function test_add_context_list()
+{
+ diag "Test context listing"
+
+ OUTPUT_FILE="list-context.xml"
+ OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
+ lttng_add_context_list
+
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "Mi test: context listing validation"
+}
+
+function test_clear_session ()
+{
+ # Since the session are not started there is no real clear done.
+ # We are testing the MI output only here.
+ local session_name=(
+ "testSession1"
+ "testSession2"
+ "testSession3")
+
+ OUTPUT_FILE="clear_session.xml"
+
+ #Test build up
+ OUTPUT_DEST=$DEVNULL
+ for (( i = 0; i < 3; i++ )); do
+ create_lttng_session_ok ${session_name[$i]} $OUTPUT_DIR
+ done
+
+ OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
+ lttng_clear_session_ok ${session_name[0]}
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "MI test: clear session ${session_name[0]} xsd validation"
+
+ #Verify that we cleared the good session
+ extract_xml $OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
+ test "$result" = "${session_name[0]}"
+ ok $? "Mi test: cleared session: $result expected: ${session_name[0]}"
+
+ #Destroy all and count:should be 3
+ lttng_clear_all
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "MI test: clear all session xsd validation"
+
+ #Verify that we cleared 3 sessions
+ extract_xml $OUTPUT_DEST $XPATH_SESSION"/lttng:name/text()" result
+ num=$(echo "$result" | wc -l)
+ test "$num" -eq "3"
+ ok $? "Mi test: $num / 3 sessions discovered"
+
+ destroy_lttng_sessions
+
+ #Verify that if no session is present command fail and mi report it.
+ lttng_clear_session_fail ${session_name[0]}
+ $XML_VALIDATE $OUTPUT_DEST
+ ok $? "MI test: failing clear session ${session_name[0]} xsd validation"
+ extract_xml $OUTPUT_DEST $XPATH_COMMAND_SUCCESS result
+ test "$result" = "false"
+ ok $? "Mi test: clear command on ${session_name[0]} failed as expected"
+
+}
+
+start_lttng_sessiond $SESSIOND_LOAD_DIR