Fix: Python agent tests are always skipped
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Mon, 24 Aug 2015 15:08:29 +0000 (08:08 -0700)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 4 Sep 2015 22:43:43 +0000 (18:43 -0400)
v2: Change the configure report section to emulate the java ust agent test
reporting.

Introduce --enable-test-python{2,3}-agent and --enable-test-python-agent-all
flag on configure.

Configure searches for the python agent for both Python 2 and 3 and
enables or skips their associated tests based on the result.

When using the --enable-test-python{2,3}-agent & --enable-test-python-agent-all
flags, a strict checks on tests dependancies is performed and fails the
configure instead of simply disabling the tests.

--disable* flags can be used to force tests skipping.

Also fixes a minor bug in agent test on enabling event with filtering.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
.gitignore
configure.ac
tests/regression/ust/python-logging/test_python_logging [deleted file]
tests/regression/ust/python-logging/test_python_logging.in [new file with mode: 0755]

index 5d24bec18733cc2759cec29d5beaabe7dc33d350..0ce35f95047e373f138561171d1640f958554d0e 100644 (file)
@@ -85,6 +85,7 @@ health_check
 /tests/regression/ust/fork/fork
 /tests/regression/ust/fork/fork2
 /tests/regression/ust/libc-wrapper/prog
+tests/regression/ust/python-logging/test_python_logging
 /tests/utils/testapp/gen-ust-nevents/gen-ust-nevents
 /tests/utils/testapp/gen-ust-tracef/gen-ust-tracef
 /tests/regression/tools/live/live_test
index 55977bc279c232df9da1408faf77fcce1ab064df..1cc82c495cb7fb09cf471e68329d7febc8f3f8a7 100644 (file)
@@ -414,6 +414,104 @@ if test "x$test_java_agent_jul" = "xyes" || test "x$test_java_agent_log4j" = "xy
        fi
 fi
 
+# Python agent test
+UST_PYTHON_AGENT="lttngust"
+
+AC_ARG_ENABLE(test-python2-agent,
+       AS_HELP_STRING([--enable-test-python2-agent],
+               [enable tests for python2 agent. Python2 interpreter path can be overridden by setting the PYTHON2 environment variable. Default: Autodetect]
+       ),[:],[test_python2_agent_autodetect=yes]
+)
+
+AC_ARG_ENABLE(test-python3-agent,
+       AS_HELP_STRING([--enable-test-python3-agent],
+               [enable tests for python3 agent. Python3 interpreter path can be overridden by setting the PYTHON3 environment variable. Default: Autodetect]
+       ),[:],[test_python3_agent_autodetect=yes]
+)
+
+AC_ARG_ENABLE(test-python-agent-all,
+       AS_HELP_STRING([--enable-test-python-agent-all],
+               [enable test for all python{2/3} agent.]
+       ),
+)
+
+AS_IF([test ! -z "$enable_test_python_agent_all"], [
+       unset test_python2_agent_autodetect
+       unset test_python3_agent_autodetect
+])
+
+AS_IF([test "x$enable_test_python_agent_all" = "xyes"], [
+       enable_test_python2_agent=yes
+       enable_test_python3_agent=yes
+])
+
+AS_IF([test "x$enable_test_python_agent_all" = "xno"], [
+       enable_test_python2_agent=no
+       enable_test_python3_agent=no
+])
+
+
+AS_IF([test "x$enable_test_python2_agent" = "xyes" -o "x$test_python2_agent_autodetect" = "xyes" ], [
+       AS_IF([test -z "$PYTHON2"], [
+                       PYTHON2=python2
+               ], [
+                       AC_MSG_WARN([Using user-defined PYTHON2 ($PYTHON2) for lttng-ust python2 agent check])
+       ])
+
+       AC_PATH_PROG([PYTHON2_BIN],[$PYTHON2])
+       AS_IF([test -z "$PYTHON2_BIN"], [
+               AS_IF([test -z "$test_python2_agent_autodetect"],[
+                       AC_MSG_ERROR([No python2 interpreter found. PYTHON2 can be set to override default interpreter path])
+               ])
+       ], [
+               AC_MSG_CHECKING([for python2 lttng-ust agent])
+               AS_IF([$PYTHON2_BIN -c "import $UST_PYTHON_AGENT" 2>/dev/null], [
+                       PYTHON2_AGENT=$PYTHON2_BIN
+                       AC_MSG_RESULT([yes])
+                       RUN_PYTHON_AGENT_TEST=yes
+               ], [
+                       AC_MSG_RESULT([no])
+                       AS_IF([test -z "$test_python2_agent_autodetect"],[
+                               AC_MSG_ERROR([No python2 agent found. The path to the agent can be specified by setting the PYTHONPATH environment variable.])
+                       ])
+               ])
+
+       ])
+
+])
+
+AS_IF([test "x$enable_test_python3_agent" = "xyes" -o "x$test_python3_agent_autodetect" = "xyes" ], [
+       AS_IF([test -z "$PYTHON3"], [
+               PYTHON3=python3
+       ], [
+               AC_MSG_WARN([Using user-defined PYTHON3 ($PYTHON3) for lttng-ust python3 agent check])
+       ])
+
+       AC_PATH_PROG([PYTHON3_BIN],[$PYTHON3])
+       AS_IF([test -z "$PYTHON3_BIN"], [
+               AS_IF([test -z "$test_python3_agent_autodetect"],[
+                       AC_MSG_ERROR([No python3 interpreter found. PYTHON3 can be set to override default interpreter path])
+               ])
+       ], [
+               AC_MSG_CHECKING([for python3 lttng-ust agent])
+               AS_IF([$PYTHON3_BIN -c "import $UST_PYTHON_AGENT" 2>/dev/null], [
+                       PYTHON3_AGENT=$PYTHON3_BIN
+                       AC_MSG_RESULT([yes])
+                       RUN_PYTHON_AGENT_TEST=yes
+               ], [
+                       AC_MSG_RESULT([no])
+                       AS_IF([test -z "$test_python3_agent_autodetect"],[
+                               AC_MSG_ERROR([No python3 agent found. The path to the agent can be specified by setting the PYTHONPATH environment variable.])
+                       ])
+               ])
+
+       ])
+])
+
+AC_SUBST([RUN_PYTHON_AGENT_TEST])
+AC_SUBST([PYTHON2_AGENT])
+AC_SUBST([PYTHON3_AGENT])
+
 AC_SYS_LARGEFILE
 
 # C compiler tests
@@ -549,6 +647,9 @@ AC_CONFIG_FILES([
        tests/utils/testapp/gen-ust-tracef/Makefile
 ])
 
+# Inject variable into python test script
+AC_CONFIG_FILES([tests/regression/ust/python-logging/test_python_logging],[chmod +x tests/regression/ust/python-logging/test_python_logging])
+
 AC_OUTPUT
 
 #
@@ -607,6 +708,20 @@ AS_IF([test "x$test_java_agent_log4j" = "xyes"],[
        AS_ECHO("Disabled")
 ])
 
+AS_ECHO_N("LTTng-UST Python2 agent tests: ")
+AS_IF([test ! -z "$PYTHON2_AGENT"],[
+       AS_ECHO("Enabled")
+],[
+       AS_ECHO("Disabled")
+])
+
+AS_ECHO_N("LTTng-UST Python3 agent tests: ")
+AS_IF([test ! -z "$PYTHON3_AGENT"],[
+       AS_ECHO("Enabled")
+],[
+       AS_ECHO("Disabled")
+])
+
 #Python binding enabled/disabled
 AS_ECHO_N("Python binding: ")
 AS_IF([test "x${enable_python_binding:-yes}" = xyes], [
diff --git a/tests/regression/ust/python-logging/test_python_logging b/tests/regression/ust/python-logging/test_python_logging
deleted file mode 100755 (executable)
index b4fb410..0000000
+++ /dev/null
@@ -1,603 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) - 2015 Philippe Proulx <pproulx@efficios.com>
-# Copyright (C) - 2014 David Goulet <dgoulet@efficios.com>
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License, version 2 only, as published by
-# the Free Software Foundation.
-#
-# This program 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 General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-TEST_DESC="Python support"
-
-CURDIR=$(dirname $0)/
-TESTDIR=$CURDIR/../../..
-NR_ITER=5
-NR_SEC_WAIT=1
-TESTAPP_NAME="test"
-TESTAPP_BIN="$TESTAPP_NAME.py"
-TESTAPP_PATH="$CURDIR"
-SESSION_NAME="python-test"
-EVENT_NAME="python-ev-test1"
-EVENT_NAME2="python-ev-test2"
-OUTPUT_DEST="/dev/null"
-
-NUM_TESTS=310
-
-source $TESTDIR/utils/utils.sh
-
-function run_app
-{
-       local python=$1
-       local debug_tp=$2
-       local fire_second_tp=$3
-
-       $python $TESTAPP_PATH/$TESTAPP_BIN $NR_ITER $NR_SEC_WAIT $debug_tp $fire_second_tp
-}
-
-function run_app_background
-{
-       run_app $@ &
-}
-
-function enable_python_loglevel_only()
-{
-       sess_name=$1
-       event_name="$2"
-       loglevel=$3
-       channel_name=$4
-
-       if [ -z $channel_name ]; then
-               # default channel if none specified
-               chan=""
-       else
-               chan="-c $channel_name"
-       fi
-
-       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" $chan -s $sess_name -p >$OUTPUT_DEST
-       ok $? "Enable Python event $event_name for session $sess_name with loglevel-only $loglevel"
-}
-
-function enable_python_filter()
-{
-       local sess_name="$1"
-       local event_name="$2"
-       local filter="$3"
-
-       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -p --filter "$filter" >/dev/null 2>&1
-       ok $? "Enable event $event_name with filter $filter for session $sess_name"
-}
-
-function enable_python_filter_loglevel_only()
-{
-       local sess_name="$1"
-       local event_name="$2"
-       local filter="$3"
-       local loglevel="$4"
-
-       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" -s $sess_name -p --filter "$filter" >$OUTPUT_DEST
-       ok $? "Enable event $event_name with filter \"$filter\" and loglevel-only $loglevel for session $sess_name"
-}
-
-# MUST set TESTDIR before calling those functions
-
-function test_python_before_start ()
-{
-       diag "Test Python application BEFORE tracing starts"
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app_background $1
-
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Wait for the applications started in background
-       wait
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_after_start ()
-{
-       diag "Test Python application AFTER tracing starts"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app $1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_loglevel ()
-{
-       diag "Test Python application with loglevel"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "INFO"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app $1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       diag "Test Python applications with lower loglevel"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "CRITICAL"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app $1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting 0 events.
-       trace_match_only $EVENT_NAME 0 $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       diag "Test Python applications with higher loglevel"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "DEBUG"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app $1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
-       return $?
-}
-
-function test_python_loglevel_multiple ()
-{
-       diag "Test Python application with multiple loglevel"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "INFO"
-       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "DEBUG"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire two TP.
-       run_app $1 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events times two.
-       trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
-       enable_python_lttng_event_loglevel $SESSION_NAME '*' "INFO"
-       enable_python_lttng_event_loglevel $SESSION_NAME '*' "DEBUG"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire two TP.
-       run_app $1 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting all events times two.
-       trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_multi_session_loglevel()
-{
-       diag "Test Python with multiple session"
-
-       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
-       enable_python_loglevel_only $SESSION_NAME-1 '*' "INFO"
-       start_lttng_tracing_ok $SESSION_NAME-1
-
-       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
-       enable_python_loglevel_only $SESSION_NAME-2 '*' "DEBUG"
-       start_lttng_tracing_ok $SESSION_NAME-2
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 1 1
-
-       stop_lttng_tracing_ok $SESSION_NAME-1
-       stop_lttng_tracing_ok $SESSION_NAME-2
-       destroy_lttng_session_ok $SESSION_NAME-1
-       destroy_lttng_session_ok $SESSION_NAME-2
-
-       # Expecting NR_ITER events being the main event and the second tp one.
-       trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-       trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       # Expectin NR_ITER events being the debug TP.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_multi_session_disable()
-{
-       diag "Test Python with multiple session with disabled event"
-
-       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
-       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
-       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME2
-       disable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME-1
-
-       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
-       enable_python_lttng_event $SESSION_NAME-2 $EVENT_NAME2
-       start_lttng_tracing_ok $SESSION_NAME-2
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME-1
-       stop_lttng_tracing_ok $SESSION_NAME-2
-       destroy_lttng_session_ok $SESSION_NAME-1
-       destroy_lttng_session_ok $SESSION_NAME-2
-
-       # Validate test. Expecting one event of the second TP.
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       # Validate test. Expecting one event of the second TP.
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_multi_session_disable_wildcard()
-{
-       diag "Test Python with multiple session with disabled wildcard event"
-
-       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
-       enable_python_lttng_event $SESSION_NAME-1 '*'
-
-       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
-       enable_python_lttng_event $SESSION_NAME-2 '*'
-
-       disable_python_lttng_event $SESSION_NAME-1 '*'
-
-       start_lttng_tracing_ok $SESSION_NAME-1
-       start_lttng_tracing_ok $SESSION_NAME-2
-
-       run_app $1
-
-       stop_lttng_tracing_ok $SESSION_NAME-1
-       stop_lttng_tracing_ok $SESSION_NAME-2
-       destroy_lttng_session_ok $SESSION_NAME-1
-       destroy_lttng_session_ok $SESSION_NAME-2
-
-       # Validate test. Expecting NO event of the first TP.
-       trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       # Validate test. Expecting all events of the first TP.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_disable_all()
-{
-       diag "Test Python with multiple session with disabled all event"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       enable_python_lttng_event $SESSION_NAME '*'
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
-
-       disable_python_lttng_event $SESSION_NAME '*'
-
-       start_lttng_tracing_ok $SESSION_NAME
-
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting NO event of the first TP and second TP.
-       trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
-       trace_match_only $EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_multi_session()
-{
-       diag "Test Python with multiple session"
-
-       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
-       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME-1
-
-       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
-       enable_python_lttng_event $SESSION_NAME-2 $EVENT_NAME2
-       start_lttng_tracing_ok $SESSION_NAME-2
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME-1
-       stop_lttng_tracing_ok $SESSION_NAME-2
-       destroy_lttng_session_ok $SESSION_NAME-1
-       destroy_lttng_session_ok $SESSION_NAME-2
-
-       # Validate test. Expecting all events of first TP
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       # Validate test. Expecting one event of the second TP.
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_destroy_session()
-{
-       diag "Test Python two session with destroy"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/first-sess
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app_background $1 0 1
-
-       # Wait for the applications started in background
-       wait
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting at least one event num 1
-       validate_trace $EVENT_NAME $TRACE_PATH/first-sess
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/second-sess
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay
-       run_app_background $1 0 1
-
-       # Wait for the applications started in background
-       wait
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting only one event num 2
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/second-sess
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_filtering()
-{
-       diag "Test Python filtering"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       # Enable all event with a filter.
-       enable_python_filter $SESSION_NAME '*' 'msg == "python-ev-test2 fired [INFO]"'
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting one event of the second TP only.
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       # Enable first Logger but filter msg payload for the INFO one while
-       # triggering the debug and second TP.
-       enable_python_filter $SESSION_NAME $EVENT_NAME 'msg == "python-ev-test1 fired" [INFO]'
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay, fire debug and second TP.
-       run_app $1 1 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting NR_ITER event of the main INFO tp.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_disable()
-{
-       diag "Test Python disable event"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       # Enable all event with a filter.
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
-       disable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting one event of the second TP only.
-       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_disable_enable()
-{
-       diag "Test Python disable event followed by an enable"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       # Enable all event with a filter.
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       disable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting NR_ITER event of the main INFO tp.
-       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-function test_python_filter_loglevel()
-{
-       local BOGUS_EVENT_NAME="not_a_real_event"
-       local FILTER="int_loglevel > 30 || int_loglevel < 30"
-       local ALL_EVENTS="."
-
-       diag "Test Python a filter with a loglevel"
-
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
-       # Enable an event with a filter and the loglevel-only option.
-       enable_python_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
-       disable_python_lttng_event $SESSION_NAME $BOGUS_EVENT_NAME
-       enable_python_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
-       start_lttng_tracing_ok $SESSION_NAME
-
-       # Run 5 times with a 1 second delay and fire second TP.
-       run_app $1 0 1
-
-       stop_lttng_tracing_ok $SESSION_NAME
-       destroy_lttng_session_ok $SESSION_NAME
-
-       # Validate test. Expecting no events.
-       trace_match_only $ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
-       if [ $? -ne 0 ]; then
-               return $?
-       fi
-}
-
-plan_tests $NUM_TESTS
-
-print_test_banner "$TEST_DESC"
-
-if [ ! -f "$TESTAPP_BIN" ]; then
-       withapp=0
-else
-       withapp=1
-fi
-
-skip $withapp "Python support is needed. Skipping all tests." $NUM_TESTS ||
-{
-       start_lttng_sessiond
-
-       tests=(
-               test_python_multi_session_disable_wildcard
-               test_python_multi_session_disable
-               test_python_disable
-               test_python_disable_enable
-               test_python_disable_all
-               test_python_filtering
-               test_python_multi_session_loglevel
-               test_python_destroy_session
-               test_python_loglevel
-               test_python_loglevel_multiple
-               test_python_before_start
-               test_python_after_start
-               test_python_multi_session
-               test_python_filter_loglevel
-       )
-
-       for python_version in 2 3;
-       do
-               for fct_test in ${tests[@]};
-               do
-                       TRACE_PATH=$(mktemp -d)
-
-                       diag "(Python $python_version)"
-                       ${fct_test} python$python_version
-                       if [ $? -ne 0 ]; then
-                               break;
-                       fi
-                       rm -rf $TRACE_PATH
-               done
-       done
-
-       stop_lttng_sessiond
-}
diff --git a/tests/regression/ust/python-logging/test_python_logging.in b/tests/regression/ust/python-logging/test_python_logging.in
new file mode 100755 (executable)
index 0000000..8aff408
--- /dev/null
@@ -0,0 +1,610 @@
+#!/bin/bash
+#
+# Copyright (C) - 2015 Philippe Proulx <pproulx@efficios.com>
+# Copyright (C) - 2014 David Goulet <dgoulet@efficios.com>
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License, version 2 only, as published by
+# the Free Software Foundation.
+#
+# This program 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 General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+TEST_DESC="Python support"
+
+CURDIR=$(dirname $0)/
+TESTDIR=$CURDIR/../../..
+NR_ITER=5
+NR_SEC_WAIT=0
+TESTAPP_NAME="test"
+TESTAPP_BIN="$TESTAPP_NAME.py"
+TESTAPP_PATH="$CURDIR"
+SESSION_NAME="python-test"
+EVENT_NAME="python-ev-test1"
+EVENT_NAME2="python-ev-test2"
+OUTPUT_DEST="/dev/null"
+
+python_versions=(@PYTHON2_AGENT@ @PYTHON3_AGENT@)
+run_test=@RUN_PYTHON_AGENT_TEST@
+
+if [[ -z "$run_test" ]]; then
+       NUM_TESTS=1
+else
+       NUM_TESTS=$(((154 * ${#python_versions[@]})+2))
+fi
+
+source $TESTDIR/utils/utils.sh
+
+function run_app
+{
+       local python=$1
+       local debug_tp=$2
+       local fire_second_tp=$3
+
+       $python $TESTAPP_PATH/$TESTAPP_BIN $NR_ITER $NR_SEC_WAIT $debug_tp $fire_second_tp
+}
+
+function run_app_background
+{
+       run_app $@ &
+}
+
+function enable_python_loglevel_only()
+{
+       sess_name=$1
+       event_name="$2"
+       loglevel=$3
+       channel_name=$4
+
+       if [ -z $channel_name ]; then
+               # default channel if none specified
+               chan=""
+       else
+               chan="-c $channel_name"
+       fi
+
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" $chan -s $sess_name -p >$OUTPUT_DEST
+       ok $? "Enable Python event $event_name for session $sess_name with loglevel-only $loglevel"
+}
+
+function enable_python_filter()
+{
+       local sess_name="$1"
+       local event_name="$2"
+       local filter="$3"
+
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -p --filter "$filter" >$OUTPUT_DEST
+       ok $? "Enable event $event_name with filter $filter for session $sess_name"
+}
+
+function enable_python_filter_loglevel_only()
+{
+       local sess_name="$1"
+       local event_name="$2"
+       local filter="$3"
+       local loglevel="$4"
+
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event --loglevel-only $loglevel "$event_name" -s $sess_name -p --filter "$filter" >$OUTPUT_DEST
+       ok $? "Enable event $event_name with filter \"$filter\" and loglevel-only $loglevel for session $sess_name"
+}
+
+# MUST set TESTDIR before calling those functions
+
+function test_python_before_start ()
+{
+       diag "Test Python application BEFORE tracing starts"
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app_background $1
+
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Wait for the applications started in background
+       wait
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_after_start ()
+{
+       diag "Test Python application AFTER tracing starts"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app $1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_loglevel ()
+{
+       diag "Test Python application with loglevel"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "INFO"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app $1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       diag "Test Python applications with lower loglevel"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "CRITICAL"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app $1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting 0 events.
+       trace_match_only $EVENT_NAME 0 $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       diag "Test Python applications with higher loglevel"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "DEBUG"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app $1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH
+       return $?
+}
+
+function test_python_loglevel_multiple ()
+{
+       diag "Test Python application with multiple loglevel"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "INFO"
+       enable_python_lttng_event_loglevel $SESSION_NAME $EVENT_NAME "DEBUG"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire two TP.
+       run_app $1 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events times two.
+       trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       enable_python_lttng_event_loglevel $SESSION_NAME '*' "INFO"
+       enable_python_lttng_event_loglevel $SESSION_NAME '*' "DEBUG"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire two TP.
+       run_app $1 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting all events times two.
+       trace_match_only $EVENT_NAME $(($NR_ITER * 2)) $TRACE_PATH
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_multi_session_loglevel()
+{
+       diag "Test Python with multiple session"
+
+       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
+       enable_python_loglevel_only $SESSION_NAME-1 '*' "INFO"
+       start_lttng_tracing_ok $SESSION_NAME-1
+
+       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
+       enable_python_loglevel_only $SESSION_NAME-2 '*' "DEBUG"
+       start_lttng_tracing_ok $SESSION_NAME-2
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 1 1
+
+       stop_lttng_tracing_ok $SESSION_NAME-1
+       stop_lttng_tracing_ok $SESSION_NAME-2
+       destroy_lttng_session_ok $SESSION_NAME-1
+       destroy_lttng_session_ok $SESSION_NAME-2
+
+       # Expecting NR_ITER events being the main event and the second tp one.
+       trace_matches $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+       trace_matches $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       # Expectin NR_ITER events being the debug TP.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_multi_session_disable()
+{
+       diag "Test Python with multiple session with disabled event"
+
+       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
+       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
+       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME2
+       disable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME-1
+
+       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
+       enable_python_lttng_event $SESSION_NAME-2 $EVENT_NAME2
+       start_lttng_tracing_ok $SESSION_NAME-2
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME-1
+       stop_lttng_tracing_ok $SESSION_NAME-2
+       destroy_lttng_session_ok $SESSION_NAME-1
+       destroy_lttng_session_ok $SESSION_NAME-2
+
+       # Validate test. Expecting one event of the second TP.
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-1
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       # Validate test. Expecting one event of the second TP.
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_multi_session_disable_wildcard()
+{
+       diag "Test Python with multiple session with disabled wildcard event"
+
+       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
+       enable_python_lttng_event $SESSION_NAME-1 '*'
+
+       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
+       enable_python_lttng_event $SESSION_NAME-2 '*'
+
+       disable_python_lttng_event $SESSION_NAME-1 '*'
+
+       start_lttng_tracing_ok $SESSION_NAME-1
+       start_lttng_tracing_ok $SESSION_NAME-2
+
+       run_app $1
+
+       stop_lttng_tracing_ok $SESSION_NAME-1
+       stop_lttng_tracing_ok $SESSION_NAME-2
+       destroy_lttng_session_ok $SESSION_NAME-1
+       destroy_lttng_session_ok $SESSION_NAME-2
+
+       # Validate test. Expecting NO event of the first TP.
+       trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME-1
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       # Validate test. Expecting all events of the first TP.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-2
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_disable_all()
+{
+       diag "Test Python with multiple session with disabled all event"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       enable_python_lttng_event $SESSION_NAME '*'
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
+
+       disable_python_lttng_event $SESSION_NAME '*'
+
+       start_lttng_tracing_ok $SESSION_NAME
+
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting NO event of the first TP and second TP.
+       trace_match_only $EVENT_NAME 0 $TRACE_PATH/$SESSION_NAME
+       trace_match_only $EVENT_NAME2 0 $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_multi_session()
+{
+       diag "Test Python with multiple session"
+
+       create_lttng_session_ok $SESSION_NAME-1 $TRACE_PATH/$SESSION_NAME-1
+       enable_python_lttng_event $SESSION_NAME-1 $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME-1
+
+       create_lttng_session_ok $SESSION_NAME-2 $TRACE_PATH/$SESSION_NAME-2
+       enable_python_lttng_event $SESSION_NAME-2 $EVENT_NAME2
+       start_lttng_tracing_ok $SESSION_NAME-2
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME-1
+       stop_lttng_tracing_ok $SESSION_NAME-2
+       destroy_lttng_session_ok $SESSION_NAME-1
+       destroy_lttng_session_ok $SESSION_NAME-2
+
+       # Validate test. Expecting all events of first TP
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME-1
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       # Validate test. Expecting one event of the second TP.
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME-2
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_destroy_session()
+{
+       diag "Test Python two session with destroy"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/first-sess
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app_background $1 0 1
+
+       # Wait for the applications started in background
+       wait
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting at least one event num 1
+       validate_trace $EVENT_NAME $TRACE_PATH/first-sess
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/second-sess
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay
+       run_app_background $1 0 1
+
+       # Wait for the applications started in background
+       wait
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting only one event num 2
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/second-sess
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_filtering()
+{
+       diag "Test Python filtering"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       # Enable all event with a filter.
+       enable_python_filter $SESSION_NAME '*' 'msg == "python-ev-test2 fired [INFO]"'
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting one event of the second TP only.
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       # Enable first Logger but filter msg payload for the INFO one while
+       # triggering the debug and second TP.
+       enable_python_filter $SESSION_NAME $EVENT_NAME 'msg == "python-ev-test1 fired [INFO]"'
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay, fire debug and second TP.
+       run_app $1 1 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting NR_ITER event of the main INFO tp.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_disable()
+{
+       diag "Test Python disable event"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       # Enable all event with a filter.
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME2
+       disable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting one event of the second TP only.
+       trace_match_only $EVENT_NAME2 1 $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_disable_enable()
+{
+       diag "Test Python disable event followed by an enable"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       # Enable all event with a filter.
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       disable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       enable_python_lttng_event $SESSION_NAME $EVENT_NAME
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting NR_ITER event of the main INFO tp.
+       trace_match_only $EVENT_NAME $NR_ITER $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+function test_python_filter_loglevel()
+{
+       local BOGUS_EVENT_NAME="not_a_real_event"
+       local FILTER="int_loglevel > 30 || int_loglevel < 30"
+       local ALL_EVENTS="."
+
+       diag "Test Python a filter with a loglevel"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH/$SESSION_NAME
+       # Enable an event with a filter and the loglevel-only option.
+       enable_python_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
+       disable_python_lttng_event $SESSION_NAME $BOGUS_EVENT_NAME
+       enable_python_filter_loglevel_only $SESSION_NAME $BOGUS_EVENT_NAME "$FILTER" "INFO"
+       start_lttng_tracing_ok $SESSION_NAME
+
+       # Run 5 times with a 1 second delay and fire second TP.
+       run_app $1 0 1
+
+       stop_lttng_tracing_ok $SESSION_NAME
+       destroy_lttng_session_ok $SESSION_NAME
+
+       # Validate test. Expecting no events.
+       trace_match_only $ALL_EVENTS 0 $TRACE_PATH/$SESSION_NAME
+       if [ $? -ne 0 ]; then
+               return $?
+       fi
+}
+
+plan_tests $NUM_TESTS
+
+print_test_banner "$TEST_DESC"
+
+if [[ ${#python_versions[@]} -eq 0 ||  "x$run_test" != "xyes" ]]; then
+       skip_agent=0
+else
+       skip_agent=1
+fi
+
+skip $skip_agent "Python agent test skipped." $NUM_TESTS ||
+{
+       start_lttng_sessiond
+
+       tests=(
+               test_python_multi_session_disable_wildcard
+               test_python_multi_session_disable
+               test_python_disable
+               test_python_disable_enable
+               test_python_disable_all
+               test_python_filtering
+               test_python_multi_session_loglevel
+               test_python_destroy_session
+               test_python_loglevel
+               test_python_loglevel_multiple
+               test_python_before_start
+               test_python_after_start
+               test_python_multi_session
+               test_python_filter_loglevel
+       )
+
+
+       for python_version in ${python_versions[*]};
+       do
+               for fct_test in ${tests[@]};
+               do
+                       TRACE_PATH=$(mktemp -d)
+
+                       diag "(Python $python_version)"
+                       ${fct_test} $python_version
+                       if [ $? -ne 0 ]; then
+                               break;
+                       fi
+                       rm -rf $TRACE_PATH
+               done
+       done
+       stop_lttng_sessiond
+}
This page took 0.060891 seconds and 4 git commands to generate.