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
|
#!/bin/bash
#
# SPDX-FileCopyrightText: 2015 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
#
# SPDX-License-Identifier: LGPL-2.1-only
TEST_DESC="UST - Clock override plugin"
CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../../..
SESSION_NAME="clock_override"
TESTAPP_PATH="$TESTDIR/utils/testapp"
TESTAPP_NAME="gen-ust-events"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
NUM_EVENT=256
EVENT_NAME="tp:tptest"
LTTNG_UST_CLOCK_PLUGIN_SO="lttng-ust-clock-override-test.so"
LIBS_DIR=".libs"
METADATA_CLOCK_START_TOKEN="clock {"
METADATA_CLOCK_END_TOKEN="};"
METADATA_TOKEN_LIST=(
"name"
"uuid"
"description"
"freq"
)
UST_CLOCK_TOKEN_VALUE=(
"lttng_test_clock_override"
"83c63deb-7aa4-48fb-abda-946f400d76e6"
"Freeze time with 1KHz for regression test"
"1000"
)
NUM_TESTS=33
source $TESTDIR/utils/utils.sh
# MUST set TESTDIR before calling those functions
function run_app()
{
$TESTAPP_BIN -i $NUM_EVENT
ok $? "Application done"
}
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_getcpu_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"
# LTTNG_UST_CLOCK_PLUGIN need to be defined for lttng-sessiond.
export LTTNG_UST_CLOCK_PLUGIN=$CURDIR/.libs/$LTTNG_UST_CLOCK_PLUGIN_SO
start_lttng_sessiond
unset LTTNG_UST_CLOCK_PLUGIN
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
run_app
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
stop_lttng_sessiond
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 ${#UST_CLOCK_TOKEN_VALUE[@]}
ok $? "Tokens to check(${#METADATA_TOKEN_LIST[@]}) and provided values(${#UST_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" == "${UST_CLOCK_TOKEN_VALUE[$counter]}"
ok $? "Token \"${METADATA_TOKEN_LIST[$counter]}\" expect:${UST_CLOCK_TOKEN_VALUE[$counter]} got:$result"
let "counter++"
done
rm -rf $ctf_metadata_file
rm -rf $clock_metadata_file
}
function test_getcpu_override_timestamp()
{
diag "Clock override test"
# Test without the plugin
diag "Plugin disabled"
start_lttng_sessiond
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
run_app
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"
stop_lttng_sessiond
# Test with clock override plugin.
# LTTNG_UST_CLOCK_PLUGIN need to be defined for both lttng-sessiond.
diag "Plugin enabled"
export LTTNG_UST_CLOCK_PLUGIN=$CURDIR/.libs/$LTTNG_UST_CLOCK_PLUGIN_SO
start_lttng_sessiond
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME"
start_lttng_tracing_ok $SESSION_NAME
run_app
unset LTTNG_UST_CLOCK_PLUGIN
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
stop_lttng_sessiond
# 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"
}
plan_tests $NUM_TESTS
print_test_banner "$TEST_DESC"
if [ -x "$CURDIR/$LIBS_DIR/$LTTNG_UST_CLOCK_PLUGIN_SO" ]; then
foundobj=1
else
foundobj=0
fi
skip $foundobj "No shared object generated. Skipping all tests." $NUM_TESTS && exit 0
TESTS=(
"test_getcpu_override_metadata"
"test_getcpu_override_timestamp"
)
TEST_COUNT=${#TESTS[@]}
i=0
while [ "$i" -lt "$TEST_COUNT" ]; do
TRACE_PATH=$(mktemp -d -t tmp.test_clock_override_ust_trace_path.XXXXXX)
# Execute test
${TESTS[$i]}
rm -rf $TRACE_PATH
let "i++"
done
|