diff options
author | Runciter | 2024-10-24 21:36:24 +0800 |
---|---|---|
committer | Runciter | 2024-10-24 21:36:24 +0800 |
commit | 4aadbabc923505d54d70449940d863fe0443f046 (patch) | |
tree | f52becb24598edfd63ca610f2e0328bf6db302d0 /whispers-tree-tests | |
download | whispers-tests-4aadbabc923505d54d70449940d863fe0443f046.tar.gz |
Initial.v0.1
A AUTHORS
A COPYING
A ChangeLog
A INSTALL
A Makefile.am
A Makefile.in
A NEWS
A README
A aclocal.m4
A configure
A configure.ac
A install-sh
A missing
A whispers-tree-tests
A whispers-vpn-tests
Diffstat (limited to 'whispers-tree-tests')
-rwxr-xr-x | whispers-tree-tests | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/whispers-tree-tests b/whispers-tree-tests new file mode 100755 index 0000000..ed20362 --- /dev/null +++ b/whispers-tree-tests @@ -0,0 +1,345 @@ +#!/bin/sh + +BOOT_WAIT_DEFAULT=25 +# set GO_PLAY_KIDS to no to have a longer sequence of tests +GO_PLAY_KIDS=no + +YESCOUNT=0 +NOCOUNT=0 + +function testcount() +{ + test $1 = $2 && echo SUCCESS || echo FAILED + test $1 = $2 && YESCOUNT=$(($YESCOUNT + 1)) || NOCOUNT=$(($NOCOUNT + 1)) +} + +function dirtyssh() +{ + ssh -q \ + -o UserKnownHostsFile=/dev/null \ + -o StrictHostKeyChecking=no \ + -p $1 \ + root@localhost \ + "$2" +} + +function herd_service_status() +{ + echo "herd status of $2 on ${VM[$1]}:" + dirtyssh ${PORT[$1]} "herd status $2" + echo +} + +function herd_test_service_status() +{ + echo "Test if the $2 service is $3 on ${VM[$1]}." + RESULT=$(herd_service_status $1 $2 | awk -- '/It is '$3'/ {print $3}') + testcount ${RESULT} $3 + echo +} + +function test_forward() +{ + echo "From ${VM[$1]}, take reverse port forward opened by +${VM[$2]} to connect to ${VM[$3]} through +sshd of ${VM[$4]}." + EXITHOST=reset + EXITHOST=$(dirtyssh \ + ${PORT[$1]} \ + "ssh -q \\ + -o UserKnownHostsFile=/dev/null \\ + -o StrictHostKeyChecking=no \\ + -p $5 \\ + root@$6 \\ + hostname") + echo "Hostname at forward exit: ${EXITHOST}, expected: ${VM[$3]}" + testcount ${EXITHOST} ${VM[$3]} +} + +echo "*** DEFINING VM INSTANCIATION ARRAYS" +echo + +I=0 +SSHD_WILD=$I + +VM[$I]=sshd-wild +echo "* VM: ${VM[$I]}" +EXTRA_SERVICES[$I]="" +PORT[$I]=$((10022+$I)) +EXTRAPORT_HOST[$I]=$((${PORT[$I]}+1000)) +EXTRAPORT_VM[$I]=$((${PORT[$I]}+2000)) +ULTIMAPORT_HOST[$I]=$((${PORT[$I]}+3000)) +ULTIMAPORT_VM[$I]=$((${PORT[$I]}+4000)) +echo + +I=$(($I+1)) +SSHD_REMOTE=$I + +VM[$I]=sshd-remote +echo "* VM: ${VM[$I]}" +ALLOW_GATEWAY[$I]="yes" +EXTRA_SERVICES[$I]="" +PORT[$I]=$((10022+$I)) +EXTRAPORT_HOST[$I]=$((${PORT[$I]}+1000)) +EXTRAPORT_VM[$I]=$((${PORT[$I]}+2000)) +ULTIMAPORT_HOST[$I]=$((${PORT[$I]}+3000)) +ULTIMAPORT_VM[$I]=$((${PORT[$I]}+4000)) +EXTRA_SERVICES[$I]="" +echo + +I=$(($I+1)) +SSHD_SOCKS=$I + +VM[$I]=sshd-socks +echo "* VM: ${VM[$I]}" +ALLOW_GATEWAY[$I]="yes" +BOOT_WAIT[$I]=25 +EXTRA_SERVICES[$I]="" +PORT[$I]=$((10022+$I)) +EXTRAPORT_HOST[$I]=$((${PORT[$I]}+1000)) +EXTRAPORT_VM[$I]=$((${PORT[$I]}+2000)) +ULTIMAPORT_HOST[$I]=$((${PORT[$I]}+3000)) +ULTIMAPORT_VM[$I]=$((${PORT[$I]}+4000)) +echo + +I=$(($I+1)) +WHISPERS=$I + +VM[$I]=whispers +echo "* VM: ${VM[$I]}" +EXTRA_SERVICES[$I]="" +PORT[$I]=$((10022+$I)) +EXTRAPORT_HOST[$I]=$((${PORT[$I]}+1000)) +EXTRAPORT_VM[$I]=$((${PORT[$I]}+2000)) +ULTIMAPORT_HOST[$I]=$((${PORT[$I]}+3000)) +ULTIMAPORT_VM[$I]=$((${PORT[$I]}+4000)) +EXTRA_SERVICES[$I]=" + (service + whispers-service-type + (whispers-configuration + (lieutenants + (list + (service + whispers-service-type + (whispers-configuration + (name 'bare) + (lieutenants + (list + (service + persistent-ssh-service-type + (ssh-connection-configuration + (require-networking? #f) + (socks-proxy-config + (socks-proxy-configuration + (use-proxy? #t) + (dynamic-forward + (ssh-connection-configuration + (require-networking? #f) + (sshd-host \"10.0.2.2\") + (sshd-port ${PORT[$SSHD_SOCKS]}) + (forwards + (list (dynamic-forward-configuration))))))) + (sshd-host \"10.0.2.2\") + (sshd-port ${PORT[$SSHD_REMOTE]}) + (forwards + (list (reverse-port-forward-configuration + (entry-port ${EXTRAPORT_VM[$SSHD_REMOTE]}) + (forward-host \"10.0.2.2\") + (exit-port ${PORT[$SSHD_WILD]})))))) + (service + whispers-service-type + (whispers-configuration + (name 'burr) + (user \"whispers\") + (group \"whispers\"))) + (service + whispers-service-type + (whispers-configuration + (name 'bear) + (user \"whispers\") + (group \"whispers\") + (lieutenants + (list + (service + whispers-service-type + (whispers-configuration + (name 'bearable) + (user \"whispers\") + (group \"whispers\"))) + (service + whispers-service-type + (whispers-configuration + (name 'bore) + (user \"whispers\") + (group \"whispers\") + (extend-user? #t) + (extend-group? #t)))))))))))))))" +echo + +for I in ${!PORT[@]} +do + EXTRACONTENT[$I]="" + if [ -v ALLOW_TUNDEV[$I] ] + then + EXTRACONTENT[$I]=" + (extra-content \" +PermitTunnel=point-to-point\")" + fi + GATEWAY[$I]="" + if [ -v ALLOW_GATEWAY[$I] ] + then + GATEWAY[$I]=" + (gateway-ports? #t)" + fi + WAIT[$I]=$BOOT_WAIT_DEFAULT + if [ -v BOOT_WAIT[$I] ] + then + WAIT[$I]=${BOOT_WAIT[$I]} + fi +done +echo + +echo "*** CONCATENATING SYSTEM CONFIGURATIONS" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + echo "(use-modules (guix records) + (gnu) + (whispers services whispers) + (whispers services ssh-tunneler)) +(use-service-modules networking ssh desktop) +(use-package-modules ssh lsof) + +(operating-system + (host-name \"${VM[$I]}\") + (timezone \"Asia/Shanghai\") + (locale \"en_US.utf8\") + + (bootloader (bootloader-configuration + (bootloader grub-bootloader) + (targets '(\"/dev/sda\")))) + + (file-systems (cons (file-system + (device (file-system-label \"root\")) + (mount-point \"/\") + (type \"ext4\")) + %base-file-systems)) + + (users %base-user-accounts) + + (packages (append (list lsof) + %base-packages)) + + (services + (append + (list (service dhcp-client-service-type) + (service openssh-service-type + (openssh-configuration + (permit-root-login #t) + (allow-empty-passwords? #t) + (openssh openssh-sans-x) + (port-number 22)${GATEWAY[$I]}${EXTRACONTENT[$I]}))${EXTRA_SERVICES[$I]}) + %base-services)))" > /tmp/${VM[$I]}.scm + echo +done +echo + +echo "*** INSTANCIATING VMs" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + VMRUN[$I]=$(guix system vm /tmp/${VM[$I]}.scm) + echo +done +echo + +echo "*** SILENTLY BOOTING VMs..." +echo +for I in ${!PORT[@]} +do + NICSTANCE=-"nic user,model=virtio-net-pci,hostfwd=tcp::${PORT[$I]}-:22,hostfwd=tcp::${EXTRAPORT_HOST[$I]}-:${EXTRAPORT_VM[$I]},hostfwd=tcp::${ULTIMAPORT_HOST[$I]}-:${ULTIMAPORT_VM[$I]}" + echo "* VM: ${VM[$I]}" + ${VMRUN[$I]} \ + $NICSTANCE \ + -display none & + sleep ${WAIT[$I]} + echo +done +echo + +echo "*** SETTING PASSWORDLESS LOGIN FOR WHISPERS USERS..." +echo +echo "* VM: ${VM[$WHISPERS]}" +dirtyssh ${PORT[$CLIENT01]} 'passwd -d whispers' +echo +echo + +echo "*** REPORTING SHEPHERD STATUS" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + dirtyssh ${PORT[$I]} 'herd status' + echo +done +echo + +echo "*** REPORTING NETWORK INTERFACES" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + dirtyssh ${PORT[$I]} 'ip addr show' + echo +done +echo + +echo "*** REPORTING ROUTES" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + dirtyssh ${PORT[$I]} 'ip route' + echo +done +echo + +function full_tests() +{ + herd_service_status $WHISPERS whispers + herd_test_service_status $WHISPERS whispers running +} + +if [[ foo$GO_PLAY_KIDS == foono ]] +then + full_tests + echo +fi + +echo "*** TESTS SUMMARRY" +echo +echo Successes: $YESCOUNT +echo Failures: $NOCOUNT +echo +echo + +echo "You can ssh into the VMs from another terminal of this host" +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}, port: ${PORT[$I]}" +done +echo +read -n 1 -r -s -p "When done playing, press any key to halt the VMs..." +echo +echo + +echo "*** HALTING VMs" +echo +for I in ${!PORT[@]} +do + echo "* VM: ${VM[$I]}" + dirtyssh ${PORT[$I]} halt + echo +done |