TEST_DESC="Kernel tracer - Clock override plugin"
-CURDIR=$(dirname $0)/
+CURDIR=$(dirname "$0")/
TESTDIR=$CURDIR/../..
SESSION_NAME="clock_override"
TESTCMD="echo -n 10 > /proc/lttng-test-filter-event"
-METADATA_CLOCK_START_TOKEN="clock {"
-METADATA_CLOCK_END_TOKEN="};"
-
-METADATA_TOKEN_LIST=(
- "name"
- "uuid"
- "description"
- "freq"
-)
-
-CLOCK_TOKEN_VALUE=(
- "lttng_test_clock_override"
- "83c63deb-7aa4-48fb-abda-946f400d76e6"
- "Freeze time with 1KHz for regression test"
- "1000"
-)
-
source $TESTDIR/utils/utils.sh
+if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then
+ NUM_TESTS=30
+elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then
+ NUM_TESTS=28
+fi
+
function signal_cleanup()
{
diag "*** Exiting ***"
full_cleanup
}
-function extract_clock_metadata()
+function extract_clock_metadata_ctf1()
{
+ local metadata_clock_start_token="clock {"
+ local metadata_clock_end_token="};"
+
local metadata_file=$1
local clock_metadata_file_destination=$2
- cat $metadata_file \
- | sed -n "/$METADATA_CLOCK_START_TOKEN/,/$METADATA_CLOCK_END_TOKEN/p" \
- > $clock_metadata_file_destination
+
+ sed -n "/$metadata_clock_start_token/,/$metadata_clock_end_token/p" "$metadata_file" > "$clock_metadata_file_destination"
ok $? "Clock metadata extraction"
}
-function extract_clock_metadata_token()
+function extract_clock_metadata_token_ctf1()
{
local clock_metadata_file=$1
local token=$2
# Look for token and get value between ""
- cat $clock_metadata_file | grep $token | awk -F"= |;" '{print $2}' | tr -d '"'
+ grep "$token" "$clock_metadata_file" | awk -F"= |;" '{print $2}' | tr -d '"'
+}
+
+function validate_tokens_ctf1
+{
+
+ local metadata_token_list=(
+ "name"
+ "uuid"
+ "description"
+ "freq"
+ )
+
+ local ust_clock_token_value=(
+ "lttng_test_clock_override"
+ "83c63deb-7aa4-48fb-abda-946f400d76e6"
+ "Freeze time with 1KHz for regression test"
+ "1000"
+ )
+
+ local metadata_directory_path=$1
+ local ctf_metadata_file
+ local clock_metadata_file
+
+ test ${#metadata_token_list[@]} -eq ${#ust_clock_token_value[@]}
+ ok $? "Tokens to check(${#metadata_token_list[@]}) and provided values(${#ust_clock_token_value[@]}) count is equal"
+
+
+ clock_metadata_file=$(mktemp --tmpdir -p "$TRACE_PATH" clock-metadata.XXXXXX)
+ ctf_metadata_file=$(mktemp --tmpdir -p "$TRACE_PATH" ctf-metadata.XXXXXX)
+
+ $BABELTRACE_BIN -o ctf-metadata -w "$ctf_metadata_file" "$metadata_directory_path"
+ ok $? "Metadata extraction from babeltrace"
+
+ extract_clock_metadata_ctf1 "$ctf_metadata_file" "$clock_metadata_file"
+
+ local counter=0
+ while [ "$counter" -lt "${#metadata_token_list[@]}" ]; do
+ result=$(extract_clock_metadata_token_ctf1 "$clock_metadata_file" \
+ "${metadata_token_list[$counter]}")
+ test "$result" == "${ust_clock_token_value[$counter]}"
+ ok $? "Token \"${metadata_token_list[$counter]}\" expect:${ust_clock_token_value[$counter]} got:$result"
+ (( counter++ ))
+ done
+
+ rm -rf "$ctf_metadata_file"
+ rm -rf "$clock_metadata_file"
+}
+
+function validate_tokens_ctf2
+{
+ local metadata_token_list=(
+ "name"
+ "uuid"
+ "description"
+ "frequency"
+ )
+
+ local ust_clock_token_value=(
+ "lttng_test_clock_override"
+ "[131,198,61,235,122,164,72,251,171,218,148,111,64,13,118,230]"
+ "Freeze time with 1KHz for regression test"
+ "1000"
+ )
+
+ test ${#metadata_token_list[@]} -eq ${#ust_clock_token_value[@]}
+ ok $? "Tokens to check(${#metadata_token_list[@]}) and provided values(${#ust_clock_token_value[@]}) count is equal"
+
+ local metadata_path=$1
+
+ local counter=0
+ while [ "$counter" -lt "${#metadata_token_list[@]}" ]; do
+ result=$(jq -c -r "select(.type == \"clock-class\").${metadata_token_list[$counter]}" "$metadata_path")
+ test "$result" == "${ust_clock_token_value[$counter]}"
+ ok $? "Token \"${metadata_token_list[$counter]}\" expect:${ust_clock_token_value[$counter]} got:$result"
+ (( counter++ ))
+ done
+
}
function test_clock_override_metadata()
{
- local ctf_metadata_file=$(mktemp --tmpdir -p $TRACE_PATH ctf-metadata.XXXXXX)
- local clock_metadata_file=$(mktemp --tmpdir -p $TRACE_PATH clock-metadata.XXXXXX)
- local result=""
+ local trace_metadata_file_path
+ local trace_metadata_dir
diag "Clock override plugin metadata test"
start_lttng_sessiond
modprobe lttng-test
- create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
- eval ${TESTCMD}
+ eval "${TESTCMD}"
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
stop_lttng_sessiond
modprobe --remove lttng-test lttng-clock-plugin-test lttng-clock
- local TRACE_METADATA_FILE_PATH="$(find "$TRACE_PATH" -name metadata -type f)"
- local TRACE_METADATA_DIR="$(dirname "$TRACE_METADATA_FILE_PATH")"
-
- $BABELTRACE_BIN -o ctf-metadata -w $ctf_metadata_file $TRACE_METADATA_DIR
- ok $? "Metadata extraction from babeltrace"
-
- extract_clock_metadata $ctf_metadata_file $clock_metadata_file
-
- test ${#METADATA_TOKEN_LIST[@]} -eq ${#CLOCK_TOKEN_VALUE[@]}
- ok $? "Tokens to check(${#METADATA_TOKEN_LIST[@]}) and provided values(${#CLOCK_TOKEN_VALUE[@]}) count is equal"
+ trace_metadata_file_path="$(find "$TRACE_PATH" -name metadata -type f)"
+ trace_metadata_dir="$(dirname "$trace_metadata_file_path")"
- local counter=0
- while [ "$counter" -lt "${#METADATA_TOKEN_LIST[@]}" ]; do
- result=$(extract_clock_metadata_token $clock_metadata_file \
- ${METADATA_TOKEN_LIST[$counter]})
- test "$result" == "${CLOCK_TOKEN_VALUE[$counter]}"
- ok $? "Token \"${METADATA_TOKEN_LIST[$counter]}\" expect:${CLOCK_TOKEN_VALUE[$counter]} got:$result"
- let "counter++"
- done
- rm -rf $ctf_metadata_file
- rm -rf $clock_metadata_file
+ if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then
+ validate_tokens_ctf1 "$trace_metadata_dir"
+ elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then
+ validate_tokens_ctf2 "$trace_metadata_file_path"
+ fi
}
function test_clock_override_timestamp()
start_lttng_sessiond
modprobe lttng-test
- create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
- eval ${TESTCMD}
+ eval "${TESTCMD}"
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
# Use Babeltrace with "-n all" to give a comma separated list for
# easy extraction of timestamps.
- unique_timestamps_count=$($BABELTRACE_BIN -n all $TRACE_PATH | \
+ unique_timestamps_count=$($BABELTRACE_BIN -n all "$TRACE_PATH" | \
cut -d, -f1 | uniq | wc -l)
- test $unique_timestamps_count -gt 1
+ test "$unique_timestamps_count" -gt 1
ok $? "Unique event timestamps without clock override: $unique_timestamps_count expect >1"
modprobe --remove lttng-test
stop_lttng_sessiond
modprobe lttng-test
start_lttng_sessiond
- create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
enable_kernel_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
- eval ${TESTCMD}
+ eval "${TESTCMD}"
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
# Use Babeltrace with "-n all" to give a comma separated list for
# easy extraction of timestamps.
- unique_timestamps_count=$($BABELTRACE_BIN -n all $TRACE_PATH | \
+ unique_timestamps_count=$($BABELTRACE_BIN -n all "$TRACE_PATH" | \
cut -d, -f1 | uniq | wc -l)
- test $unique_timestamps_count -eq 1
+ test "$unique_timestamps_count" -eq 1
ok $? "Unique event timestamps with clock override: $unique_timestamps_count expect 1"
}
function test_per_uid ()
{
local metadata_path
+ local metadata_env
local value
local value2
local expected_path="${TRACE_PATH}/lttng-traces"
local session_name="per-uid"
- local metadata=$(mktemp --tmpdir tmp.test_${FUNCNAME[0]}_metadata.XXXXXX)
- local metadata_env=$(mktemp --tmpdir tmp.test_${FUNCNAME[0]}_metadata_env.XXXXXX)
+ metadata_env=$(mktemp --tmpdir tmp.test_${FUNCNAME[0]}_metadata_env.XXXXXX)
diag "Test UST metadata env field in per-uid mode"
create_lttng_session_ok "$session_name"
metadata_path=$(find "${expected_path}/${session_name}"* -name "metadata")
metadata_path=$(dirname "$metadata_path")
- $BABELTRACE_BIN --output-format=ctf-metadata "${metadata_path}" > "$metadata"
-
- # Extract "env" scope
- awk '/env {/,/};/' < "$metadata" > "$metadata_env"
+ extract_env_to_file "$metadata_path" "$metadata_env"
# Construct the expected path from the env metadata and use it to
# validate that all information make sense. This information is present
ok $? "Extracting hostname from env metadata"
is "$value" "$(hostname)" "Hostname is valid"
- rm -f "$metadata"
rm -f "$metadata_env"
}
local expected_path="${TRACE_PATH}/lttng-traces"
local session_name="per-pid"
- local metadata=$(mktemp --tmpdir tmp.test_${FUNCNAME[0]}_metadata.XXXXXX)
- local metadata_env=$(mktemp --tmpdir tmp.test_${FUNCNAME[0]}_metadata_env.XXXXXX)
+ local metadata_env
+
+ metadata_env=$(mktemp --tmpdir "tmp.test_${FUNCNAME[0]}_metadata_env.XXXXXX")
diag "Test UST metadata env field in per-pid mode"
create_lttng_session_ok "$session_name"
metadata_path=$(find "${expected_path}/${session_name}"* -name "metadata")
metadata_path=$(dirname "$metadata_path")
- $BABELTRACE_BIN --output-format=ctf-metadata "${metadata_path}" 1> "$metadata"
-
- # Extract "env" scope
- awk '/env {/,/};/' < "$metadata" > "$metadata_env"
+ extract_env_to_file "$metadata_path" "$metadata_env"
# Construct the expected path from the env metadata and use it to
# validate that all information make sense. This information is present
ok $? "Extracting hostname from env metadata"
is "$value" "$(hostname)" "Hostname is valid"
- rm -f "$metadata"
rm -f "$metadata_env"
}
#
# SPDX-License-Identifier: LGPL-2.1-only
-function get_env_value ()
+function get_env_value_ctf1 ()
{
local env_file=$1
local key=$2
fi
}
+# Expects a json representing the environment of a trace_class fragment.
+function get_env_value_ctf2 ()
+{
+ local env_file=$1
+ local key=$2
+ local result
+ local ret
+
+ if [[ "$key" == "vpid =" ]]; then
+ # The "vpid =" key value is only because the ctf1 extractor uses
+ # grep. jq use the complete key.
+ key="vpid"
+ fi
+
+
+ result=$(jq -r ".${key}" < "$env_file")
+ ret=$?
+ if [ $ret -eq 1 ]; then
+ echo "invalid_value_extraction"
+ return 1
+ else
+ echo "$result"
+ return 0
+ fi
+}
+
+function get_env_value ()
+{
+ if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then
+ get_env_value_ctf1 "$@"
+ elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then
+ get_env_value_ctf2 "$@"
+ else
+ return 1
+ fi
+}
+
+function extract_env_to_file_ctf1 ()
+{
+ local source_dir=$1
+ local destination=$2
+ local env
+
+ env=$($BABELTRACE_BIN --output-format=ctf-metadata "${source_dir}")
+
+ # Extract "env" scope
+ awk '/env {/,/};/' <<< "$env" > "$destination"
+}
+
+function extract_env_to_file_ctf2 ()
+{
+ local source_file="$1/metadata"
+ local destination=$2
+ local query="select(.type == \"trace-class\").environment"
+ jq "$query" "$source_file" > "$destination"
+}
+
+function extract_env_to_file ()
+{
+ if [ "$TRACE_FORMAT_OUTPUT" == "ctf1" ]; then
+ extract_env_to_file_ctf1 "$@"
+ return $?
+ elif [ "$TRACE_FORMAT_OUTPUT" == "ctf2" ]; then
+ extract_env_to_file_ctf2 "$@"
+ return $?
+ else
+ return 1
+ fi
+}
+
function iso8601_to_lttng_dir_datetime ()
{
local result=$1