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