summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuediger Meier <ruediger.meier@ga-group.nl>2016-03-22 10:06:22 +0100
committerRuediger Meier <ruediger.meier@ga-group.nl>2016-03-24 08:14:34 +0100
commit33bed90a7fd5567d15e6319fef9e2f3c69673f76 (patch)
treed797229f18123ef5366618a4967ed728e917289e
parent9508e2972b1fdfca81e95ad7c2310991695009b5 (diff)
downloadutil-linux-33bed90a7fd5567d15e6319fef9e2f3c69673f76.tar.gz
tests: improve setarch tests, regarding --uname-2.6 issues
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>
-rw-r--r--tests/expected/misc/setarch-options (renamed from tests/expected/misc/setarch)12
-rw-r--r--tests/expected/misc/setarch-uname266
-rw-r--r--tests/expected/misc/setarch-uname26-version1
-rwxr-xr-xtests/ts/misc/setarch74
4 files changed, 84 insertions, 9 deletions
diff --git a/tests/expected/misc/setarch b/tests/expected/misc/setarch-options
index 002493030..698db5265 100644
--- a/tests/expected/misc/setarch
+++ b/tests/expected/misc/setarch-options
@@ -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
index 000000000..13667af75
--- /dev/null
+++ b/tests/expected/misc/setarch-uname26
@@ -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
index 000000000..9c746e100
--- /dev/null
+++ b/tests/expected/misc/setarch-uname26-version
@@ -0,0 +1 @@
+kernel version changed to 2.6
diff --git a/tests/ts/misc/setarch b/tests/ts/misc/setarch
index 9b0e92eee..c8050e52a 100755
--- a/tests/ts/misc/setarch
+++ b/tests/ts/misc/setarch
@@ -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