[PATCH stalld 05/36] tests/functional: Fix and refactor test_backend_selection.sh

Wander Lairson Costa <[email protected]>
Newsgroups org.kernel.vger.linux-rt-users
Message-ID <[email protected]>
test_backend_selection.sh fails when invoked by run_tests.sh because
it uses a relative path (../stalld) that resolves incorrectly when the
working directory is not tests/functional/. It also lacks
parse_test_options for backend passthrough from the test runner, does
not track temporary log files for cleanup, and contains four
copy-pasted 30-line blocks that implement the same
start/verify/check/stop pattern.

Extract the repeated pattern into a test_backend_flag() helper
function that starts stalld with a given -b flag, verifies the
expected backend message appears in the log, and calls stop_stalld.
The helper uses $! instead of pgrep for PID capture since stalld
runs in foreground mode. Fix the stalld path to use ${TEST_ROOT},
add parse_test_options and CLEANUP_FILES tracking, and correct the
test numbering.

Signed-off-by: Wander Lairson Costa <[email protected]>
---
 tests/functional/test_backend_selection.sh | 193 +++++++--------------
 1 file changed, 61 insertions(+), 132 deletions(-)

diff --git a/tests/functional/test_backend_selection.sh b/tests/functional/test_backend_selection.sh
index 6227756..5d60072 100755
--- a/tests/functional/test_backend_selection.sh
+++ b/tests/functional/test_backend_selection.sh
@@ -10,6 +10,7 @@
 
 TEST_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
 source "${TEST_ROOT}/helpers/test_helpers.sh"
+parse_test_options "$@" || exit $?
 
 start_test "Backend Selection"
 
@@ -18,155 +19,83 @@ setup_test_environment
 
 require_root
 
-# Test 1: Start stalld with sched_debug backend
-echo "Test 1: Starting stalld with sched_debug backend"
-STALLD_LOG="/tmp/stalld_backend_sched_debug_$$.log"
-# Call stalld directly to capture its actual stderr output
-# IMPORTANT: -v must come BEFORE -b so verbose mode is enabled when backend message is logged
-../stalld -v -f -l -b sched_debug -t 60 > "${STALLD_LOG}" 2>&1 &
-sleep 1
-# Get the actual stalld PID
-STALLD_PID=$(pgrep -n -x stalld 2>/dev/null)
-if [ -z "${STALLD_PID}" ]; then
-	TEST_FAILED=$((TEST_FAILED + 1))
-	echo -e "  ${RED}FAIL${NC}: stalld failed to start with sched_debug backend"
-else
+# Helper: start stalld with a specific backend flag, verify the expected
+# backend message appears in the log. This test intentionally bypasses
+# start_stalld_with_log() because it needs to control the -b flag
+# directly rather than inheriting it from STALLD_TEST_BACKEND.
+#
+# Usage: test_backend_flag <backend_flag> <expected_message> <description>
+test_backend_flag() {
+	local backend_flag=$1
+	local expected_msg=$2
+	local description=$3
+	local log_file="/tmp/stalld_backend_${backend_flag}_$$.log"
+
+	CLEANUP_FILES+=("${log_file}")
+
+	"${TEST_ROOT}/../stalld" -v -f -l -b "${backend_flag}" -t 60 \
+		> "${log_file}" 2>&1 &
+	STALLD_PID=$!
 	CLEANUP_PIDS+=("${STALLD_PID}")
 	sleep 1
-	if kill -0 ${STALLD_PID} 2>/dev/null; then
-		# Check if log contains backend message
-		if grep -q "using sched_debug backend" "${STALLD_LOG}"; then
-			assert_equals "0" "0" "sched_debug backend selected"
-		else
-			TEST_FAILED=$((TEST_FAILED + 1))
-			echo -e "  ${RED}FAIL${NC}: Backend message not found in log"
-			echo "  Log contents:"
-			cat "${STALLD_LOG}"
-		fi
-		stop_stalld
+
+	if ! kill -0 ${STALLD_PID} 2>/dev/null; then
+		TEST_FAILED=$((TEST_FAILED + 1))
+		echo -e "  ${RED}FAIL${NC}: stalld failed to start (${description})"
+		return 1
+	fi
+
+	if grep -q "${expected_msg}" "${log_file}"; then
+		assert_equals "0" "0" "${description}"
 	else
 		TEST_FAILED=$((TEST_FAILED + 1))
-		echo -e "  ${RED}FAIL${NC}: stalld failed to start with sched_debug backend"
+		echo -e "  ${RED}FAIL${NC}: Backend message not found (${description})"
+		echo "  Expected: ${expected_msg}"
+		echo "  Log contents:"
+		cat "${log_file}"
 	fi
-fi
-rm -f "${STALLD_LOG}"
 
+	stop_stalld
+}
+
+# Test 1: sched_debug backend (full name)
+echo "Test 1: Starting stalld with sched_debug backend"
+test_backend_flag "sched_debug" "using sched_debug backend" \
+	"sched_debug backend selected"
+
+# Test 2: queue_track backend (if available)
 echo ""
-echo "=== Test 4: Check queue_track (BPF) backend availability ==="
+echo "Test 2: Check queue_track (BPF) backend"
 if is_backend_available "queue_track"; then
-	echo "Test 2a: Starting stalld with queue_track backend"
-	STALLD_LOG="/tmp/stalld_backend_queue_track_$$.log"
-	# Call stalld directly to capture its actual stderr output
-	# IMPORTANT: -v must come BEFORE -b so verbose mode is enabled when backend message is logged
-	../stalld -v -f -l -b queue_track -t 60 > "${STALLD_LOG}" 2>&1 &
-	sleep 1
-	# Get the actual stalld PID
-	STALLD_PID=$(pgrep -n -x stalld 2>/dev/null)
-	if [ -z "${STALLD_PID}" ]; then
-		TEST_FAILED=$((TEST_FAILED + 1))
-		echo -e "  ${RED}FAIL${NC}: stalld failed to start with queue_track backend"
-	else
-		CLEANUP_PIDS+=("${STALLD_PID}")
-		sleep 1
-		if kill -0 ${STALLD_PID} 2>/dev/null; then
-			# Check if log contains backend message
-			if grep -q "using queue_track backend" "${STALLD_LOG}"; then
-				assert_equals "0" "0" "queue_track backend selected"
-			else
-				TEST_FAILED=$((TEST_FAILED + 1))
-				echo -e "  ${RED}FAIL${NC}: Backend message not found in log"
-				echo "  Log contents:"
-				cat "${STALLD_LOG}"
-			fi
-			stop_stalld
-		else
-			TEST_FAILED=$((TEST_FAILED + 1))
-			echo -e "  ${RED}FAIL${NC}: stalld failed to start with queue_track backend"
-		fi
-	fi
-	rm -f "${STALLD_LOG}"
+	test_backend_flag "queue_track" "using queue_track backend" \
+		"queue_track backend selected"
 else
-	echo "ℹ queue_track (BPF) backend not available"
-	echo "  (This is expected on i686, powerpc, ppc64le, or kernels ≤3.x)"
+	echo "  queue_track (BPF) backend not available"
+	echo "  (This is expected on i686, powerpc, ppc64le, or kernels <=3.x)"
 	TEST_PASSED=$((TEST_PASSED + 1))
 fi
 
-# Test 3: Test short names (S for sched_debug)
+# Test 3: Short name 'S' for sched_debug
+echo ""
 echo "Test 3: Testing short name 'S' for sched_debug"
-STALLD_LOG="/tmp/stalld_backend_short_S_$$.log"
-# Call stalld directly to capture its actual stderr output
-# IMPORTANT: -v must come BEFORE -b so verbose mode is enabled when backend message is logged
-../stalld -v -f -l -b S -t 60 > "${STALLD_LOG}" 2>&1 &
-sleep 1
-# Get the actual stalld PID
-STALLD_PID=$(pgrep -n -x stalld 2>/dev/null)
-if [ -z "${STALLD_PID}" ]; then
-	TEST_FAILED=$((TEST_FAILED + 1))
-	echo -e "  ${RED}FAIL${NC}: stalld failed to start with short name 'S'"
-else
-	CLEANUP_PIDS+=("${STALLD_PID}")
-	sleep 1
-	if kill -0 ${STALLD_PID} 2>/dev/null; then
-		# Check if log contains backend message
-		if grep -q "using sched_debug backend" "${STALLD_LOG}"; then
-			assert_equals "0" "0" "Short name 'S' works for sched_debug"
-		else
-			TEST_FAILED=$((TEST_FAILED + 1))
-			echo -e "  ${RED}FAIL${NC}: Backend message not found for short name"
-			echo "  Log contents:"
-			cat "${STALLD_LOG}"
-		fi
-		stop_stalld
-	else
-		TEST_FAILED=$((TEST_FAILED + 1))
-		echo -e "  ${RED}FAIL${NC}: stalld failed to start with short name 'S'"
-	fi
-fi
-rm -f "${STALLD_LOG}"
+test_backend_flag "S" "using sched_debug backend" \
+	"Short name 'S' works for sched_debug"
 
-# Test 4: Test STALLD_TEST_BACKEND environment variable
+# Test 4: STALLD_TEST_BACKEND environment variable
+echo ""
 if [ -n "${STALLD_TEST_BACKEND}" ]; then
 	echo "Test 4: Testing STALLD_TEST_BACKEND=${STALLD_TEST_BACKEND}"
-	STALLD_LOG="/tmp/stalld_backend_env_$$.log"
-	# Call stalld directly to capture its actual stderr output
-	# start_stalld adds -b based on STALLD_TEST_BACKEND, so we mimic that here
-	# IMPORTANT: -v must come BEFORE -b so verbose mode is enabled when backend message is logged
-	../stalld -v -f -l -b "${STALLD_TEST_BACKEND}" -t 60 > "${STALLD_LOG}" 2>&1 &
-	sleep 1
-	# Get the actual stalld PID
-	STALLD_PID=$(pgrep -n -x stalld 2>/dev/null)
-	if [ -z "${STALLD_PID}" ]; then
-		TEST_FAILED=$((TEST_FAILED + 1))
-		echo -e "  ${RED}FAIL${NC}: stalld failed to start with STALLD_TEST_BACKEND"
-	else
-		CLEANUP_PIDS+=("${STALLD_PID}")
-		sleep 1
-		if kill -0 ${STALLD_PID} 2>/dev/null; then
-			# Normalize backend name for comparison
-			BACKEND_NORMALIZED="${STALLD_TEST_BACKEND}"
-			case "${STALLD_TEST_BACKEND}" in
-				S) BACKEND_NORMALIZED="sched_debug" ;;
-				Q) BACKEND_NORMALIZED="queue_track" ;;
-			esac
-
-			# Check if log contains backend message
-			if grep -q "using ${BACKEND_NORMALIZED} backend" "${STALLD_LOG}"; then
-				assert_equals "0" "0" "STALLD_TEST_BACKEND environment variable respected"
-			else
-				TEST_FAILED=$((TEST_FAILED + 1))
-				echo -e "  ${RED}FAIL${NC}: Backend ${BACKEND_NORMALIZED} not used from environment"
-				echo "  Log contents:"
-				cat "${STALLD_LOG}"
-			fi
-			stop_stalld
-		else
-			echo "ℹ Could not verify backend in logs (may not be logged)"
-			TEST_PASSED=$((TEST_PASSED + 1))
-		fi
-	fi
-	rm -f "${STALLD_LOG}"
+	# Normalize short names for expected message
+	BACKEND_NORMALIZED="${STALLD_TEST_BACKEND}"
+	case "${STALLD_TEST_BACKEND}" in
+		S) BACKEND_NORMALIZED="sched_debug" ;;
+		Q) BACKEND_NORMALIZED="queue_track" ;;
+	esac
+	test_backend_flag "${STALLD_TEST_BACKEND}" \
+		"using ${BACKEND_NORMALIZED} backend" \
+		"STALLD_TEST_BACKEND environment variable respected"
 else
-	echo "ℹ Skipping queue_track test - backend not available on this system"
+	echo "Test 4: Skipping (STALLD_TEST_BACKEND not set)"
 	TEST_PASSED=$((TEST_PASSED + 1))
 fi
 
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.