aboutgitcodebugslistschat
path: root/test/lib
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/context28
-rw-r--r--test/lib/layout4
-rwxr-xr-xtest/lib/setup13
-rwxr-xr-xtest/lib/term9
4 files changed, 43 insertions, 11 deletions
diff --git a/test/lib/context b/test/lib/context
index 0d92d8f..ccb0004 100644
--- a/test/lib/context
+++ b/test/lib/context
@@ -41,12 +41,38 @@ context_setup_nsenter() {
echo "nsenter $@ sh -c" > "${__prefix}.enter"
}
+# context_setup_guest() - Create a new context for running commands in a guest
+# $1: Context name
+# $2: CID to use for vsock
+context_setup_guest() {
+ __name="$1"
+ __cid="$2"
+ __prefix="${LOGDIR}/context_${__name}"
+ context_setup_common "${__name}"
+
+ cat > "${__prefix}.ssh" <<EOF
+Host ${__name}
+ User root
+ UserKnownHostsFile ${__prefix}.hosts
+ StrictHostKeyChecking no
+ IdentityFile ${BASEPATH}/guest-key
+ IdentityAgent none
+ ProxyCommand socat - VSOCK-CONNECT:${__cid}:22
+EOF
+ echo "ssh -F ${__prefix}.ssh ${__name}" > "${__prefix}.enter"
+
+ # Wait for the guest to be booted and accepting connections
+ while ! ssh -F "${__prefix}.ssh" "${__name}" :; do
+ sleep 0.1
+ done
+}
+
# context_teardown() - Remove a context (leave log files intact)
# $1: Context name
context_teardown() {
__name="$1"
__prefix="${LOGDIR}/context_${__name}"
- rm -f "${__prefix}.enter"
+ rm -f "${__prefix}.enter" "${__prefix}.ssh" "${__prefix}.hosts"
}
# context_exists() - Test if a context currently exists
diff --git a/test/lib/layout b/test/lib/layout
index 1401955..985d31b 100644
--- a/test/lib/layout
+++ b/test/lib/layout
@@ -92,15 +92,13 @@ layout_passt() {
get_info_cols
- tmux pipe-pane -O -t ${PANE_GUEST} "cat >> ${LOGDIR}/pane_guest.log"
- tmux select-pane -t ${PANE_GUEST} -T "guest"
-
tmux send-keys -l -t ${PANE_INFO} 'while cat /tmp/.passt_test_log_pipe; do :; done'
tmux send-keys -t ${PANE_INFO} -N 100 C-m
tmux select-pane -t ${PANE_INFO} -T "test log"
pane_watch_contexts ${PANE_HOST} host host
pane_watch_contexts ${PANE_PASST} passt passt
+ pane_watch_contexts ${PANE_GUEST} guest qemu guest
info_layout "single passt instance with guest"
diff --git a/test/lib/setup b/test/lib/setup
index a87bce9..5e9072c 100755
--- a/test/lib/setup
+++ b/test/lib/setup
@@ -35,6 +35,7 @@ setup_distro() {
setup_passt() {
context_setup_host host
context_setup_host passt
+ context_setup_host qemu
layout_passt
@@ -55,7 +56,8 @@ setup_passt() {
context_run_bg passt "valgrind --max-stackframe=$((4 * 1024 * 1024)) --trace-children=yes --vgdb=no --error-exitcode=1 --suppressions=test/valgrind.supp ./passt ${__opts} -f -t 10001 -u 10001 -P passt.pid"
sleep 5
- pane_run GUEST './qrap 5 qemu-system-$(uname -m)' \
+ GUEST_CID=94557
+ context_run_bg qemu './qrap 5 qemu-system-$(uname -m)' \
' -machine accel=kvm' \
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
' -kernel ' "/boot/vmlinuz-$(uname -r)" \
@@ -65,8 +67,10 @@ setup_passt() {
'virtio-net.napi_tx=1"' \
" -device virtio-net-pci,netdev=hostnet0,x-txburst=16384" \
" -netdev socket,fd=5,id=hostnet0" \
- ' -pidfile passt_qemu.pid'
- pane_status GUEST
+ " -pidfile passt_qemu.pid" \
+ " -device vhost-vsock-pci,guest-cid=$GUEST_CID"
+
+ context_setup_guest guest $GUEST_CID
}
# setup_pasta() - Create a network and user namespace, connect pasta to it
@@ -307,11 +311,12 @@ teardown_distro() {
# teardown_passt() - Kill qemu, remove passt PID file
teardown_passt() {
kill $(cat passt_qemu.pid)
- pane_wait GUEST
+
rm passt.pid
teardown_context_watch ${PANE_HOST} host
teardown_context_watch ${PANE_PASST} passt
+ teardown_context_watch ${PANE_GUEST} qemu guest
}
# teardown_passt() - Exit namespace, kill pasta process
diff --git a/test/lib/term b/test/lib/term
index fc229f1..2355e64 100755
--- a/test/lib/term
+++ b/test/lib/term
@@ -266,7 +266,8 @@ pane_or_context_run() {
__name="${1}"
shift
if context_exists "${__name}"; then
- context_run "${__name}" "$@" >/dev/null 2>&1
+ # Redirect stdin to stop ssh from eating the test instructions file we have on stdin
+ context_run "${__name}" "$@" >/dev/null 2>&1 < /dev/null
else
__uc="$(echo "${__name}" | tr [a-z] [A-Z])"
pane_run "${__uc}" "$@"
@@ -281,7 +282,8 @@ pane_or_context_run_bg() {
__name="${1}"
shift
if context_exists "${__name}"; then
- context_run_bg "${__name}" "$@" >/dev/null 2>&1
+ # Redirect stdin to stop ssh from eating the test instructions file we have on stdin
+ context_run_bg "${__name}" "$@" >/dev/null 2>&1 < /dev/null
else
__uc="$(echo "${__name}" | tr [a-z] [A-Z])"
pane_run "${__uc}" "$@"
@@ -295,7 +297,8 @@ pane_or_context_output() {
__name="${1}"
shift
if context_exists "${__name}"; then
- __output=$(context_run "${__name}" "$@" 2>/dev/null)
+ # Redirect stdin to stop ssh from eating the test instructions file we have on stdin
+ __output=$(context_run "${__name}" "$@" 2>/dev/null </dev/null)
if [ -z "${__output}" ]; then
echo "@EMPTY@"
else