aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-08-09 13:22:17 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-08-09 21:30:32 +0200
commitd9ff34f2e0d52351ec9e5c5b33002b7be3937123 (patch)
tree8d6d99f0fe6e07c753c3f11f785cfb8d1bf42490
parentfa71b7ac0594c9ddf81ec27753280cffef702489 (diff)
downloadsparse-dev-d9ff34f2e0d52351ec9e5c5b33002b7be3937123.tar.gz
testsuite: add support for commands with timeout
Tests taking a huge or infinite amout of time is a problem for the testsuite. Furthermore, it's most often the sign of a problem somewhere. Fix this by adding some support to use an optional timeout for each testcase command. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--Documentation/test-suite4
-rw-r--r--validation/infinite-loop0.c12
-rwxr-xr-xvalidation/test-suite7
3 files changed, 23 insertions, 0 deletions
diff --git a/Documentation/test-suite b/Documentation/test-suite
index 2e786bbf..a288c81a 100644
--- a/Documentation/test-suite
+++ b/Documentation/test-suite
@@ -25,6 +25,10 @@ check-command: (optional)
check-exit-value: (optional)
The expected exit value of check-command. It defaults to 0.
+check-timeout: (optional)
+ The maximum expected duration of check-command, in seconds.
+ It defaults to 1.
+
check-output-start / check-output-end (optional)
The expected output (stdout and stderr) of check-command lies between
those two tags. It defaults to no output.
diff --git a/validation/infinite-loop0.c b/validation/infinite-loop0.c
new file mode 100644
index 00000000..a2849230
--- /dev/null
+++ b/validation/infinite-loop0.c
@@ -0,0 +1,12 @@
+void foo(void)
+{
+ int a = a || 0;
+ if (a) ;
+}
+
+/*
+ * check-name: internal infinite loop (0)
+ * check-command: sparse -Wno-decl $file
+ * check-timeout:
+ * check-known-to-fail
+ */
diff --git a/validation/test-suite b/validation/test-suite
index 3056fce9..cf151a36 100755
--- a/validation/test-suite
+++ b/validation/test-suite
@@ -39,6 +39,7 @@ get_tag_value()
check_name=""
check_command="$default_cmd"
check_exit_value=0
+ check_timeout=0
check_known_to_fail=0
check_error_ignore=0
check_output_ignore=0
@@ -56,6 +57,8 @@ get_tag_value()
check-name:) check_name="$val" ;;
check-command:) check_command="$val" ;;
check-exit-value:) check_exit_value="$val" ;;
+ check-timeout:) [ -z "$val" ] && val=1
+ check_timeout="$val" ;;
check-known-to-fail) check_known_to_fail=1 ;;
check-error-ignore) check_error_ignore=1 ;;
check-output-ignore) check_output_ignore=1 ;;
@@ -211,6 +214,10 @@ do_test()
expected_exit_value=$check_exit_value
verbose "Expecting exit value: $expected_exit_value"
+ # do we want a timeout?
+ if [ $check_timeout -ne 0 ]; then
+ cmd="timeout -k 1s $check_timeout $cmd"
+ fi
# grab the actual output & exit value
$cmd 1> $file.output.got 2> $file.error.got