Fix: rotation client example: leak of handle on error
[lttng-tools.git] / tests / utils / utils.sh
index 88a4ddd20c30216d6f19ea07b4160df998cb3c9b..10d914f36dc6da26b9130d3f5ab540ae42e13a4d 100644 (file)
@@ -16,6 +16,11 @@ BABELTRACE_BIN="babeltrace"
 OUTPUT_DEST=/dev/null
 ERROR_OUTPUT_DEST=/dev/null
 
+# To match 20201127-175802
+date_time_pattern="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]"
+# The size of a long on this system
+system_long_bit_size=$(getconf LONG_BIT)
+
 # Minimal kernel version supported for session daemon tests
 KERNEL_MAJOR_VERSION=2
 KERNEL_MINOR_VERSION=6
@@ -139,10 +144,19 @@ function conf_proc_count()
 # Bail out on failure
 function validate_lttng_modules_present ()
 {
+       # Check for loadable modules.
        modprobe -n lttng-tracer 2>/dev/null
-       if [ $? -ne 0  ]; then
-               BAIL_OUT "LTTng modules not detected."
+       if [ $? -eq 0 ]; then
+               return 0
+       fi
+
+       # Check for builtin modules.
+       ls /proc/lttng > /dev/null 2>&1
+       if [ $? -eq 0 ]; then
+               return 0
        fi
+
+       BAIL_OUT "LTTng modules not detected."
 }
 
 function enable_kernel_lttng_event
@@ -655,7 +669,7 @@ function stop_lttng_sessiond_opt()
 
                        if [ -n "$modules" ]; then
                                diag "Unloading all LTTng modules"
-                               modprobe -r "$modules"
+                               modprobe --remove "$modules"
                        fi
                fi
        fi
@@ -1170,8 +1184,16 @@ function enable_ust_lttng_event_filter()
        local sess_name="$1"
        local event_name="$2"
        local filter="$3"
+       local 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 "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
        ok $? "Enable event $event_name with filtering for session $sess_name"
 }
 
@@ -1410,8 +1432,9 @@ function lttng_snapshot_del_output_fail ()
 function lttng_snapshot_record ()
 {
        local sess_name=$1
+       local trace_path=$2
 
-       $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s $sess_name $trace_path 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
+       $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s "$sess_name" "$trace_path" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
        ok $? "Snapshot recorded"
 }
 
@@ -1960,7 +1983,7 @@ function rotate_session_fail ()
 
 function destructive_tests_enabled ()
 {
-       if [ ${LTTNG_ENABLE_DESTRUCTIVE_TESTS} = "will-break-my-system" ]; then
+       if [ "$LTTNG_ENABLE_DESTRUCTIVE_TESTS" = "will-break-my-system" ]; then
                return 0
        else
                return 1
@@ -2049,3 +2072,223 @@ function lttng_clear_all ()
        $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear --all 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
        ok $? "Clear all lttng sessions"
 }
+
+function validate_path_pattern ()
+{
+       local message=$1
+       local pattern=$2
+       # Base path is only used in error case and is used to list the content
+       # of the base path.
+       local base_path=$3
+
+
+       [ -f $pattern ]
+       ret=$?
+       ok $ret "$message"
+
+       if [ "$ret" -ne "0" ]; then
+               diag "Path pattern expected: $pattern"
+               # List the tracepath for more info. We use find as a recursive
+               # directory lister.
+               diag "The base path content:"
+               find "$base_path" -print
+       fi
+}
+
+function validate_trace_path_ust_uid ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local uid=$UID
+       local pattern="$trace_path/$session_name-$date_time_pattern/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
+
+       validate_path_pattern "UST per-uid trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_ust_uid_network ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local base_path=$3
+       local uid=$UID
+       local hostname=$HOSTNAME
+       local pattern
+       local ret
+
+       # If the session was given a network base path (e.g
+       # 127.0.0.1/my/custom/path on creation, there is no session name
+       # component to the path on the relayd side. Caller can simply not pass a
+       # session name for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+               if [ -n "$base_path" ]; then
+                       fail "Session name and base path are mutually exclusive"
+                       return
+               fi
+       fi
+
+       pattern="$trace_path/$hostname/$base_path/$session_name/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
+
+       validate_path_pattern "UST per-uid network trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_ust_uid_snapshot_network ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local snapshot_name=$3
+       local snapshot_number=$4
+       local base_path=$5
+       local hostname=$HOSTNAME
+       local uid=$UID
+       local pattern
+       local ret
+
+       # If the session/output was given a network base path (e.g
+       # 127.0.0.1/my/custom/path on creation, there is no session name
+       # component to the path on the relayd side. Caller can simply not pass a
+       # session name for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+               if [ -n "$base_path" ]; then
+                       fail "Session name and base path are mutually exclusive"
+                       return
+               fi
+       fi
+
+       pattern="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
+
+       validate_path_pattern "UST per-uid network snapshot trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_ust_uid_snapshot ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local snapshot_name=$3
+       local snapshot_number=$4
+       local base_path=$5
+       local uid=$UID
+       local pattern
+       local ret
+
+       # If the session/output was given a network base path (e.g
+       # 127.0.0.1/my/custom/path) on creation, there is no session name
+       # component to the path on the relayd side. Caller can simply not pass a
+       # session name for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+               if [ -n "$base_path" ]; then
+                       fail "Session name and base path are mutually exclusive"
+                       return
+               fi
+       fi
+
+       pattern="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/ust/uid/$uid/${system_long_bit_size}-bit/metadata"
+
+       validate_path_pattern "UST per-uid snapshot trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_ust_pid ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local app_string=$3
+       local pid=$4
+       local pattern
+       local ret
+
+       # If the session was given a trace path on creation, there is no session
+       # name component to the path. Caller can simply not pass a session name
+       # for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+       fi
+
+       pattern="$trace_path/$session_name/ust/pid/$pid/$app_string-*-$date_time_pattern/metadata"
+
+       validate_path_pattern "UST per-pid trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_kernel ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local pattern
+
+       # If the session was given a trace path on creation, there is no session
+       # name component to the path. Caller can simply not pass a session name
+       # for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+       fi
+
+       pattern="$trace_path/$session_name/kernel/metadata"
+
+       validate_path_pattern "Kernel trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_kernel_network ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local hostname=$HOSTNAME
+       local pattern="$trace_path/$hostname/$session_name-$date_time_pattern/kernel/metadata"
+
+       validate_path_pattern "Kernel network trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_kernel_snapshot ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local snapshot_name=$3
+       local snapshot_number=$4
+       local base_path=$5
+       local pattern
+       local ret
+
+       # If the session/output was given a network base path (e.g
+       # 127.0.0.1/my/custom/path on creation, there is no session name
+       # component to the path on the relayd side. Caller can simply not pass a
+       # session name for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+               if [ -n "$base_path" ]; then
+                       fail "Session name and base path are mutually exclusive"
+                       return
+               fi
+       fi
+
+       pattern="$trace_path/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
+
+       validate_path_pattern "Kernel snapshot trace path is valid" "$pattern" "$trace_path"
+}
+
+function validate_trace_path_kernel_snapshot_network ()
+{
+       local trace_path=$1
+       local session_name=$2
+       local snapshot_name=$3
+       local snapshot_number=$4
+       local base_path=$5
+       local hostname=$HOSTNAME
+       local pattern
+       local ret
+
+       # If the session/output was given a network base path (e.g
+       # 127.0.0.1/my/custom/path on creation, there is no session name
+       # component to the path on the relayd side. Caller can simply not pass a
+       # session name for this scenario.
+       if [ -n "$session_name" ]; then
+               session_name="$session_name-$date_time_pattern"
+               if [ -n "$base_path" ]; then
+                       fail "Session name and base path are mutually exclusive"
+                       return
+               fi
+       fi
+
+       pattern="$trace_path/$hostname/$base_path/$session_name/$snapshot_name-$date_time_pattern-$snapshot_number/kernel/metadata"
+
+       validate_path_pattern "Kernel network snapshot trace path is valid" "$pattern" "$trace_path"
+}
This page took 0.026863 seconds and 4 git commands to generate.