blob: b974a7442a84081222cde60e1ba14b59eedcc4eb [file] [log] [blame]
#!/bin/sh
#
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# UDEV event helper script that sets the system's WiFi regulatory domain
# from VPD data.
# Assertion helpers.
assert_equal() {
local actual="$1"
local expected="$2"
if [ "${actual}" != "${expected}" ]; then
echo "FAIL: expected |${expected}|, got |${actual}|"
exit 1
fi
}
assert_regdomain_is() {
local expected_code="$1"
g_vpd_data="$(cat)"
g_country_code=""
. $(dirname $0)/set_wifi_regulatory
assert_equal "${g_country_code}" "${expected_code}"
}
# Fake out the commands that are called by set_wifi_regulatory.
dump_vpd_log() {
assert_equal "$1" "--stdout"
echo "${g_vpd_data}"
}
iw() {
assert_equal "$1" "reg"
assert_equal "$2" "set"
g_country_code="$3"
}
# Simplest input.
assert_regdomain_is US <<-"EOF"
"region"="US"
EOF
# Properly handle lower-case region.
assert_regdomain_is US <<-"EOF"
"region"="us"
EOF
# If region exists multiple times, take the first one.
assert_regdomain_is JP <<-"EOF"
"region"="JP"
"region"="US"
EOF
# Other fields can come before.
assert_regdomain_is US <<-"EOF"
"initial_timezone"="America/Los_Angeles"
"region"="us"
EOF
# Other fields can come after.
assert_regdomain_is US <<-"EOF"
"region"="us"
"initial_timezone"="America/Los_Angeles"
EOF
# Region may include additional data after country code (1/2).
assert_regdomain_is CA <<-"EOF"
"region"="ca.hybrid"
EOF
# Region may include additional data after country code (2/2).
assert_regdomain_is BR <<-"EOF"
"region"="br.abnt"
EOF
# Virtual regions work correctly (1/2).
assert_regdomain_is SE <<-"EOF"
"region"="nordic"
EOF
# Virtual regions work correctly (2/2).
assert_regdomain_is "MX" <<-"EOF"
"region"="latam-es-419"
EOF
# End quote is required.
assert_regdomain_is "" <<-"EOF"
"region"="us
EOF
# Quotes are required.
assert_regdomain_is "" <<-"EOF"
region=us
EOF
# No junk allowed at end.
assert_regdomain_is "" <<-"EOF"
"region"="us"andmorestuff
EOF
# No junk allowed at beginning.
assert_regdomain_is "" <<-"EOF"
junk"region"="us"
EOF
# Must match "region" exactly.
assert_regdomain_is "" <<-"EOF"
"jregion"="us"
EOF
# Random shell meta-characters are not allowed.
assert_regdomain_is "" <<-"EOF"
"region"="ca>>/var/log/junk"
EOF
echo "PASS"