]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: improve setarch tests, regarding --uname-2.6 issues
authorRuediger Meier <ruediger.meier@ga-group.nl>
Tue, 22 Mar 2016 09:06:22 +0000 (10:06 +0100)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 24 Mar 2016 07:14:34 +0000 (08:14 +0100)
Add some more tests:
  * error handling "unknown arch" and "unknown command"
  * "noop" test with host arch and no other options
  * all options except --uname-2.6
  * --uname-2.6 whithout any other options but handle fatal
    glibc error "kernel too old" (with debug output)
  * add a "real" --uname-2.6 test which validates uname(1)
    output

Note the "kernel too old" cases are systems where glibc was
configured to support only kernels > 3.0. On some archs
(e.g. x86) --uname-2.6 still works with such glibc because
2.6.39 had all needed features on board (e.g. vdso).
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=806911

Some people reported segfaults (after execvp) but I can only
reproduce it on arm* and aarch64 qemu-user-space builds. We
don't need to fix our tests for such broken systems where
also many other tests fail currently.

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
tests/expected/misc/setarch-options [moved from tests/expected/misc/setarch with 54% similarity]
tests/expected/misc/setarch-uname26 [new file with mode: 0644]
tests/expected/misc/setarch-uname26-version [new file with mode: 0644]
tests/ts/misc/setarch

similarity index 54%
rename from tests/expected/misc/setarch
rename to tests/expected/misc/setarch-options
index 002493030767cf32b6c7999eafdfea685b435a43..698db52659d35a021bdf62cdeb4338219775b1af 100644 (file)
@@ -1,3 +1,14 @@
+###### unknown arch
+setarch: qubit: Unrecognized architecture
+exit: 1
+###### unknown command
+Execute command `/das/gibs/nicht'.
+setarch: /das/gibs/nicht: No such file or directory
+exit: 1
+###### noop uname -a
+Execute command `uname'.
+uname -a unchanged
+###### almost all options
 Switching on ADDR_NO_RANDOMIZE.
 Switching on FDPIC_FUNCPTRS.
 Switching on MMAP_PAGE_ZERO.
@@ -8,6 +19,5 @@ Switching on SHORT_INODE.
 Switching on WHOLE_SECONDS.
 Switching on STICKY_TIMEOUTS.
 Switching on ADDR_LIMIT_3GB.
-Switching on UNAME26.
 Execute command `echo'.
 success
diff --git a/tests/expected/misc/setarch-uname26 b/tests/expected/misc/setarch-uname26
new file mode 100644 (file)
index 0000000..13667af
--- /dev/null
@@ -0,0 +1,6 @@
+###### --uname-2.6 echo
+Switching on UNAME26.
+Execute command `echo'.
+2.6 works or kernel too old
+###### --uname-2.6 true, non-verbose
+2.6 works or kernel too old
diff --git a/tests/expected/misc/setarch-uname26-version b/tests/expected/misc/setarch-uname26-version
new file mode 100644 (file)
index 0000000..9c746e1
--- /dev/null
@@ -0,0 +1 @@
+kernel version changed to 2.6
index 9b0e92eee706f8ad6dfb45f77ac9d21de74325a4..c8050e52a069fd9e584a1c3bfd2931951036d938 100755 (executable)
@@ -21,13 +21,71 @@ ts_init "$*"
 ts_check_test_command "$TS_CMD_SETARCH"
 
 ARCH=$(uname -m)
-case $ARCH in
-       #  setarch --uname-2.6 fails on platforms without VDS
-       *sparc* )
-               ts_skip "unsupported arch"
-               ;;
-esac
-
-$TS_CMD_SETARCH $(uname -m) -vRFZLXBIST3 --uname-2.6 echo "success" >$TS_OUTPUT 2>&1
+
+ts_init_subtest options
+echo "###### unknown arch" >>$TS_OUTPUT
+$TS_CMD_SETARCH qubit -v echo "success" >>$TS_OUTPUT 2>&1
+echo "exit: $?" >>$TS_OUTPUT
+
+echo "###### unknown command" >>$TS_OUTPUT
+$TS_CMD_SETARCH $ARCH -v /das/gibs/nicht >>$TS_OUTPUT 2>&1
+echo "exit: $?" >>$TS_OUTPUT
+
+echo "###### noop uname -a" >>$TS_OUTPUT
+uname_a=$(uname -srm)
+$TS_CMD_SETARCH $ARCH -v uname -srm >>$TS_OUTPUT 2>&1
+sed -i "$ s@${uname_a}@uname -a unchanged@" $TS_OUTPUT
+
+echo "###### almost all options" >>$TS_OUTPUT
+$TS_CMD_SETARCH $ARCH -vRFZLXBIST3 echo "success" >>$TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+
+ts_init_subtest uname26
+finmsg="" # for debugging 2.6 issues
+
+echo "###### --uname-2.6 echo" >>$TS_OUTPUT
+$TS_CMD_SETARCH $ARCH -v --uname-2.6 echo "2.6 worked" >>$TS_OUTPUT 2>&1
+if [ $? -eq 0 ]; then
+       expected='^2.6 worked$'
+else
+       # this may happen after execvp
+       expected="^FATAL: kernel too old$"
+       finmsg+=" echo"
+fi
+sed -i "$ s/$expected/2.6 works or kernel too old/" $TS_OUTPUT
+
+echo "###### --uname-2.6 true, non-verbose" >>$TS_OUTPUT
+$TS_CMD_SETARCH $ARCH --uname-2.6 true >>$TS_OUTPUT 2>&1
+if [ $? -eq 0 ]; then
+       echo "2.6 works or kernel too old" >> $TS_OUTPUT
+else
+       # this may happen after execvp
+       expected="^FATAL: kernel too old$"
+       sed -i "$ s/$expected/2.6 works or kernel too old/" $TS_OUTPUT
+       finmsg+=" true"
+fi
+
+if [ -n "$finmsg" ]; then
+       finmsg=$(echo unsupported --uname-2.6: $finmsg)
+else
+       uname26_seems_supported=yes
+fi
+ts_finalize_subtest "$finmsg"
+
+
+# conditional subtest
+if [ "$uname26_seems_supported" = "yes" ]; then
+ts_init_subtest uname26-version
+       tmp=$($TS_CMD_SETARCH $ARCH --uname-2.6 uname -r)
+       if echo "$tmp" | grep -q "^2\.6\."; then
+               echo "kernel version changed to 2.6" >> $TS_OUTPUT
+       else
+               echo "uname26 failed" >> $TS_OUTPUT
+               echo "original kernel: $(uname -r)" >> $TS_OUTPUT
+               echo "uname26 kernel:  $tmp" >> $TS_OUTPUT
+       fi
+ts_finalize_subtest
+fi # conditional subtest
 
 ts_finalize