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; 210091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wangimport static org.mockito.Mockito.mock; 22d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.times; 23d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.verify; 24d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport static org.mockito.Mockito.when; 25d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 26d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport android.test.suitebuilder.annotation.SmallTest; 27d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 28d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.junit.Before; 29d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.junit.Test; 30d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.mockito.Mock; 31d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangimport org.mockito.MockitoAnnotations; 32d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 33d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang/** 34d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Unit tests for {@link com.android.server.wifi.WifiCountryCode}. 35d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 36d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang@SmallTest 37d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wangpublic class WifiCountryCodeTest { 38d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 39d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private static final String TAG = "WifiCountryCodeTest"; 40d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private String mDefaultCountryCode = "US"; 41d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private String mTelephonyCountryCode = "JP"; 420091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang private String mPersistCountryCode = ""; 43d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private boolean mRevertCountryCodeOnCellularLoss = true; 44d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Mock WifiNative mWifiNative; 45d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang private WifiCountryCode mWifiCountryCode; 46d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 47d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 48d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Setup test. 49d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 50d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Before 51d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setUp() throws Exception { 52d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang MockitoAnnotations.initMocks(this); 53d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 54d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang when(mWifiNative.setCountryCode(anyString())).thenReturn(true); 55d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 560091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode = new WifiCountryCode( 570091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiNative, 580091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mDefaultCountryCode, 590091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mPersistCountryCode, 60d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mRevertCountryCodeOnCellularLoss); 61d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 62d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 63d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 64d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we do not receive country code from Telephony. 65d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 66d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 67d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 68d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void useDefaultCountryCode() throws Exception { 69d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 70d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 71d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 72d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 73d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative).setCountryCode(anyString()); 7437b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 75d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 76d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 77d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 78d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony before supplicant starts. 79d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 80d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 81d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 82d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void useTelephonyCountryCode() throws Exception { 830091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode, false); 8437b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(null, mWifiCountryCode.getCountryCodeSentToDriver()); 85d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 86d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 87d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 88d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 89d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative).setCountryCode(anyString()); 9037b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 91d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 92d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 93d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 94d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony after supplicant starts. 95d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 96d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 97d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 98d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setTelephonyCountryCodeAfterSupplicantStarts() throws Exception { 99d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant starts. 100d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 10137b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 102d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony country code arrives. 1030091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode, false); 104d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 105d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 106d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 10737b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 108d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 109d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 110d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 111d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we receive country code from Telephony after we get L2 connected. 112d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 113d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 114d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 115d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void setTelephonyCountryCodeAfterL2Connected() throws Exception { 116d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant starts. 117d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 118d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 119d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 120d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony country code arrives. 1210091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode, false); 122d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony coutry code won't be applied at this time. 12337b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 124d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 125d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Telephony coutry is applied after supplicant is ready. 126d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 12737b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 128d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 129d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 130d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 131d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we can reset the country code upon sim card is removed. 132d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 133d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 134d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 135d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void resetCountryCodeWhenSIMCardRemoved() throws Exception { 1360091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode, false); 137d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 138d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 139d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 140d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 14137b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 142d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // SIM card is removed. 143d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.simCardRemoved(); 144d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is not applied yet. 14537b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 146d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 147d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is applied when supplicant is ready. 148d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 14937b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 150d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 151d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang 152d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang /** 153d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * Test if we can reset the country code upon airplane mode is enabled. 154d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang * @throws Exception 155d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang */ 156d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang @Test 157d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang public void resetCountryCodeWhenAirplaneModeEnabled() throws Exception { 1580091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setCountryCode(mTelephonyCountryCode, false); 159d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Supplicant started. 160d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 161d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Wifi get L2 connected. 162d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 16337b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 164d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Airplane mode is enabled. 165d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.simCardRemoved(); 166d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is not applied yet. 16737b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 168d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 169d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang // Country code restting is applied when supplicant is ready. 170d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang verify(mWifiNative, times(2)).setCountryCode(anyString()); 17137b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 172d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang } 1730091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang 1740091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang /** 1750091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang * Test if we will set the persistent country code if it is not empty. 1760091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang * @throws Exception 1770091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang */ 1780091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang @Test 1790091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang public void usePersistentCountryCode() throws Exception { 1800091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang String persistentCountryCode = "CH"; 1810091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode = new WifiCountryCode( 1820091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiNative, 1830091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mDefaultCountryCode, 1840091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang persistentCountryCode, 1850091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mRevertCountryCodeOnCellularLoss); 1860091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang // Supplicant started. 1870091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setReadyForChange(true); 1880091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang // Wifi get L2 connected. 1890091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang mWifiCountryCode.setReadyForChange(false); 1900091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang verify(mWifiNative).setCountryCode(anyString()); 19137b06cd7aae7fe27cfaf1d95cc9901548765406bNingyuan Wang assertEquals(persistentCountryCode, mWifiCountryCode.getCountryCodeSentToDriver()); 1920091305175e8c6fe7fc6d01efb9d405961db4ac7Ningyuan Wang } 193d02611ce4158fda6c2d14ee13ad7f9553f416d21Ningyuan Wang} 194