done
OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
- list_lttng_with_opts
+ list_lttng_ok
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: list sessions xsd validation"
create_lttng_session_ok $session_name ${output_basedir}
OUTPUT_DEST=${output_basedir}/$OUTPUT_FILE
- list_lttng_with_opts
+ list_lttng_ok
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: list session with long path xsd validation"
#Begin testing
OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
- list_lttng_with_opts "$session_name -c $channel_name"
+ list_lttng_ok "$session_name -c $channel_name"
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: list channel xsd validation"
#Begin testing
OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
- list_lttng_with_opts "$session_name -d"
+ list_lttng_ok "$session_name -d"
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: list domain xsd validation"
#Begin testing
OUTPUT_DEST=$OUTPUT_DIR/$OUTPUT_FILE
- list_lttng_with_opts $session_name
+ list_lttng_ok $session_name
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: list session xsd validation"
sleep 0.5
done
- list_lttng_with_opts "-u -f"
+ list_lttng_ok "-u -f"
touch ${file_sync_before_last}
ok $? "Mi test: track pid expecting 3 processes got $num"
#Test the pid_tracker listing
- list_lttng_with_opts $session_name
+ list_lttng_ok $session_name
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: session list with pid_tracker validate"
ok $? "Mi test: untrack pid expecting 2 process got $num"
#Check pid_tracker listing
- list_lttng_with_opts $session_name
+ list_lttng_ok $session_name
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: session list with pid_tracker validate"
#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
+ list_lttng_ok $session_name
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: session list with pid_tracker validate"
#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
+ list_lttng_ok $session_name
$MI_VALIDATE $OUTPUT_DEST
ok $? "Mi test: session list with pid_tracker validate"
LTTNG_BIN="${lttng_bin} --mi xml"
OUTPUT_DEST=$(mktemp --tmpdir "tmp.${FUNCNAME[0]}_output.XXXXXX")
- list_lttng_with_opts
+ list_lttng_ok
$MI_VALIDATE "$OUTPUT_DEST"
ok $? "Valid lttng list XML"
ok $? "Found the right rotation size value in XML"
# Check the output of lttng list with the 2 rotation parameters
- list_lttng_with_opts $SESSION_NAME
+ list_lttng_ok $SESSION_NAME
$MI_VALIDATE ${tmp_xml_output}
ok $? "Valid lttng list XML"
OUTPUT_DEST=${tmp_xml_output}
# Check the output of lttng list with the 2 rotation parameters after the load
- list_lttng_with_opts $SESSION_NAME
+ list_lttng_ok $SESSION_NAME
$MI_VALIDATE ${tmp_xml_output}
ok $? "Valid lttng list XML after load"
TRACE_PATH=$(mktemp --tmpdir -d -t tmp.test_ust_rotation_trace_path.XXXXXX)
-NUM_TESTS=136
+NUM_TESTS=138
source $TESTDIR/utils/utils.sh
source $CURDIR/rotate_utils.sh
BAIL_OUT "No UST events binary detected."
fi
+XPATH_CMD_OUTPUT="//lttng:command/lttng:output"
+XPATH_PID="$XPATH_CMD_OUTPUT/lttng:domains/lttng:domain[./lttng:type = 'UST']/lttng:pids/lttng:pid/lttng:id"
+
function enable_channel_per_pid ()
{
sess_name=$1
rotate_ust_test "${TRACE_PATH}/archives" "ust/pid/*/" 1
}
+function wait_until_app_unregistration ()
+{
+ local pid=$1
+ local mi_output
+ local value=1
+
+ mi_output=$(mktemp)
+
+ while [ $value -ne 0 ]; do
+ # Extract from lttng list tracepoint the registered apps.
+ # This should give us enough guarantee since that if the app is not
+ # present it is unregistered from lttng-sessiond point of view.
+ LTTNG_BIN="lttng --mi xml" OUTPUT_DEST="$mi_output" list_lttng_notap -u
+ if ! $MI_VALIDATE "$mi_output"; then
+ return 1
+ fi
+
+ value=$("$MI_VALIDATE" "$mi_output" "$XPATH_PID" | wc -l)
+ if [ $value -ne 0 ]; then
+ diag "At least one app is still registred from lttng-sessiond point of view"
+ sleep 1
+ else
+ # No app present on listing.
+ break;
+ fi
+ done
+
+ return 0
+}
+
function test_ust_local_timer_uid ()
{
diag "Test ust local with session rotation timer per-uid"
function test_ust_local_timer_pid ()
{
+ local app_pid
+
diag "Test ust local with session rotation timer per-pid"
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_channel_per_pid $SESSION_NAME "channel0"
enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
- lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
start_lttng_tracing_ok $SESSION_NAME
- # We just want the app to register, no event generated
- $TESTAPP_BIN -i 0 -w 0 > /dev/null 2>&1
+
+ # We just want the app to register, no event generated.
+ # But we want the pid for the app since we need to validate its
+ # unregistration on lttng listing.
+ $TESTAPP_BIN -i 0 -w 0 > /dev/null 2>&1 &
+ app_pid=$!
+ wait $app_pid
+
+ wait_until_app_unregistration $app_pid
+ ok $? "App is un-registered"
+
+ # Set the rotation after that the app is done and that it was
+ # unregistered from lttng-sessiond.
+ # This is necessary since the rotate_timer_test function expects the
+ # second rotation archive to be empty. On slow machine it can take more
+ # than 500ms for the lttng-sessiond to receive and handle an app
+ # termination. This can lead to situation where the second rotation
+ # archive still have the channels for the pid for the app since that
+ # from the point of view of the lttng-sessiond/consumer the app is still
+ # "alive" and "kicking". This is a problem only for per-pid testing.
+ lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
rotate_timer_test "${TRACE_PATH}/archives" 1
}
create_lttng_session_uri $SESSION_NAME net://localhost
enable_channel_per_pid $SESSION_NAME "channel0"
enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
- lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
start_lttng_tracing_ok $SESSION_NAME
- # We just want the app to register, no event generated
- $TESTAPP_BIN -i 0 -w 0 > /dev/null 2>&1
+
+ # We just want the app to register, no event generated.
+ # But we want the pid for the app since we need to validate its
+ # unregistration on lttng listing.
+ $TESTAPP_BIN -i 0 -w 0 > /dev/null 2>&1 &
+ app_pid=$!
+ wait $app_pid
+
+ wait_until_app_unregistration $app_pid
+ ok $? "App is un-registered"
+
+ # Set the rotation after that the app is done and that it was
+ # unregistered from lttng-sessiond.
+ # This is necessary since the rotate_timer_test function expects the
+ # second rotation archive to be empty. On slow machine it can take more
+ # than 500ms for the lttng-sessiond to receive and handle an app
+ # termination. This can lead to situation where the second rotation
+ # archive still have the channels for the pid for the app since that
+ # from the point of view of the lttng-sessiond/consumer the app is still
+ # "alive" and "kicking". This is a problem only for per-pid testing.
+ lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
rotate_timer_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*/archives" 1
}
diag "Test auto load file"
start_lttng_sessiond $CURDIR/load-42.lttng
- list_lttng_with_opts load-42
+ list_lttng_ok load-42
stop_lttng_sessiond
}
cp -f $CURDIR/load-42.lttng $LTTNG_DIR/
start_lttng_sessiond $LTTNG_DIR
- list_lttng_with_opts load-42
+ list_lttng_ok load-42
stop_lttng_sessiond
}
cp -f $CURDIR/load-42.lttng $LTTNG_HOME/.lttng/sessions/auto
start_lttng_sessiond
- list_lttng_with_opts load-42
+ list_lttng_ok load-42
stop_lttng_sessiond
}
function list_lttng_with_opts ()
{
+ local ret
+ local withtap=$1
+ shift
local opts=$1
$TESTDIR/../src/bin/lttng/$LTTNG_BIN list $opts 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
- ok $? "Lttng-tool list command with option $opts"
+ ret=$?
+ if [ $withtap -eq "1" ]; then
+ ok $ret "Lttng-tool list command with option $opts"
+ fi
+}
+
+function list_lttng_ok ()
+{
+ list_lttng_with_opts 1 "$@"
+}
+
+function list_lttng_notap ()
+{
+ list_lttng_with_opts 0 "$@"
}
function create_lttng_session_no_output ()