78 lines
2.9 KiB
Plaintext
Executable File
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"
|