#!/bin/sh # # # Copyright (C) 2015 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # 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"