#!/bin/bash # # Copyright (C) 2019 Jonathan Rajotte # # SPDX-License-Identifier: LGPL-2.1-only TEST_DESC="Metadata env - Kernel space tracing" CURDIR=$(dirname "$0")/ TESTDIR=$CURDIR/../../.. EVENT_NAME="lttng_test_filter_event" TRACE_PATH=$(mktemp -d -t tmp.test_metadata_env_kernel_trace_path.XXXXXX) NUM_TESTS=13 source "$TESTDIR/utils/utils.sh" # Fetch utils functions common to ust and kernel tests. source "$CURDIR/utils.sh" function test_kernel () { local metadata_path local metadata local metadata_env local expected_path="${TRACE_PATH}/lttng-traces" local session_name="kernel" metadata=$(mktemp -t "tmp.test_kernel_metadata.XXXXXX") metadata_env=$(mktemp -t "tmp.test_kernel_metadata_env.XXXXXX") diag "Test Kernel metadata env field" create_lttng_session_ok "$session_name" enable_kernel_lttng_event_ok "$session_name" "$EVENT_NAME" start_lttng_tracing_ok "$session_name" echo -n "10" > /proc/lttng-test-filter-event stop_lttng_tracing_ok "$session_name" destroy_lttng_session_ok "$session_name" # bt1 accepts only a directory while bt2 accepts either the metadata # file directly or a directory with an immediate metadata file. # Settle for the common denominator. 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" # Construct the expected path from the env metadata and use it to # validate that all information make sense. This information is present # to allow trace viewer to recreate the same directory hierarchy. # Trace name local trace_name trace_name=$(get_env_value "$metadata_env" trace_name) ok $? "Extracting trace_name from env metadata: \`$trace_name\`" expected_path="${expected_path}/${trace_name}" # Session creation time local trace_creation_datetime trace_creation_datetime=$(get_env_value "$metadata_env" trace_creation_datetime) ok $? "Extracting trace_creation_datetime from env metadata: \`$trace_creation_datetime\`" trace_creation_datetime=$(iso8601_to_lttng_dir_datetime "$trace_creation_datetime") expected_path="${expected_path}-${trace_creation_datetime}" # Domain local domain domain=$(get_env_value "$metadata_env" domain) ok $? "Extracting domain from env metadata: \`$domain\`" expected_path="${expected_path}/${domain}" # Append "metadata" and test that we find the file. expected_path="${expected_path}/metadata" test -f "$expected_path" ok $? "Reconstructed path from metadata is an existing file: \`$expected_path\`" # Hostname # The hostname is not part of the lttng hierarchy still we can test for # its validity here. local hostname hostname=$(get_env_value "$metadata_env" hostname) ok $? "Extracting hostname from env metadata: \`$hostname\`" is "$hostname" "$(hostname)" "Extracted hostname matches current hostname" rm -f "$metadata" rm -f "$metadata_env" } plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" bail_out_if_no_babeltrace check_skip_kernel_test "$NUM_TESTS" "Skipping kernel metadata tests." || { validate_lttng_modules_present modprobe lttng-test # Use LTTNG_HOME since we want the complete "default" lttng directory hierarchy # with "-/...". export LTTNG_HOME="$TRACE_PATH" start_lttng_sessiond tests=( test_kernel ) for fct_test in "${tests[@]}"; do ${fct_test} done modprobe --remove lttng-test stop_lttng_sessiond unset LTTNG_HOME } rm -rf "$TRACE_PATH"