blob: a888b7324f08056cc0ef67ae9e161dc45e2ba4bd [file] [log] [blame]
#!/bin/sh
# Test script for /bin/apman
mydir=$(dirname "$0")
cd "$mydir"
. ../etc/wvtest.sh
PATH=$PATH:.
. /etc/utils.sh
runnable mktemp &&
tmpdir="$(mktemp -d ipapplyXXXXXXXXXX)" ||
tmpdir="/tmp/ipapply.$$"
tmpbindir="$tmpdir/test_bin"
mkdir -p "$tmpdir" && echo "using temp dir $tmpdir"
mkdir "$tmpbindir"
hostapd_running() {
pgrep -f '^hostapd .* /tmp/hostapd.conf.wlan.*' >/dev/null
}
binwifi_running() {
pgrep -f '/bin/wifi' >/dev/null
}
hostapd_wait_check_running() {
local should_be_running="$1"
echo 'waiting for /bin/wifi to start'
for x in $(seq 50); do
if binwifi_running; then
break
fi
echo -n "."
sleep 0.1
done
echo "waiting for /bin/wifi to finish..."
while binwifi_running; do
echo -n "."
sleep 0.5
done
if hostapd_running; then echo 'hostapd running'; fi
if $should_be_running; then
WVPASS hostapd_running
else
WVFAIL hostapd_running
fi
}
wait_route_changed() {
local operation="$1"
local route="$2"
local interface="$3"
for x in $(seq 50); do
if grep "$operation $route" "$ip_out" | grep "dev $interface"; then
return 0
fi
sleep 0.1
done
return 1
}
ip_out="$tmpdir/ip.out"
cat >"$tmpbindir/ip" <<-EOF
#!/bin/sh
echo test_bin/ip \$@ >>$ip_out
if [ "x\$3" = "xshow" -a -e $tmpdir/ip_route_show ]; then
cat $tmpdir/ip_route_show
fi
exit 0
EOF
chmod 777 "$tmpbindir/ip"
PATH="$tmpbindir:$PATH"
echo "Setting up"
wifi stop
pkill "apman$"
rm -f /config/conman/command*
rm -f /config/conman/access_point*
rm -f /tmp/conman/command*
rm -f /tmp/conman/access_point*
# Creating wlan0_apmantest sometimes fails if we don't reset wlan0.
wlan0mac=$(cat /sys/class/net/wlan0/address)
mac=$(mac_addr_increment $wlan0mac 100)
iw dev wlan0 del
iw dev wlan0_apmantest del
WVPASS iw phy phy0 interface add wlan0 type __ap
WVPASS ip link set dev wlan0 address "$wlan0mac"
WVPASS iw phy phy0 interface add wlan0_apmantest type __ap
WVPASS ip link set dev wlan0_apmantest address "$mac"
# Start apman.
apman&
WVSTART "access points"
WVFAIL hostapd_running
touch /config/conman/access_point.5
WVFAIL hostapd_running
echo "Enable 5 GHz access point"
echo "env\nWIFI_PSK=password\nwifi\nset\n-b\n5\n-s\nssid" > /tmp/conman/command.5
echo "Waiting to make sure hostapd doesn't start (wrong location)"
hostapd_wait_check_running false
echo "Enable 5 GHz access point"
echo "env\nWIFI_PSK=password\nwifi\nset\n-b\n5\n-s\nssid" > /config/conman/command.5
hostapd_wait_check_running true
echo "Disable 5 GHz access point"
rm /config/conman/access_point.5
touch /tmp/conman/access_point.5
hostapd_wait_check_running false
touch /tmp/conman/access_point._apmantest.2.4
echo "Waiting to make sure hostapd doesn't start"
hostapd_wait_check_running false
echo "env\nWIFI_PSK=password\nwifi\nset\n-b\n2.4\n-s\nssid" > /config/conman/command.2.4
echo "Waiting to make sure hostapd doesn't start (wrong suffix)"
hostapd_wait_check_running false
echo "env\nWIFI_PSK=password\nwifi\nset\n-b\n2.4\n-s\nssid" > /config/conman/command._apmantest.2.4
echo "Waiting to make sure hostapd doesn't start (wrong location)"
hostapd_wait_check_running false
echo "env\nWIFI_PSK=password\nwifi\nset\n-b\n2.4\n-s\nssid\n-S\n_apmantest" > /tmp/conman/command._apmantest.2.4
hostapd_wait_check_running true
rm /tmp/conman/access_point._apmantest.2.4
touch /config/conman/access_point._apmantest.2.4
echo "Waiting to make sure hostapd doesn't start (wrong location)"
hostapd_wait_check_running false
WVSTART "route management"
echo "192.168.1.1" > /tmp/conman/gateway.wlan0_apmantest
echo "192.168.1.0/24" > /tmp/conman/subnet.wlan0_apmantest
WVPASS wait_route_changed "add" "default via 192.168.1.1" "wlan0_apmantest"
WVPASS wait_route_changed "add" "192.168.1.0/24" "wlan0_apmantest"
# Make sure non-interfaces are ignored.
echo "192.168.2.1" > /tmp/conman/gateway.wlan0_apmantest.tmp
echo "192.168.2.0/16" > /tmp/conman/subnet.wlan0_apmantest.tmp
echo "192.168.3.1" > /tmp/conman/gateway.wlan0_apmantest_tmp
echo "192.168.3.0/16" > /tmp/conman/subnet.wlan0_apmantest_tmp
echo "default via 192.168.1.1 dev wlan0_apmantest" > $tmpdir/ip_route_show
echo "192.168.1.0/24 dev wlan0_apmantest" >> $tmpdir/ip_route_show
echo "192.168.1.0/16" > /tmp/conman/subnet.wlan0_apmantest
WVPASS wait_route_changed "del" "default" "wlan0_apmantest"
WVPASS wait_route_changed "add" "default via 192.168.1.1" "wlan0_apmantest"
WVPASS wait_route_changed "del" "192.168.1.0/24" "wlan0_apmantest"
WVPASS wait_route_changed "add" "192.168.1.0/16" "wlan0_apmantest"
WVPASS grep "192\.168\.1\." "$ip_out"
WVFAIL grep "192\.168\.2\." "$ip_out"
WVFAIL grep "192\.168\.3\." "$ip_out"
echo "Cleaning up"
WVPASS iw dev wlan0_apmantest del
pkill "apman$"
wifi off
rm -f /config/conman/command*
rm -f /config/conman/access_point*
rm -f /tmp/conman/command*
rm -f /tmp/conman/access_point*
rm -f /tmp/conman/gateway.br0
rm -rf $tmpdir