summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xnet/test/net_test.sh105
-rwxr-xr-xnet/test/run_net_test.sh35
2 files changed, 135 insertions, 5 deletions
diff --git a/net/test/net_test.sh b/net/test/net_test.sh
index c0c8c47..72c67a9 100755
--- a/net/test/net_test.sh
+++ b/net/test/net_test.sh
@@ -1,10 +1,113 @@
#!/bin/bash
+if [[ -n "${verbose}" ]]; then
+ echo 'Current working directory:'
+ echo " - according to builtin: [$(pwd)]"
+ echo " - according to /bin/pwd: [$(/bin/pwd)]"
+ echo
+
+ echo 'Shell environment:'
+ env
+ echo
+
+ echo -n "net_test.sh (pid $$, parent ${PPID}, tty $(tty)) running [$0] with args:"
+ for arg in "$@"; do
+ echo -n " [${arg}]"
+ done
+ echo
+ echo
+fi
+
+if [[ "$(tty)" == '/dev/console' ]]; then
+ ARCH="$(uname -m)"
+ # Underscore is illegal in hostname, replace with hyphen
+ ARCH="${ARCH//_/-}"
+
+ # setsid + /dev/tty{,AMA,S}0 allows bash's job control to work, ie. Ctrl+C/Z
+ if [[ -c '/dev/tty0' ]]; then
+ # exists in UML, does not exist on graphics/vga/curses-less QEMU
+ CON='/dev/tty0'
+ hostname "uml-${ARCH}"
+ elif [[ -c '/dev/ttyAMA0' ]]; then
+ # Qemu for arm (note: /dev/ttyS0 also exists for exitcode)
+ CON='/dev/ttyAMA0'
+ hostname "qemu-${ARCH}"
+ elif [[ -c '/dev/ttyS0' ]]; then
+ # Qemu for x86 (note: /dev/ttyS1 also exists for exitcode)
+ CON='/dev/ttyS0'
+ hostname "qemu-${ARCH}"
+ else
+ # Can't figure it out, job control won't work, tough luck
+ echo 'Unable to figure out proper console - job control will not work.' >&2
+ CON=''
+ hostname "local-${ARCH}"
+ fi
+
+ unset ARCH
+
+ echo -n "$(hostname): Currently tty[/dev/console], but it should be [${CON}]..."
+
+ if [[ -n "${CON}" ]]; then
+ # Redirect std{in,out,err} to the console equivalent tty
+ # which actually supports all standard tty ioctls
+ exec <"${CON}" >&"${CON}"
+
+ # Bash wants to be session leader, hence need for setsid
+ echo " re-executing..."
+ exec /usr/bin/setsid "$0" "$@"
+ # If the above exec fails, we just fall through...
+ # (this implies failure to *find* setsid, not error return from bash,
+ # in practice due to image construction this cannot happen)
+ else
+ echo
+ fi
+
+ # In case we fall through, clean up
+ unset CON
+fi
+
+if [[ -n "${verbose}" ]]; then
+ echo 'TTY settings:'
+ stty
+ echo
+
+ echo 'TTY settings (verbose):'
+ stty -a
+ echo
+
+ echo 'Restoring TTY sanity...'
+fi
+
+stty sane
+stty 115200
+[[ -z "${console_cols}" ]] || stty columns "${console_cols}"
+[[ -z "${console_rows}" ]] || stty rows "${console_rows}"
+
+if [[ -n "${verbose}" ]]; then
+ echo
+
+ echo 'TTY settings:'
+ stty
+ echo
+
+ echo 'TTY settings (verbose):'
+ stty -a
+ echo
+fi
+
+# By the time we get here we should have a sane console:
+# - 115200 baud rate
+# - appropriate (and known) width and height (note: this assumes
+# that the terminal doesn't get further resized)
+# - it is no longer /dev/console, so job control should function
+# (this means working ctrl+c [abort] and ctrl+z [suspend])
+
+
# This defaults to 60 which is needlessly long during boot
# (we will reset it back to the default later)
echo 0 > /proc/sys/kernel/random/urandom_min_reseed_secs
if [[ -n "${entropy}" ]]; then
- echo "adding entropy from hex string [${entropy}]" 1>&2
+ echo "adding entropy from hex string [${entropy}]" >&2
# In kernel/include/uapi/linux/random.h RNDADDENTROPY is defined as
# _IOW('R', 0x03, int[2]) =(R is 0x52)= 0x40085203 = 1074287107
diff --git a/net/test/run_net_test.sh b/net/test/run_net_test.sh
index 0712655..17b44d9 100755
--- a/net/test/run_net_test.sh
+++ b/net/test/run_net_test.sh
@@ -105,6 +105,12 @@ nowrite=1
nobuild=0
norun=0
+if tty >/dev/null; then
+ verbose=
+else
+ verbose=1
+fi
+
while [[ -n "$1" ]]; do
if [[ "$1" == "--builder" ]]; then
consolemode="con=null,fd:1"
@@ -122,6 +128,12 @@ while [[ -n "$1" ]]; do
elif [[ "$1" == "--norun" ]]; then
norun=1
shift
+ elif [[ "$1" == "--verbose" ]]; then
+ verbose=1
+ shift
+ elif [[ "$1" == "--noverbose" ]]; then
+ verbose=
+ shift
else
test=$1
break # Arguments after the test file are passed to the test itself.
@@ -153,7 +165,7 @@ function isBuildOnly() {
if ! isRunningTest && ! isBuildOnly; then
echo "Usage:" >&2
- echo " $0 [--builder] [--readonly|--ro|--readwrite|--rw] [--nobuild] <test>" >&2
+ echo " $0 [--builder] [--readonly|--ro|--readwrite|--rw] [--nobuild] [--verbose] <test>" >&2
echo " $0 --norun" >&2
exit 1
fi
@@ -257,6 +269,11 @@ fi
if (( nowrite == 1 )); then
cmdline="ro"
fi
+
+if (( verbose == 1 )); then
+ cmdline="$cmdline verbose=1"
+fi
+
cmdline="$cmdline init=/sbin/net_test.sh"
cmdline="$cmdline net_test_args=\"$test_args\" net_test_mode=$testmode"
@@ -308,6 +325,12 @@ else
blockdevice="-drive file=$SCRIPT_DIR/$ROOTFS,format=raw,if=none,id=drive-virtio-disk0$blockdevice"
blockdevice="$blockdevice -device virtio-blk-pci,drive=drive-virtio-disk0"
+ # Pass through our current console/screen size to inner shell session
+ read rows cols < <(stty size 2>/dev/null)
+ [[ -z "${rows}" ]] || cmdline="${cmdline} console_rows=${rows}"
+ [[ -z "${cols}" ]] || cmdline="${cmdline} console_cols=${cols}"
+ unset rows cols
+
# QEMU has no way to modify its exitcode; simulate it with a serial port.
#
# Choose to do it this way over writing a file to /host, because QEMU will
@@ -335,18 +358,22 @@ else
$qemu >&2 -name net_test -m 512 \
-kernel $KERNEL_BINARY \
- -no-user-config -nodefaults -no-reboot -display none \
+ -no-user-config -nodefaults -no-reboot \
+ -display none -nographic -serial mon:stdio -parallel none \
-smp 4,sockets=4,cores=1,threads=1 \
-device virtio-rng-pci \
-chardev file,id=exitcode,path=exitcode \
-device pci-serial,chardev=exitcode \
-fsdev local,security_model=mapped-xattr,id=fsdev0,fmode=0644,dmode=0755,path=$SCRIPT_DIR \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=host \
- $blockdevice $netconfig -serial stdio -append "$cmdline"
- [ -s exitcode ] && exitcode=`cat exitcode | tr -d '\r'` || exitcode=1
+ $blockdevice $netconfig -append "$cmdline"
+ [[ -s exitcode ]] && exitcode=`cat exitcode | tr -d '\r'` || exitcode=1
rm -f exitcode
fi
# UML reliably screws up the ptys, QEMU probably can as well...
fixup_ptys
+stty sane || :
+
+echo "Returning exit code ${exitcode}." 1>&2
exit "${exitcode}"