Skip to content

Commit

Permalink
Add tests for statedump notifier
Browse files Browse the repository at this point in the history
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
  • Loading branch information
tahini committed Jun 13, 2018
1 parent 59e1268 commit b09999f
Show file tree
Hide file tree
Showing 10 changed files with 490 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ health_check
/tests/utils/testapp/gen-ust-events/gen-ust-events
/tests/utils/testapp/gen-ust-nevents-str/gen-ust-nevents-str
/tests/utils/testapp/gen-ust-nevents/gen-ust-nevents
/tests/utils/testapp/gen-ust-statedump-events/gen-ust-statedump-events
/tests/utils/testapp/gen-ust-tracef/gen-ust-tracef
/tests/utils/testapp/gen-syscall-events/gen-syscall-events
/tests/regression/tools/live/live_test
Expand Down
2 changes: 2 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -1143,6 +1143,7 @@ AC_CONFIG_FILES([
tests/regression/ust/clock-override/Makefile
tests/regression/ust/type-declarations/Makefile
tests/regression/ust/rotation-destroy-flush/Makefile
tests/regression/ust/statedump-notifier/Makefile
tests/regression/ust/blocking/Makefile
tests/stress/Makefile
tests/unit/Makefile
Expand All @@ -1156,6 +1157,7 @@ AC_CONFIG_FILES([
tests/utils/testapp/gen-ust-nevents/Makefile
tests/utils/testapp/gen-ust-nevents-str/Makefile
tests/utils/testapp/gen-syscall-events/Makefile
tests/utils/testapp/gen-ust-statedump-events/Makefile
tests/utils/testapp/gen-ust-tracef/Makefile
])

Expand Down
1 change: 1 addition & 0 deletions tests/fast_regression
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ regression/ust/python-logging/test_python_logging
regression/ust/getcpu-override/test_getcpu_override
regression/ust/clock-override/test_clock_override
regression/ust/rotation-destroy-flush/test_rotation_destroy_flush
regression/ust/statedump-notifier/test_statedump_notifier
regression/ust/blocking/test_blocking
regression/ust/test_event_basic
regression/ust/test_event_tracef
Expand Down
3 changes: 2 additions & 1 deletion tests/regression/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ TESTS += ust/before-after/test_before_after \
ust/test_event_tracef \
ust/test_event_perf \
ust/blocking/test_blocking \
ust/multi-lib/test_multi_lib
ust/multi-lib/test_multi_lib \
ust/statedump-notifier/test_statedump_notifier
endif # HAVE_LIBLTTNG_UST_CTL

if PYTHON_BINDING
Expand Down
16 changes: 16 additions & 0 deletions tests/regression/ust/statedump-notifier/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
noinst_SCRIPTS = test_statedump_notifier
EXTRA_DIST = test_statedump_notifier

all-local:
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \
for script in $(EXTRA_DIST); do \
cp -f $(srcdir)/$$script $(builddir); \
done; \
fi

clean-local:
@if [ x"$(srcdir)" != x"$(builddir)" ]; then \
for script in $(EXTRA_DIST); do \
rm -f $(builddir)/$$script; \
done; \
fi
309 changes: 309 additions & 0 deletions tests/regression/ust/statedump-notifier/test_statedump_notifier
Original file line number Diff line number Diff line change
@@ -0,0 +1,309 @@
#!/bin/bash
#
# Copyright (C) - 2018 Geneviève Bastien <gbastien@versatic.net>
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; version 2.1 of the License.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
TEST_DESC="UST - Statedump Notifier"

CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../../..
SESSION_NAME="statedump_notifier"

TESTAPP_PATH="$TESTDIR/utils/testapp"
TESTAPP_NAME="gen-ust-statedump-events"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
NUM_EVENT=1000000
NUM_STDP_EVENTS=2
EVENT_NAME="tp:tpteststdmp"
CHANNEL_NAME="testchan"
PAGE_SIZE=$(getconf PAGE_SIZE)
SIZE_LIMIT=$PAGE_SIZE
NUM_TESTS=76

# Ensure the daemons invoke abort on error.
export LTTNG_ABORT_ON_ERROR=1

source $TESTDIR/utils/utils.sh

# MUST set TESTDIR before calling those functions
function run_app_bg()
{
file_termination=$1
local file_initialization=$(mktemp -u)

$TESTAPP_BIN -1 ${STATEDUMP_FILE} ${file_initialization} ${file_termination} &
ok $? "Running application in background"

while [ ! -f "${file_initialization}" ]; do
sleep 0.5
done

rm -f ${file_initialization}
}

function run_app_fg()
{
$TESTAPP_BIN 0 ${STATEDUMP_FILE}
while [ ! -f "${STATEDUMP_FILE}" ]; do
sleep 0.5
done
ok $? "Ran application in foreground"
}

function test_statedump_notifier_enable_all_ust()
{

diag "Test statedump notifier enabling all ust events"

start_lttng_sessiond

create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "-a"
start_lttng_tracing_ok $SESSION_NAME

run_app_fg

# stop and destroy
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME

# Validate the statedump events are present
trace_matches $EVENT_NAME $NUM_STDP_EVENTS $TRACE_PATH

stop_lttng_sessiond
}

function test_statedump_regenerate()
{
diag "Test regenerating the statedump"
local file_termination=$(mktemp -u)

start_lttng_sessiond

create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "-a"
start_lttng_tracing_ok $SESSION_NAME

# Run the app in the background to regenerate statedump
run_app_bg ${file_termination}
while [ ! -f "${STATEDUMP_FILE}" ]; do
sleep 0.5
done

rm $STATEDUMP_FILE

# stop and destroy
regenerate_statedump_ok $SESSION_NAME
while [ ! -f "${STATEDUMP_FILE}" ]; do
sleep 0.5
done

touch ${file_termination}

stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME

NUM_EVENTS=$((2*$NUM_STDP_EVENTS))

# Validate the statedump events are present
trace_matches $EVENT_NAME $NUM_EVENTS $TRACE_PATH

rm -f ${file_termination}
stop_lttng_sessiond
}

function test_statedump_enable_only_this()
{
diag "Test statedump notifier enabling only statedump events"

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_fg

# stop and destroy
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME

# Validate the statedump events are present
trace_match_only $EVENT_NAME $NUM_STDP_EVENTS $TRACE_PATH

stop_lttng_sessiond
}

function test_statedump_enable_others()
{
diag "Test statedump notifier when the events are not enabled"

start_lttng_sessiond

create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_ust_lttng_event_ok $SESSION_NAME "lttng_ust_statedump:*"
start_lttng_tracing_ok $SESSION_NAME

run_app_fg

# stop and destroy
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME

# Validate the statedump events are present
trace_matches $EVENT_NAME 0 $TRACE_PATH

stop_lttng_sessiond
}

function test_statedump_multi_session()
{
diag "Test statedump with multiple sessions, with only one having the app statedump enabled"

start_lttng_sessiond

# BEFORE application is spawned, start 2 sessions
# Session 0 enables statedump events
create_lttng_session_ok "$SESSION_NAME-0" "$TRACE_PATH/0"
enable_ust_lttng_event_ok "$SESSION_NAME-0" "$EVENT_NAME"
start_lttng_tracing_ok "$SESSION_NAME-0"

# Session 1 enables other ust events
create_lttng_session_ok "$SESSION_NAME-1" "$TRACE_PATH/1"
enable_ust_lttng_event_ok "$SESSION_NAME-1" "lttng_ust_statedump:*"
start_lttng_tracing_ok "$SESSION_NAME-1"

# Run the app in foreground
run_app_fg

# Close and destroy sessions
stop_lttng_tracing_ok "$SESSION_NAME-0"
destroy_lttng_session_ok "$SESSION_NAME-0"
stop_lttng_tracing_ok "$SESSION_NAME-1"
destroy_lttng_session_ok "$SESSION_NAME-1"

# Validate traces
trace_match_only $EVENT_NAME $NUM_STDP_EVENTS $TRACE_PATH/0
trace_matches $EVENT_NAME 0 $TRACE_PATH/1

stop_lttng_sessiond
}

function test_statedump_app_already_alive()
{
diag "Test the statedump notifier when the application was already started"

# Run the app in the background to regenerate statedump
local file_termination=$(mktemp -u)
run_app_bg ${file_termination}

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

while [ ! -f "${STATEDUMP_FILE}" ]; do
sleep 0.5
done

# Kill the application
touch ${file_termination}

# stop and destroy
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME

# Validate the statedump events are present
trace_match_only $EVENT_NAME $NUM_STDP_EVENTS $TRACE_PATH

stop_lttng_sessiond
rm -f ${file_termination}
}

function test_statedump_app_running_multi_session()
{

diag "Test the statedump notifier, application already started, multi-session"

# Run the app in the background
local file_termination=$(mktemp -u)
run_app_bg ${file_termination}

start_lttng_sessiond

# Start 2 sessions
# Session 0 enables statedump events
create_lttng_session_ok "$SESSION_NAME-0" "$TRACE_PATH/0"
enable_ust_lttng_event_ok "$SESSION_NAME-0" "$EVENT_NAME"
start_lttng_tracing_ok "$SESSION_NAME-0"

# Session 1 enables other ust events
create_lttng_session_ok "$SESSION_NAME-1" "$TRACE_PATH/1"
enable_ust_lttng_event_ok "$SESSION_NAME-1" "lttng_ust_statedump:*"
start_lttng_tracing_ok "$SESSION_NAME-1"

while [ ! -f "${STATEDUMP_FILE}" ]; do
sleep 0.5
done

# Kill the application
touch ${file_termination}

# Close and destroy sessions
stop_lttng_tracing_ok "$SESSION_NAME-0"
destroy_lttng_session_ok "$SESSION_NAME-0"
stop_lttng_tracing_ok "$SESSION_NAME-1"
destroy_lttng_session_ok "$SESSION_NAME-1"

# Validate traces
trace_match_only $EVENT_NAME $NUM_STDP_EVENTS $TRACE_PATH/0
trace_matches $EVENT_NAME 0 $TRACE_PATH/1

stop_lttng_sessiond
rm -f ${file_termination}
}

TESTS=(
"test_statedump_notifier_enable_all_ust"
"test_statedump_regenerate"
"test_statedump_enable_only_this"
"test_statedump_enable_others"
"test_statedump_multi_session"
"test_statedump_app_already_alive"
"test_statedump_app_running_multi_session"
)

TEST_COUNT=${#TESTS[@]}
i=0

plan_tests $NUM_TESTS

print_test_banner "$TEST_DESC"

while [ "$i" -lt "$TEST_COUNT" ]; do

trap signal_cleanup SIGTERM SIGINT

TRACE_PATH=$(mktemp -d)
STATEDUMP_FILE=$(mktemp -u)

# Execute test
${TESTS[$i]}

rm $STATEDUMP_FILE
rm -rf $TRACE_PATH

let "i++"
done
3 changes: 2 additions & 1 deletion tests/utils/testapp/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ SUBDIRS = gen-ust-events \
gen-ust-nevents \
gen-ust-nevents-str \
gen-ust-tracef \
gen-syscall-events
gen-syscall-events \
gen-ust-statedump-events

if HAVE_MODULES_USERSPACE_CALLSTACK_CONTEXT
SUBDIRS += gen-syscall-events-callstack
Expand Down
10 changes: 10 additions & 0 deletions tests/utils/testapp/gen-ust-statedump-events/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
AM_CPPFLAGS += -I$(top_srcdir)/tests/utils -I$(srcdir) \
-I$(top_srcdir)/tests/utils/testapp

if HAVE_LIBLTTNG_UST_CTL
noinst_PROGRAMS = gen-ust-statedump-events
gen_ust_statedump_events_SOURCES = gen-ust-statedump-events.c tp.h
gen_ust_statedump_events_LDADD = -llttng-ust -lurcu-bp \
$(top_builddir)/tests/utils/libtestutils.la \
$(DL_LIBS)
endif
Loading

0 comments on commit b09999f

Please sign in to comment.