WifiCountryCodeTest.java revision d02611ce4158fda6c2d14ee13ad7f9553f416d21
1d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang/* 2d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Copyright (C) 2016 The Android Open Source Project 3d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * 4d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * you may not use this file except in compliance with the License. 6d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * You may obtain a copy of the License at 7d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * 8d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * http://www.apache.org/licenses/LICENSE-2.0 9d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * 10d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Unless required by applicable law or agreed to in writing, software 11d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * distributed under the License is distributed on an "AS IS" BASIS, 12d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * See the License for the specific language governing permissions and 14d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * limitations under the License. 15d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 16d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 17d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangpackage com.android.server.wifi; 18d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 19d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.junit.Assert.assertEquals; 20d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.anyString; 21d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.times; 22d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.verify; 23d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.when; 24d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 25d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport android.test.suitebuilder.annotation.SmallTest; 26d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 27d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.junit.Before; 28d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.junit.Test; 29d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.mockito.Mock; 30d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.mockito.MockitoAnnotations; 31d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 32d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang/** 33d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Unit tests for {@link com.android.server.wifi.WifiCountryCode}. 34d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 35d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang@SmallTest 36d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangpublic class WifiCountryCodeTest { 37d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 38d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private static final String TAG = "WifiCountryCodeTest"; 39d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private String mDefaultCountryCode = "US"; 40d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private String mTelephonyCountryCode = "JP"; 41d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private boolean mRevertCountryCodeOnCellularLoss = true; 42d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Mock WifiNative mWifiNative; 43d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private WifiCountryCode mWifiCountryCode; 44d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 45d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 46d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Setup test. 47d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 48d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Before 49d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setUp() throws Exception { 50d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang MockitoAnnotations.initMocks(this); 51d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 52d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang when(mWifiNative.setCountryCode(anyString())).thenReturn(true); 53d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 54d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode = new WifiCountryCode(mWifiNative, mDefaultCountryCode, 55d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mRevertCountryCodeOnCellularLoss); 56d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 57d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 58d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 59d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we do not receive country code from Telephony. 60d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 61d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 62d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 63d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void useDefaultCountryCode() throws Exception { 64d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 65d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 66d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 67d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 68d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative).setCountryCode(anyString()); 69d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCurrentCountryCode()); 70d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 71d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 72d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 73d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony before supplicant starts. 74d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 75d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 76d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 77d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void useTelephonyCountryCode() throws Exception { 78d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode); 79d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(null, mWifiCountryCode.getCurrentCountryCode()); 80d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 81d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 82d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 83d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 84d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative).setCountryCode(anyString()); 85d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 86d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 87d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 88d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 89d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony after supplicant starts. 90d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 91d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 92d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 93d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setTelephonyCountryCodeAfterSupplicantStarts() throws Exception { 94d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant starts. 95d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 96d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCurrentCountryCode()); 97d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony country code arrives. 98d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode); 99d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 100d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 101d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 102d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 103d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 104d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 105d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 106d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony after we get L2 connected. 107d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 108d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 109d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 110d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setTelephonyCountryCodeAfterL2Connected() throws Exception { 111d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant starts. 112d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 113d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 114d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 115d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony country code arrives. 116d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode); 117d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony coutry code won't be applied at this time. 118d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCurrentCountryCode()); 119d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 120d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony coutry is applied after supplicant is ready. 121d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 122d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 123d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 124d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 125d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 126d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we can reset the country code upon sim card is removed. 127d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 128d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 129d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 130d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void resetCountryCodeWhenSIMCardRemoved() throws Exception { 131d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode); 132d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 133d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 134d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 135d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 136d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 137d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // SIM card is removed. 138d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.simCardRemoved(); 139d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is not applied yet. 140d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 141d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 142d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is applied when supplicant is ready. 143d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 144d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCurrentCountryCode()); 145d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 146d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 147d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 148d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we can reset the country code upon airplane mode is enabled. 149d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 150d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 151d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 152d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void resetCountryCodeWhenAirplaneModeEnabled() throws Exception { 153d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode); 154d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 155d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 156d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 157d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 158d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 159d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Airplane mode is enabled. 160d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.simCardRemoved(); 161d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is not applied yet. 162d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentCountryCode()); 163d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 164d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is applied when supplicant is ready. 165d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 166d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCurrentCountryCode()); 167d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 168d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang} 169