#!/bin/sh
# Test script for /bin/wifi
mydir=$(dirname "$0")
cd "$mydir"
. ../etc/wvtest.sh
PATH=$PATH:.

hostapd_running() {
  pgrep -f '^hostapd .* /tmp/hostapd.conf.wlan.*'
}

# conman isn't present on all devices.  QUIET=1 makes stop return 0 if conman
# isn't found.
QUIET=1 stop conman
# Stop returns 1 on failure and 143 on success.
WVPASSNE 1 $?

stop waveguide
WVPASSNE 1 $?


WVSTART "wifi basics"

WVPASS runnable wifi
WVPASS wifi stop -P
WVFAIL hostapd_running

WVPASS wifi restore
WVFAIL hostapd_running

rm -f /tmp/*.wlan[0-9] /tmp/*.wlan[0-9] /tmp/*.wcli[0-9] /tmp/*.opts.2.4 /tmp/*.opts.5

WVPASS wifi set -b2.4 -e NONE
WVPASS hostapd_running

export WIFI_PSK=whatever
WVPASS wifi set -b2.4 -P
WVPASS hostapd_running


WVSTART "Save the autochannel settings and pick a good channel"
WVPASSEQ NONDFS-2.4-20 \
    "$(cat /tmp/autotype.wlan*)-$(cat /tmp/band.wlan*)-$(cat /tmp/width.wlan*)"
chan1=$(cat /tmp/autochan.wlan*)
WVPASS [ "$chan1" -gt 0 ]
WVPASS [ "$chan1" -lt 12 ]


WVSTART "hostapd doesn't restart if settings are unchanged"
pid1=$(WVPASS hostapd_running)
WVPASS wifi set -b2.4
WVPASSEQ "$pid1" "$(hostapd_running)"


WVSTART "autochannel cache"
WVPASS wifi stop -b2.4
WVPASS wifi set -b2.4
chan2=$(cat /tmp/autochan.wlan*)
WVPASSEQ "$chan1" "$chan2"

pid2=$(WVPASS hostapd_running)
WVPASSNE "$pid1" "$pid2"


WVSTART "manual channel selection"
chanfile=$(ls /tmp/autochan.wlan*)
WVPASS [ -e "$chanfile" ]
WVPASS wifi set -b2.4 -c11
WVFAIL [ -e "$chanfile" ]


WVSTART "autochannel 2.4GHz only has one choice with -w40"
WVPASS wifi set -b2.4 -w40
WVPASSEQ 1 "$(cat /tmp/autochan.wlan*)"


WVSTART "multi-radio settings"
WVPASS wifi set -b5 -P
WVPASS hostapd_running
WVPASS ls -l /config/wifi
if is-network-box; then
  # A network box has 2 radios to run at the same time
  WVPASSEQ 2 $(hostapd_running | wc -l)

  # On network box, check we can stop only one radio.
  # On other devices, this result is undefined, so don't test it.
  WVPASS wifi stop -b2.4
  WVPASS hostapd_running
else
  # Anything else has only a single radio
  WVPASSEQ 1 $(hostapd_running | wc -l)
fi
WVPASS wifi stop
WVFAIL hostapd_running
WVPASS ls -l /config/wifi


WVSTART "primary channel selection with mixed widths"
WVPASS wifi set -b5 -c40 -w80
WVPASS hostapd_running
WVPASS grep -q vht_oper_centr_freq_seg0_idx=42 /tmp/hostapd.conf.*
WVPASS wifi set -b5 -c161 -w80
WVPASS hostapd_running
WVPASS grep -q vht_oper_centr_freq_seg0_idx=155 /tmp/hostapd.conf.*
# fail on a channel with no HT40/VHT80 companion channels
WVFAIL wifi set -b5 -c165 -w80
WVFAIL wifi set -b5 -c165 -w40


WVSTART "wifi restore"
WVPASS wifi restore
WVPASS hostapd_running
if is-network-box; then
  # A network box has 2 radios to run at the same time
  WVPASSEQ 2 $(hostapd_running | wc -l)
else
  # Anything else has only a single radio
  WVPASSEQ 1 $(hostapd_running | wc -l)
fi

WVSTART "edge case SSIDs/PSKs"
pathological="a @#$\(^.-)/;?[:_%]\"{'}=|!~\`"
WIFI_PSK="$pathological" WVPASS wifi set -b5 --ssid "$pathological"
WVPASS hostapd_running
WVPASS grep -F "ssid=$pathological" /tmp/hostapd.conf.*
WVPASS grep -F "wpa_passphrase=$pathological" /tmp/hostapd.conf.*

newline_null=$(printf "foo\n\0bar78")
WIFI_PSK="$newline_null" WVPASS wifi set -b5 --ssid "$newline_null"
WVPASS hostapd_running
WVPASS grep -F "ssid=foobar78" /tmp/hostapd.conf.*
WVPASS grep -F "wpa_passphrase=foobar78" /tmp/hostapd.conf.*

WVPASS wifi set -b5 --ssid '123'
WVPASS hostapd_running
WVPASS grep -F "ssid=123" /tmp/hostapd.conf.*

WVPASS wifi set -b5 --ssid 'foo bar'
WVPASS hostapd_running
WVPASS grep -F "ssid=foo bar" /tmp/hostapd.conf.*
# b/20460495
shown_ssid=$(wifi show | grep -F "SSID: foo bar")
WVPASS [ -n "$shown_ssid" ]

unicode="נְקֻדּוֹת"
# PSKs must be ASCII or hex.
WIFI_PSK="$unicode" WVFAIL wifi set -b5 --ssid "$unicode"
WIFI_PSK="abcdefgh" WVPASS wifi set -b5 --ssid "$unicode" -P
WVPASS wifi off
WVPASS wifi restore
WVPASS hostapd_running
WVPASS grep -F "ssid=$unicode" /tmp/hostapd.conf.*


# We can't really test client mode in a unit test because there is nothing to
# connect to, so setclient should fail...
WVSTART "client mode generates a correct wpa_supplicant.conf"
export WIFI_CLIENT_PSK=passphrase
# This will fail because (hopefully) this SSID doesn't exist.
WVFAIL wifi setclient -b2.4 -s HOPEFULLY_NONEXISTENT_SSID
# ...but we can at least check that the expected config was generated.
WVPASS grep "ctrl_interface=/var/run/wpa_supplicant" /tmp/wpa_supplicant.conf.wcli0
WVPASS grep "ap_scan=1" /tmp/wpa_supplicant.conf.wcli0
WVPASS grep "ssid=\"HOPEFULLY_NONEXISTENT_SSID\"" /tmp/wpa_supplicant.conf.wcli0
WVPASS grep "psk=59f3e4d481645275c0a76886a187025362eb606c5486cec354ae262fd62b2bb1" /tmp/wpa_supplicant.conf.wcli0

WVPASS wifi stop -P
