[PATCH 3/5] test: store test output to a log file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Store test output to a log file for further inspection. Depending on
the test result the log file name for the test will be one of the
following ${test_name}.{log,timeout,failed,skipped}

Signed-off-by: Lukas Czerner <lczerner@xxxxxxxxxx>
---
 .gitignore       |  4 ++++
 test/runtests.sh | 27 ++++++++++++++++++++++++---
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8f7f369..9e7865b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -107,6 +107,10 @@
 /test/timeout-overflow
 /test/wakeup-hang
 /test/*.dmesg
+/test/*.log
+/test/*.failed
+/test/*.skipped
+/test/*.timeout
 
 config-host.h
 config-host.mak
diff --git a/test/runtests.sh b/test/runtests.sh
index acefe33..b61cb27 100755
--- a/test/runtests.sh
+++ b/test/runtests.sh
@@ -83,29 +83,42 @@ run_test()
 	# Do we have to exclude the test ?
 	echo $TEST_EXCLUDE | grep -w "$test_name" > /dev/null 2>&1
 	if [ $? -eq 0 ]; then
-		echo "Test skipped"
+		echo "Test skipped by user" | tee ${test_name}.skipped
 		SKIPPED="$SKIPPED <$test_string>"
 		return
 	fi
 
+	# Prepare log file name
+	if [ -n "$dev" ]; then
+		local logfile=$(echo "${test_name}_${dev}" | \
+			    sed 's/\(\/\|_\/\|\/_\)/_/g')
+	else
+		local logfile=${test_name}
+	fi
+
 	# Run the test
-	timeout --preserve-status -s INT -k $TIMEOUT $TIMEOUT ./$test_name $dev
-	local status=$?
+	timeout --preserve-status -s INT -k $TIMEOUT $TIMEOUT \
+		./$test_name $dev 2>&1 | tee ${logfile}.log
+	local status=${PIPESTATUS[0]}
 
 	# Check test status
 	if [ "$status" -eq 124 ]; then
 		echo "Test $test_name timed out (may not be a failure)"
+		mv ${logfile}.log ${logfile}.timeout
 	elif [ "$status" -ne 0 ] && [ "$status" -ne 255 ]; then
 		echo "Test $test_name failed with ret $status"
 		FAILED="$FAILED <$test_string>"
 		RET=1
+		mv ${logfile}.log ${logfile}.failed
 	elif ! _check_dmesg "$dmesg_marker" "$test_name" "$dev"; then
 		echo "Test $test_name failed dmesg check"
 		FAILED="$FAILED <$test_string>"
 		RET=1
+		mv ${logfile}.log ${logfile}.failed
 	elif [ "$status" -eq 255 ]; then
 		echo "Test skipped"
 		SKIPPED="$SKIPPED <$test_string>"
+		mv ${logfile}.log ${logfile}.skipped
 	elif [ -n "$dev" ]; then
 		sleep .1
 		ps aux | grep "\[io_wq_manager\]" > /dev/null
@@ -113,8 +126,16 @@ run_test()
 			MAYBE_FAILED="$MAYBE_FAILED $test_string"
 		fi
 	fi
+
+	# Only leave behing log file with some content in it
+	if [ ! -s "${logfile}.log" ]; then
+		rm -f ${logfile}.log
+	fi
 }
 
+# Clean up all the logs from previous run
+rm -f *.{log,timeout,failed,skipped,dmesg}
+
 # Run all specified tests
 for tst in $TESTS; do
 	run_test $tst
-- 
2.26.2




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux