]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: check /proc availability, and go-around if it is incomplete
authorSami Kerola <kerolasa@iki.fi>
Sun, 11 May 2014 19:26:38 +0000 (20:26 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 12 May 2014 11:02:52 +0000 (13:02 +0200)
Unavailability of /proc is fatal for kill, and continuing with the test
in that case does not make sense as it will only mean false positive
errors.

Where /proc/<pid>/status file(s) does not exist the check will perform
opportunistic sleep with assumption the test_sigreceive will be ready to
be killed if it has some time to init.

[kzak@redhat.com: - remove dependence on gawk, just use shell
                  - fix typo in "test /proc"]

CC: Ruediger Meier <sweet_f_a@gmx.de>
Reference: https://travis-ci.org/rudimeier/util-linux/jobs/24561058
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Karel Zak <kzak@redhat.com>
tests/ts/kill/kill_functions.sh

index 73fff053d48a8cd0081e0276c4bccc4016982804..cc0a44065dede6c744f2b2fb706929379256f3dd 100644 (file)
@@ -1,6 +1,5 @@
-
-# unfortunately we are using gawk features
-type gawk >/dev/null 2>&1 || ts_skip "cannot find gawk"
+# kill tests, or command, will not when /proc is missing.
+test -d /proc || ts_skip "/proc not available"
 
 # The test_sigreceive is ready when signal process mask contains SIGHUP
 function check_test_sigreceive {
@@ -8,17 +7,22 @@ function check_test_sigreceive {
        local pid=$1
 
        for i in 0.01 0.1 1 1 1 1; do
-               gawk 'BEGIN { retval=1 }
-               /^SigCgt/ {
-                       lbyte = strtonum("0x" substr($2, 16, 16))
-                       if (and(lbyte, 1)) {
-                               retval=0
-                       }
-               } END {
-                       exit retval
-               }' /proc/$pid/status &&
-                       rc=1 &&
+               if [ ! -f /proc/$pid/status ]; then
+                       # The /proc exists, but not status file. Because the
+                       # process already started it is unlikely the file would
+                       # appear after any amount of waiting.  Try to sleep for
+                       # moment and hopefully test_sigreceive is ready to be
+                       # killed.
+                       echo "kill_functions.sh: /proc/$pid/status: No such file or directory"
+                       sleep 2
+                       rc=1
+                       break
+               fi
+               sigmask=$((16#$( awk '/SigCgt/ { print $2}' /proc/$pid/status) ))
+               if [ $(( $sigmask & 1 )) == 1 ]; then
+                       rc=1
                        break
+               fi
                sleep $i
        done
        return $rc