Tests: use jq for extracting info from ctf2 traces
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Wed, 10 Aug 2022 22:38:55 +0000 (18:38 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Fri, 19 Aug 2022 16:11:10 +0000 (12:11 -0400)
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I2a7542fd5548015721b6d03be6c1f839df73cdb3

tests/regression/kernel/test_clock_override
tests/regression/tools/metadata/test_kernel
tests/regression/tools/metadata/test_ust
tests/regression/tools/metadata/utils.sh

index 0a44f5f288d5acf6e1f597295c298ccd83b6f14f..104eb728ad1748a95e7fe666449aa286d3626528 100755 (executable)
@@ -8,7 +8,7 @@
 
 TEST_DESC="Kernel tracer - Clock override plugin"
 
-CURDIR=$(dirname $0)/
+CURDIR=$(dirname "$0")/
 TESTDIR=$CURDIR/../..
 SESSION_NAME="clock_override"
 
@@ -17,25 +17,14 @@ EVENT_NAME="lttng_test_filter_event"
 
 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 ***"
@@ -44,29 +33,107 @@ function signal_cleanup()
        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"
 
@@ -74,37 +141,24 @@ function test_clock_override_metadata()
        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()
@@ -117,18 +171,18 @@ 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
@@ -141,10 +195,10 @@ function test_clock_override_timestamp()
        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
 
@@ -153,9 +207,9 @@ function test_clock_override_timestamp()
 
        # 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"
 }
 
index 08743008bccf339052669b31cca6756d0b8b1da6..246b02460a561a10db46a371493a361faff3f033 100755 (executable)
@@ -26,8 +26,9 @@ function test_kernel ()
 
        local expected_path="${TRACE_PATH}/lttng-traces"
        local session_name="kernel"
-       local metadata=$(mktemp --tmpdir "tmp.${FUNCNAME[0]}_metadata.XXXXXX")
-       local metadata_env=$(mktemp --tmpdir "tmp.${FUNCNAME[0]}_metadata_env.XXXXXX")
+       local metadata_env
+
+       metadata_env=$(mktemp --tmpdir "tmp.${FUNCNAME[0]}_metadata_env.XXXXXX")
 
        diag "Test Kernel metadata env field"
        create_lttng_session_ok "$session_name"
@@ -45,10 +46,7 @@ function test_kernel ()
        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
@@ -83,7 +81,6 @@ function test_kernel ()
        ok $? "Extracting hostname from env metadata"
        is "$value" "$(hostname)" "Hostname is valid"
 
-       rm -f "$metadata"
        rm -f "$metadata_env"
 }
 
index 6b17b02cf6439eed92c09057254a00d01755ae84..5c999851561ca9d01d61770738d78faf66a7461f 100755 (executable)
@@ -32,13 +32,13 @@ fi
 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"
@@ -56,10 +56,7 @@ function test_per_uid ()
        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
@@ -112,7 +109,6 @@ function test_per_uid ()
        ok $? "Extracting hostname from env metadata"
        is "$value" "$(hostname)" "Hostname is valid"
 
-       rm -f "$metadata"
        rm -f "$metadata_env"
 }
 
@@ -125,8 +121,9 @@ function test_per_pid ()
 
        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"
@@ -147,10 +144,7 @@ function test_per_pid ()
        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
@@ -214,7 +208,6 @@ function test_per_pid ()
        ok $? "Extracting hostname from env metadata"
        is "$value" "$(hostname)" "Hostname is valid"
 
-       rm -f "$metadata"
        rm -f "$metadata_env"
 }
 
index 99a6cc6d856caeb3af20e9188a0729717733aef6..d457946aec972bf66ca558bc654ade49527edb64 100644 (file)
@@ -4,7 +4,7 @@
 #
 # SPDX-License-Identifier: LGPL-2.1-only
 
-function get_env_value ()
+function get_env_value_ctf1 ()
 {
        local env_file=$1
        local key=$2
@@ -34,6 +34,76 @@ function get_env_value ()
        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
This page took 0.032648 seconds and 5 git commands to generate.