blob: 1da69f7a16afef417457c0c870f345bad160a9ad [file] [log] [blame]
#!/bin/sh
mydir=$(dirname "$0")
cd "$mydir"
. ../etc/wvtest.sh
PATH=$PATH:.
WVSTART "set-acs"
runnable mktemp &&
tmpdir=$(mktemp -d set-acsXXXXXXXXXX) ||
tmpdir=/tmp/set-acs.$$
mkdir -p "$tmpdir"
cleanup() {
echo "Temp files:" >&2
find "$tmpdir" | while read name; do
[ -f "$name" ] && echo "$name: $(cat $name)" >&2
done
echo "---" >&2
rm -rf "$tmpdir"
}
trap cleanup EXIT
export configdir="$tmpdir/conf" cwmpdir="$tmpdir/cwmp" find_acs=false
export DEFAULT_URL=https://acs.prod.gfsvc.com/default/cwmp
wipe() {
rm -rf "$configdir" "$cwmpdir"
}
wipe
WVFAIL set-acs cwmp bork
WVFAIL set-acs dhcp bork
WVFAIL set-acs manual bork
# If the find-acs service fails and there are no other configured URLs,
# we shouldn't even assume the hardcoded default ACS URL - something
# fishy is going on, and we should probably wait until it sorts itself out.
export nowcmd='echo 0'
export find_acs='false'
WVFAIL set-acs print
WVPASSEQ "$(set-acs print)" ""
export find_acs='printf http://fake-find-acs'
WVPASS set-acs bounce
WVPASSEQ "$(set-acs print)" http://fake-find-acs
export find_acs='printf http://spork'
WVPASSEQ "$(set-acs print)" http://fake-find-acs # cached
WVPASS set-acs bounce
WVPASSEQ "$(set-acs print)" http://spork
export find_acs='false' # pretend the server is not responding
WVPASSEQ "$(set-acs print)" http://spork # cached
export nowcmd='echo 1000' # short time passes
WVPASSEQ "$(set-acs print)" http://spork # still cached
export nowcmd='echo 10000' # hold time passes, cache not expired
WVPASSEQ "$(set-acs print)" http://spork # failure doesn't overwrite cache
export nowcmd='echo 20000' # hold time passes, cache not expired
export find_acs='printf http://spork2'
WVPASSEQ "$(set-acs print)" http://spork2 # cache refreshed
export nowcmd='echo 2000000' # long time passes
export find_acs='true'
WVPASSEQ "$(set-acs print)" "$DEFAULT_URL" # cache expired
export find_acs='printf https://quark'
WVPASSEQ "$(set-acs print)" "$DEFAULT_URL" # hold time not expired
export nowcmd='echo 2005000' # short time passes
WVPASSEQ "$(set-acs print)" "https://quark"
export find_acs='printf http://bork'
WVPASSEQ "$(set-acs print)" "https://quark"
echo -n http://dhcp >$configdir/acs_url.dhcp
WVPASSEQ "$(set-acs print)" http://dhcp
WVPASS set-acs dhcp http://dhcp2
WVPASSEQ "$(set-acs print)" http://dhcp2
WVPASS set-acs manual http://manual
WVPASSEQ "$(set-acs print)" http://manual
WVPASS set-acs bless http://manual
WVPASS set-acs cwmp http://cwmp
WVPASSEQ "$(set-acs print)" http://cwmp
WVPASS set-acs timeout http://dhcp2
WVPASSEQ "$(set-acs print)" http://cwmp
WVPASS set-acs timeout http://cwmp
WVPASSEQ "$(set-acs print)" http://manual
WVPASS set-acs timeout http://manual # manual setting never times out
WVPASSEQ "$(set-acs print)" http://manual
WVPASS set-acs manual clear
WVPASSEQ "$(set-acs print)" https://quark
WVPASS set-acs bounce
WVPASSEQ "$(set-acs print)" http://bork
wipe
WVPASS set-acs dhcp http://1
WVPASSEQ "$(set-acs print)" http://1
WVPASS set-acs bless http://1
WVPASS set-acs cwmp http://2
WVPASSEQ "$(set-acs print)" http://2
WVPASS set-acs timeout http://2
WVPASSEQ "$(set-acs print)" http://1
WVPASS set-acs timeout http://1
WVPASSEQ "$(set-acs print)" http://1 # can't timeout a blessed URL
WVPASS set-acs cwmp http://1a
WVPASSEQ "$(set-acs print)" http://1a
WVPASS set-acs cwmp http://1b
WVPASSEQ "$(set-acs print)" http://1b
WVPASS set-acs bless http://1b # implicitly blesses http://1
WVPASSEQ "$(set-acs print)" http://1b
WVPASS set-acs cwmp http://2
WVPASSEQ "$(set-acs print)" http://2
WVPASS set-acs bless http://2 # overwrites http://1b
WVPASS set-acs cwmp http://3 # 2 redirects to 3
WVPASS set-acs dhcp http://4 # dhcp delivers a new setting: takes precedence
WVPASSEQ "$(set-acs print)" http://4
WVPASS set-acs dhcp6 http://x1 # dhcp6 is even higher precedence
WVPASSEQ "$(set-acs print)" http://x1
WVPASS set-acs timeout http://x1 # dhcp6 didn't work
WVPASSEQ "$(set-acs print)" http://4
WVPASS set-acs timeout http://4 # dhcp new setting didn't work, fall back
WVPASSEQ "$(set-acs print)" http://3
WVPASS set-acs timeout http://3 # prior redirect also didn't work
WVPASSEQ "$(set-acs print)" http://2
WVPASS set-acs timeout http://2 # can't timeout a blessed URL
WVPASSEQ "$(set-acs print)" http://2
WVPASS set-acs dhcp clear
WVPASSEQ "$(set-acs print)" http://bork
WVPASS set-acs timeout http://bork # now *everything* timed out: auto reset
WVPASSEQ "$(set-acs print)" http://x1 # restarts at the top
WVPASS set-acs timeout http://x1
WVPASSEQ "$(set-acs print)" http://bork
wipe
WVPASS set-acs cwmp http://2
WVPASS set-acs bless http://2
WVPASS set-acs cwmp http://4
WVPASSEQ "$(set-acs print)" http://4
WVPASS set-acs cwmp clear
WVPASSEQ "$(set-acs print)" "http://bork"
wipe
# test for clearing redirs
WVPASS set-acs cwmp http://4
WVPASS set-acs bless http://4
WVPASS set-acs cwmp http://4a # tried but not yet blessed
WVPASS set-acs dhcp http://5 # dhcp delivers a new setting: takes precedence
WVPASSEQ "$(set-acs print)" http://5
WVPASS set-acs cwmp clear # no-op, because nothing redirected the dhcp url
WVPASSEQ "$(set-acs print)" http://5
WVPASS set-acs cwmp http://5a # redirects the dhcp url
WVPASSEQ "$(set-acs print)" http://5a
WVPASS set-acs cwmp clear # undo dhcp redir but not the original redirs
WVPASSEQ "$(set-acs print)" http://5
WVPASS set-acs dhcp clear
WVPASSEQ "$(set-acs print)" http://4a
WVPASS set-acs cwmp clear # clears *both* redirs
WVPASSEQ "$(set-acs print)" "http://bork"
# almost the same, but shows nesting of blessed and non-blessed redirs of the
# same url
WVPASS set-acs cwmp http://4
WVPASS set-acs bless http://4
WVPASS set-acs cwmp http://4a # tried but not yet blessed
WVPASSEQ "$(set-acs print)" http://4a
WVPASS set-acs timeout http://4a
WVPASSEQ "$(set-acs print)" http://4
WVPASS set-acs cwmp clear
WVPASSEQ "$(set-acs print)" "http://bork"