+
+function validate_trace_count
+{
+ local event_name=$1
+ local trace_path=$2
+ local expected_count=$3
+
+ which $BABELTRACE_BIN >/dev/null
+ if [ $? -ne 0 ]; then
+ skip 0 "Babeltrace binary not found. Skipping trace validation"
+ fi
+
+ cnt=0
+ OLDIFS=$IFS
+ IFS=","
+ for i in $event_name; do
+ traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
+ if [ "$traced" -ne 0 ]; then
+ pass "Validate trace for event $i, $traced events"
+ else
+ fail "Validate trace for event $i"
+ diag "Found $traced occurences of $i"
+ fi
+ cnt=$(($cnt + $traced))
+ done
+ IFS=$OLDIFS
+ test $cnt -eq $expected_count
+ ok $? "Read a total of $cnt events, expected $expected_count"
+}
+
+function trace_first_line
+{
+ local trace_path=$1
+
+ which $BABELTRACE_BIN >/dev/null
+ if [ $? -ne 0 ]; then
+ skip 0 "Babeltrace binary not found. Skipping trace validation"
+ fi
+
+ $BABELTRACE_BIN $trace_path 2>/dev/null | head -n 1
+}
+
+function validate_trace_exp()
+{
+ local event_exp=$1
+ local trace_path=$2
+
+ which $BABELTRACE_BIN >/dev/null
+ skip $? -ne 0 "Babeltrace binary not found. Skipping trace validation"
+
+ traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep ${event_exp} | wc -l)
+ if [ "$traced" -ne 0 ]; then
+ pass "Validate trace for expression '${event_exp}', $traced events"
+ else
+ fail "Validate trace for expression '${event_exp}'"
+ diag "Found $traced occurences of '${event_exp}'"
+ fi
+ ret=$?
+ return $ret
+}
+
+function validate_trace_only_exp()
+{
+ local event_exp=$1
+ local trace_path=$2
+
+ which $BABELTRACE_BIN >/dev/null
+ skip $? -ne 0 "Babeltrace binary not found. Skipping trace matches"
+
+ local count=$($BABELTRACE_BIN $trace_path | grep ${event_exp} | wc -l)
+ local total=$($BABELTRACE_BIN $trace_path | wc -l)
+
+ if [ "$count" -ne 0 ] && [ "$total" -eq "$count" ]; then
+ pass "Trace match with $total for expression '${event_exp}"
+ else
+ fail "Trace match"
+ diag "$total syscall event(s) found, only syscalls matching expression '${event_exp}' ($count occurrences) are expected"
+ fi
+ ret=$?
+ return $ret
+}
+
+function validate_trace_empty()
+{
+ local trace_path=$1
+
+ which $BABELTRACE_BIN >/dev/null
+ if [ $? -ne 0 ]; then
+ skip 0 "Babeltrace binary not found. Skipping trace validation"
+ fi
+
+ traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | wc -l)
+ if [ "$traced" -eq 0 ]; then
+ pass "Validate empty trace"
+ else
+ fail "Validate empty trace"
+ diag "Found $traced events in trace"
+ fi
+ ret=$?
+ return $ret
+}
+
+function regenerate_metadata ()
+{
+ local expected_to_fail=$1
+ local sess_name=$2
+
+ $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate metadata -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
+ ret=$?
+ if [[ $expected_to_fail -eq "1" ]]; then
+ test "$ret" -ne "0"
+ ok $? "Expected fail on regenerate metadata $sess_name"
+ else
+ ok $ret "Metadata regenerate $sess_name"
+ fi
+}
+
+function regenerate_metadata_ok ()
+{
+ regenerate_metadata 0 "$@"
+}
+
+function regenerate_metadata_fail ()
+{
+ regenerate_metadata 1 "$@"
+}
+
+function regenerate_statedump ()
+{
+ local expected_to_fail=$1
+ local sess_name=$2
+
+ $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate statedump -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
+ ret=$?
+ if [[ $expected_to_fail -eq "1" ]]; then
+ test "$ret" -ne "0"
+ ok $? "Expected fail on regenerate statedump $sess_name"
+ else
+ ok $ret "Metadata regenerate $sess_name"
+ fi
+}
+
+function regenerate_statedump_ok ()
+{
+ regenerate_statedump 0 "$@"
+}
+
+function regenerate_statedump_fail ()
+{
+ regenerate_statedump 1 "$@"
+}
+
+function destructive_tests_enabled ()
+{
+ if [ ${LTTNG_ENABLE_DESTRUCTIVE_TESTS} = "will-break-my-system" ]; then
+ return 0
+ else
+ return 1
+ fi
+}