1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
#!/bin/bash
#
# SPDX-FileCopyrightText: 2013 Christian Babeux <christian.babeux@efficios.com>
# Copyright (C) 2014, 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
#
# SPDX-License-Identifier: GPL-2.0-only
#
TEST_DESC="Kernel tracer - Clock override plugin"
CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../..
SESSION_NAME="clock_override"
NUM_TESTS=32
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
function signal_cleanup()
{
diag "*** Exiting ***"
stop_lttng_sessiond
modprobe --remove lttng-test lttng-clock-plugin-test lttng-clock
full_cleanup
}
function extract_clock_metadata()
{
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
ok $? "Clock metadata extraction"
}
function extract_clock_metadata_token()
{
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 '"'
}
function test_clock_override_metadata()
{
local ctf_metadata_file=$(TMPDIR="$TRACE_PATH" mktemp -t ctf-metadata.XXXXXX)
local clock_metadata_file=$(TMPDIR="$TRACE_PATH" mktemp -t clock-metadata.XXXXXX)
local result=""
diag "Clock override plugin metadata test"
modprobe lttng-clock-plugin-test
start_lttng_sessiond
modprobe lttng-test
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}
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")"
_run_babeltrace_cmd -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"
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
}
function test_clock_override_timestamp()
{
diag "Clock override test"
# Test without the plugin
diag "Plugin disabled"
start_lttng_sessiond
modprobe lttng-test
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}
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=$(_run_babeltrace_cmd -n all $TRACE_PATH | \
cut -d, -f1 | uniq | wc -l)
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
# Test with clock override plugin.
diag "Plugin enabled"
modprobe lttng-clock-plugin-test
modprobe lttng-test
start_lttng_sessiond
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}
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
modprobe --remove lttng-test
stop_lttng_sessiond
modprobe --remove lttng-clock-plugin-test lttng-clock
# Use Babeltrace with "-n all" to give a comma separated list for
# easy extraction of timestamps.
unique_timestamps_count=$(_run_babeltrace_cmd -n all $TRACE_PATH | \
cut -d, -f1 | uniq | wc -l)
test $unique_timestamps_count -eq 1
ok $? "Unique event timestamps with clock override: $unique_timestamps_count expect 1"
}
# MUST set TESTDIR before calling those functions
plan_tests $NUM_TESTS
print_test_banner "$TEST_DESC"
bail_out_if_no_babeltrace
TESTS=(
"test_clock_override_metadata"
"test_clock_override_timestamp"
)
TEST_COUNT=${#TESTS[@]}
i=0
check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
{
lttng_modules_loaded_fail
validate_lttng_modules_present
trap signal_cleanup SIGTERM SIGINT
while [ "$i" -lt "$TEST_COUNT" ]; do
TRACE_PATH=$(mktemp -d -t tmp.test_clock_override_trace_path.XXXXXX)
# Execute test
${TESTS[$i]}
rm -rf $TRACE_PATH
let "i++"
done
lttng_modules_loaded_fail
}
|