• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 package com.android.ons;
17 
18 import static org.junit.Assert.*;
19 import static org.junit.Assert.assertFalse;
20 import static org.mockito.Mockito.*;
21 
22 import android.os.Looper;
23 import android.telephony.AccessNetworkConstants;
24 import android.telephony.AvailableNetworkInfo;
25 import android.telephony.CellIdentityLte;
26 import android.telephony.CellIdentityNr;
27 import android.telephony.CellInfo;
28 import android.telephony.CellInfoLte;
29 import android.telephony.CellInfoNr;
30 import android.telephony.NetworkScan;
31 import android.telephony.NetworkScanRequest;
32 import android.telephony.RadioAccessSpecifier;
33 import android.telephony.SubscriptionInfo;
34 
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.Collections;
42 import java.util.List;
43 
44 public class ONSNetworkScanCtlrTest extends ONSBaseTest {
45     private ONSNetworkScanCtlr mONSNetworkScanCtlr;
46     private NetworkScan mNetworkScan;
47     private List<CellInfo> mResults;
48     private int mError;
49     private boolean mCallbackInvoked;
50     private Looper mLooper;
51 
52     private static final int SEARCH_PERIODICITY = 60;
53     private static final SubscriptionInfo TEST_SUBSCRIPTION_INFO = new SubscriptionInfo(
54             1, "", 1, null, null, 0, 0, null, 0, null, "310", "210", null,
55             false, null, null);
56     private static final RadioAccessSpecifier TEST_5G_RAS = new RadioAccessSpecifier(
57             AccessNetworkConstants.AccessNetworkType.NGRAN,
58             new int[] {AccessNetworkConstants.NgranBands.BAND_71},
59             null);
60     private static final RadioAccessSpecifier TEST_4G_RAS = new RadioAccessSpecifier(
61             AccessNetworkConstants.AccessNetworkType.EUTRAN,
62             new int[] {AccessNetworkConstants.EutranBand.BAND_48},
63             null);
64 
65     @Before
setUp()66     public void setUp() throws Exception {
67         super.setUp("ONSTest");
68         mLooper = null;
69         mNetworkScan = new NetworkScan(1, 1);
70         doReturn(mNetworkScan).when(mMockTelephonyManager).requestNetworkScan(any(), any());
71     }
72 
73     @After
tearDown()74     public void tearDown() throws Exception {
75         if (mLooper != null) {
76             mLooper.quit();
77             mLooper.getThread().join();
78         }
79         super.tearDown();
80     }
81 
82     @Test
testStartFastNetworkScan()83     public void testStartFastNetworkScan() {
84         ArrayList<String> mccMncs = new ArrayList<>();
85         mccMncs.add("310210");
86         AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
87                 new ArrayList<Integer>());
88         List<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
89         availableNetworkInfos.add(availableNetworkInfo);
90         List<CellInfo> expectedResults = new ArrayList<CellInfo>();
91         CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
92         CellInfoLte cellInfoLte = new CellInfoLte();
93         cellInfoLte.setCellIdentity(cellIdentityLte);
94         expectedResults.add((CellInfo)cellInfoLte);
95 
96         initONSNetworkScanCtrl();
97 
98         // Testing startFastNetworkScan, onNetworkAvailability should be called with expectedResults
99         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
100         mONSNetworkScanCtlr.mNetworkScanCallback.onResults(expectedResults);
101         waitUntilReady(100);
102         assertEquals(expectedResults, mResults);
103     }
104 
105     @Test
testStartFastNetworkScanFail()106     public void testStartFastNetworkScanFail() {
107         List<CellInfo> expectedResults = new ArrayList<CellInfo>();
108         CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
109         CellInfoLte cellInfoLte = new CellInfoLte();
110         cellInfoLte.setCellIdentity(cellIdentityLte);
111         expectedResults.add((CellInfo)cellInfoLte);
112         ArrayList<String> mccMncs = new ArrayList<>();
113         mccMncs.add("310210");
114         AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
115                 new ArrayList<Integer>());
116         List<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
117         availableNetworkInfos.add(availableNetworkInfo);
118         mError = NetworkScan.SUCCESS;
119 
120         initONSNetworkScanCtrl();
121 
122         // Testing startFastNetworkScan, onError should be called with ERROR_INVALID_SCAN
123         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
124         mONSNetworkScanCtlr.mNetworkScanCallback.onError(NetworkScan.ERROR_INVALID_SCAN);
125         waitUntilReady(100);
126         assertEquals(NetworkScan.ERROR_INVALID_SCAN, mError);
127     }
128 
129     @Test
testStartFastNetworkScanWithMultipleNetworks()130     public void testStartFastNetworkScanWithMultipleNetworks() {
131         List<CellInfo> expectedResults = new ArrayList<CellInfo>();
132         CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
133         CellInfoLte cellInfoLte = new CellInfoLte();
134         cellInfoLte.setCellIdentity(cellIdentityLte);
135         expectedResults.add((CellInfo)cellInfoLte);
136         ArrayList<String> mccMncs = new ArrayList<>();
137         mccMncs.add("310210");
138         mccMncs.add("310211");
139         AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
140             new ArrayList<Integer>());
141         List<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
142         availableNetworkInfos.add(availableNetworkInfo);
143 
144         initONSNetworkScanCtrl();
145 
146         // Testing startSlowNetworkScan, onNetworkAvailability should be called with expectedResults
147         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
148         mONSNetworkScanCtlr.mNetworkScanCallback.onResults(expectedResults);
149         waitUntilReady(100);
150         assertEquals(expectedResults, mResults);
151     }
152 
153     @Test
testStopNetworkScan()154     public void testStopNetworkScan() {
155         List<CellInfo> expectedResults = new ArrayList<CellInfo>();
156         CellIdentityLte cellIdentityLte = new CellIdentityLte(310, 210, 1, 1, 1);
157         CellInfoLte cellInfoLte = new CellInfoLte();
158         cellInfoLte.setCellIdentity(cellIdentityLte);
159         expectedResults.add((CellInfo)cellInfoLte);
160         ArrayList<String> mccMncs = new ArrayList<>();
161         mccMncs.add("310210");
162         AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(1, 1, mccMncs,
163                 new ArrayList<Integer>());
164         List<AvailableNetworkInfo> availableNetworkInfos =
165                 new ArrayList<AvailableNetworkInfo>();
166         availableNetworkInfos.add(availableNetworkInfo);
167         mCallbackInvoked = false;
168 
169         initONSNetworkScanCtrl();
170 
171         // Testing stopNetworkScan, should not get any callback invocation after stopNetworkScan.
172         mONSNetworkScanCtlr.startFastNetworkScan(availableNetworkInfos);
173         mONSNetworkScanCtlr.stopNetworkScan();
174         mONSNetworkScanCtlr.mNetworkScanCallback.onResults(expectedResults);
175         waitUntilReady(100);
176         assertFalse(mCallbackInvoked);
177     }
178 
179     @Test
testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanEnabled()180     public void testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanEnabled() {
181         initONSNetworkScanCtrl();
182         mONSNetworkScanCtlr.setIs4gScanEnabled(true);
183 
184         NetworkScanRequest networkScanRequest = createNetworkScanRequest(new ArrayList<>());
185         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
186 
187         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
188         assertEquals(networkScanRequest.getPlmns().size(), 1);
189         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
190         assertEquals(radioAccessSpecifiers.length, 2);
191         assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
192         assertEquals(radioAccessSpecifiers[1], ONSNetworkScanCtlr.DEFAULT_4G_RAS);
193     }
194 
195     @Test
testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanDisabled()196     public void testCreateNetworkScanRequest_withNoSpecifiedRasOrBands_4gScanDisabled() {
197         initONSNetworkScanCtrl();
198         mONSNetworkScanCtlr.setIs4gScanEnabled(false);
199 
200         NetworkScanRequest networkScanRequest = createNetworkScanRequest(new ArrayList<>());
201         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
202 
203         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
204         assertEquals(networkScanRequest.getPlmns().size(), 1);
205         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
206         assertEquals(radioAccessSpecifiers.length, 1);
207         assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
208     }
209 
210     @Test
testCreateNetworkScanRequest_withSpecified5gRAS_4gScanEnabled()211     public void testCreateNetworkScanRequest_withSpecified5gRAS_4gScanEnabled() {
212         initONSNetworkScanCtrl();
213         mONSNetworkScanCtlr.setIs4gScanEnabled(true);
214 
215         NetworkScanRequest networkScanRequest = createNetworkScanRequest(
216                 new ArrayList<>(Arrays.asList(TEST_5G_RAS)));
217         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
218 
219         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
220         assertEquals(networkScanRequest.getPlmns().size(), 1);
221         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
222         assertEquals(radioAccessSpecifiers.length, 1);
223         assertEquals(radioAccessSpecifiers[0], TEST_5G_RAS);
224     }
225 
226     @Test
testCreateNetworkScanRequest_withSpecified4gRAS_4gScanEnabled()227     public void testCreateNetworkScanRequest_withSpecified4gRAS_4gScanEnabled() {
228         initONSNetworkScanCtrl();
229         mONSNetworkScanCtlr.setIs4gScanEnabled(true);
230 
231         NetworkScanRequest networkScanRequest = createNetworkScanRequest(
232                 new ArrayList<>(Arrays.asList(TEST_4G_RAS)));
233         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
234 
235         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
236         assertEquals(networkScanRequest.getPlmns().size(), 1);
237         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
238         assertEquals(radioAccessSpecifiers.length, 1);
239         assertEquals(radioAccessSpecifiers[0], TEST_4G_RAS);
240     }
241 
242     @Test
testCreateNetworkScanRequest_withSpecified4gRAS_4gScanDisabled()243     public void testCreateNetworkScanRequest_withSpecified4gRAS_4gScanDisabled() {
244         initONSNetworkScanCtrl();
245         mONSNetworkScanCtlr.setIs4gScanEnabled(false);
246 
247         NetworkScanRequest networkScanRequest = createNetworkScanRequest(
248                 new ArrayList<>(Arrays.asList(TEST_4G_RAS)));
249         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
250 
251         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
252         assertEquals(networkScanRequest.getPlmns().size(), 1);
253         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
254         assertEquals(radioAccessSpecifiers.length, 1);
255         assertEquals(radioAccessSpecifiers[0], ONSNetworkScanCtlr.DEFAULT_5G_RAS);
256     }
257 
258     @Test
testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanEnabled()259     public void testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanEnabled() {
260         initONSNetworkScanCtrl();
261         mONSNetworkScanCtlr.setIs4gScanEnabled(true);
262 
263         NetworkScanRequest networkScanRequest = createNetworkScanRequest(
264                 new ArrayList<>(Arrays.asList(TEST_5G_RAS, TEST_4G_RAS)));
265         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
266 
267         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
268         assertEquals(networkScanRequest.getPlmns().size(), 1);
269         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
270         assertEquals(radioAccessSpecifiers.length, 2);
271         assertEquals(radioAccessSpecifiers[0], TEST_4G_RAS);
272         assertEquals(radioAccessSpecifiers[1], TEST_5G_RAS);
273     }
274 
275     @Test
testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanDisabled()276     public void testCreateNetworkScanRequest_withSpecified4gAnd5gRAS_4gScanDisabled() {
277         initONSNetworkScanCtrl();
278         mONSNetworkScanCtlr.setIs4gScanEnabled(false);
279 
280         NetworkScanRequest networkScanRequest = createNetworkScanRequest(
281                 new ArrayList<>(Arrays.asList(TEST_5G_RAS, TEST_4G_RAS)));
282         RadioAccessSpecifier[] radioAccessSpecifiers = networkScanRequest.getSpecifiers();
283 
284         assertEquals(networkScanRequest.getSearchPeriodicity(), SEARCH_PERIODICITY);
285         assertEquals(networkScanRequest.getPlmns().size(), 1);
286         assertEquals(networkScanRequest.getPlmns().get(0), "310210");
287         assertEquals(radioAccessSpecifiers.length, 1);
288         assertEquals(radioAccessSpecifiers[0], TEST_5G_RAS);
289     }
290 
createNetworkScanRequest(ArrayList<RadioAccessSpecifier> ras)291     private NetworkScanRequest createNetworkScanRequest(ArrayList<RadioAccessSpecifier> ras) {
292         AvailableNetworkInfo availableNetworkInfo =
293                 new AvailableNetworkInfo.Builder(TEST_SUBSCRIPTION_INFO.getSubscriptionId())
294                         .setPriority(AvailableNetworkInfo.PRIORITY_LOW)
295                         .setMccMncs(new ArrayList<>(Arrays.asList("310210")))
296                         .setRadioAccessSpecifiers(ras)
297                         .build();
298         List<AvailableNetworkInfo> availableNetworkInfos =
299             new ArrayList<AvailableNetworkInfo>();
300         availableNetworkInfos.add(availableNetworkInfo);
301 
302         return mONSNetworkScanCtlr.createNetworkScanRequest(availableNetworkInfos,
303                 SEARCH_PERIODICITY);
304     }
305 
initONSNetworkScanCtrl()306     private void initONSNetworkScanCtrl() {
307         mReady = false;
308 
309         // initializing ONSNetworkScanCtlr
310         new Thread(new Runnable() {
311             @Override
312             public void run() {
313                 Looper.prepare();
314                 mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager,
315                     new ONSNetworkScanCtlr.NetworkAvailableCallBack() {
316                         @Override
317                         public void onNetworkAvailability(List<CellInfo> results) {
318                             mResults = results;
319                             setReady(true);
320                         }
321 
322                         public void onError(int error) {
323                             mError = error;
324                             setReady(true);
325                         }
326                     });
327 
328                 mLooper = Looper.myLooper();
329                 setReady(true);
330                 Looper.loop();
331             }
332         }).start();
333 
334         // Wait till initialization is complete.
335         waitUntilReady();
336         mReady = false;
337     }
338 
339     @Test
testGetMncMccFromCellInfoNr()340     public void testGetMncMccFromCellInfoNr() {
341         mONSNetworkScanCtlr = new ONSNetworkScanCtlr(mContext, mMockTelephonyManager, null);
342 
343         CellIdentityNr cellIdentityNr = new CellIdentityNr(0, 0, 0, new int[]{0}, "111", "222", 0,
344                 "", "",  Collections.emptyList());
345 
346         CellInfoNr cellinfoNr = new CellInfoNr(0, true, 0, cellIdentityNr, null);
347 
348         assertEquals(mONSNetworkScanCtlr.getMccMnc(cellinfoNr), "111222");
349     }
350 }
351