Files
src/tests/acceptance/network.exp
T

78 lines
2.9 KiB
Plaintext
Executable File

#!/usr/bin/expect -f
if {$argc != 3} {
puts stderr "usage: network.exp RUNNER DISK MODE"
exit 2
}
set runner [file normalize [lindex $argv 0]]
set disk [file normalize [lindex $argv 1]]
set mode [lindex $argv 2]
if {$mode ni {first verify}} {
puts stderr "invalid network mode: $mode"
exit 2
}
set timeout 90
set acceptance_name "network"
source [file join [file dirname [info script]] harness.exp]
proc poweroff {} {
sendline {kill -TERM 1}
await "cheesed: received poweroff request" "the poweroff request"
await "Stopping network" "the network shutdown"
await "cheesed: root filesystem remounted read-only" "the read-only remount"
expect {
eof {
set result [wait]
if {[lindex $result 3] != 0} {
fail "QEMU exited unsuccessfully"
}
}
timeout { fail "QEMU did not power off" }
}
}
acceptance_log
set env(MOUSE_BOOT_MODE) disk
set env(MOUSE_DISK_IMAGE) $disk
set env(MOUSE_NETWORK) 1
set env(MOUSE_KERNEL_ARGS) "console=$env(MOUSE_CONSOLE) root=PARTUUID=4d4f5553-4500-4000-8000-000000000002 rootfstype=btrfs rw rootwait init=/sbin/cheesed mouse.autologin=1 panic=-1"
spawn -noecho $runner
await "Starting network" "the network service"
await "mousehole login: root (automatic login)" "the test login"
await "cheesed: service graph started; cgroup supervision active" "the completed service graph"
send -- "\r"
prompt
sendline {sh -c 'i=0; while [ ! -s /run/mouse-network.ready ] && [ "$i" -lt 60 ]; do sleep 1; i=$((i + 1)); done; test -s /run/mouse-network.ready && grep -q eth0 /proc/net/route && grep -q 00000000 /proc/net/route && grep -q "^nameserver " /etc/resolv.conf'; echo LEASE_$?}
await "LEASE_0\r" "the DHCP route and resolver state"
prompt
sendline {nc -z -w 5 1.1.1.1 80; echo IP_$?}
await "IP_0\r" "the IP endpoint"
prompt
sendline {nc -z -w 5 example.com 80; echo DNS_$?}
await "DNS_0\r" "the DNS endpoint"
prompt
sendline {service network status; echo STATUS_$?}
await "network running" "accurate service status"
await "STATUS_0\r" "the service status exit code"
prompt
sendline {service network restart}
await "Stopping network" "runtime network stop"
await "Starting network" "runtime network restart"
prompt
sendline {sh -c 'i=0; while [ ! -s /run/mouse-network.ready ] && [ "$i" -lt 60 ]; do sleep 1; i=$((i + 1)); done; test -s /run/mouse-network.ready'; echo RESTART_$?}
await "RESTART_0\r" "the renewed lease"
prompt
if {$mode eq "first"} {
sendline {sed 's/metric 100/metric 200/' /etc/dhcpcd.conf >/run/dhcpcd.conf.new && mv /run/dhcpcd.conf.new /etc/dhcpcd.conf; echo POLICY_$?}
await "POLICY_0\r" "the persistent policy update"
prompt
} else {
sendline {sh -c 'grep -q "^metric 200$" /etc/dhcpcd.conf && grep -q "eth0.*200" /proc/net/route'; echo PERSIST_$?}
await "PERSIST_0\r" "the persisted route metric"
prompt
}
poweroff
puts "$mode network acceptance passed"