blob: 091449270468d55f8de620a709d2cbf3918f98b2 [file] [log] [blame]
Erik Klinece55eb12017-01-26 18:08:28 +09001/*
2 * Copyright (C) 2017 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
17package android.net;
18
junyulaiad010792021-01-11 16:53:38 +080019import static android.net.ConnectivityManager.TYPE_NONE;
Erik Klinece55eb12017-01-26 18:08:28 +090020import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS;
21import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN;
22import static android.net.NetworkCapabilities.NET_CAPABILITY_FOTA;
23import static android.net.NetworkCapabilities.NET_CAPABILITY_IMS;
24import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
25import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS;
26import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
27import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN;
28import static android.net.NetworkCapabilities.NET_CAPABILITY_SUPL;
29import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
30import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P;
31import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
32import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
33import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
34import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
Junyu Laia62493f2021-01-19 11:10:56 +000035import static android.net.NetworkRequest.Type.BACKGROUND_REQUEST;
junyulaiad010792021-01-11 16:53:38 +080036import static android.net.NetworkRequest.Type.REQUEST;
37import static android.net.NetworkRequest.Type.TRACK_DEFAULT;
Lorenzo Colitti76b639e2021-01-29 20:14:04 +090038import static android.net.NetworkRequest.Type.TRACK_SYSTEM_DEFAULT;
Erik Klinece55eb12017-01-26 18:08:28 +090039
Chiachang Wang859218c2021-09-16 14:38:52 +080040import static com.android.testutils.MiscAsserts.assertThrows;
41
Erik Klinece55eb12017-01-26 18:08:28 +090042import static org.junit.Assert.assertFalse;
43import static org.junit.Assert.assertNotNull;
Erik Klinece55eb12017-01-26 18:08:28 +090044import static org.junit.Assert.assertTrue;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090045import static org.junit.Assert.fail;
Lorenzo Colitti79c6f222021-03-18 00:54:57 +090046import static org.mockito.ArgumentMatchers.anyBoolean;
junyulaiad010792021-01-11 16:53:38 +080047import static org.mockito.ArgumentMatchers.eq;
Philip P. Moltmann7bc33df2020-03-26 11:50:35 -070048import static org.mockito.ArgumentMatchers.nullable;
Remi NGUYEN VANc9c745f2021-06-15 16:05:56 +090049import static org.mockito.Mockito.CALLS_REAL_METHODS;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090050import static org.mockito.Mockito.any;
51import static org.mockito.Mockito.anyInt;
52import static org.mockito.Mockito.mock;
junyulaiad010792021-01-11 16:53:38 +080053import static org.mockito.Mockito.never;
54import static org.mockito.Mockito.reset;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090055import static org.mockito.Mockito.timeout;
56import static org.mockito.Mockito.times;
57import static org.mockito.Mockito.verify;
58import static org.mockito.Mockito.when;
Erik Klinece55eb12017-01-26 18:08:28 +090059
Hugo Benichi7abd43f2017-05-09 14:09:02 +090060import android.app.PendingIntent;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090061import android.content.Context;
Brett Chabot147f6cf2019-03-04 14:14:56 -080062import android.content.pm.ApplicationInfo;
Brett Chabot147f6cf2019-03-04 14:14:56 -080063import android.net.ConnectivityManager.NetworkCallback;
Brett Chabot147f6cf2019-03-04 14:14:56 -080064import android.os.Build.VERSION_CODES;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090065import android.os.Bundle;
66import android.os.Handler;
67import android.os.Looper;
68import android.os.Message;
69import android.os.Messenger;
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +090070import android.os.Process;
Brett Chabot147f6cf2019-03-04 14:14:56 -080071
72import androidx.test.filters.SmallTest;
Remi NGUYEN VAN154cf1d2021-06-29 17:16:28 +090073
74import com.android.testutils.DevSdkIgnoreRule;
75import com.android.testutils.DevSdkIgnoreRunner;
Erik Klinece55eb12017-01-26 18:08:28 +090076
Hugo Benichi2aa65af2017-03-06 09:17:06 +090077import org.junit.Before;
Hugo Benichi1d6742c2017-03-06 06:16:51 +000078import org.junit.Test;
Hugo Benichi2aa65af2017-03-06 09:17:06 +090079import org.junit.runner.RunWith;
80import org.mockito.ArgumentCaptor;
81import org.mockito.Mock;
82import org.mockito.MockitoAnnotations;
Hugo Benichi1d6742c2017-03-06 06:16:51 +000083
Remi NGUYEN VAN154cf1d2021-06-29 17:16:28 +090084@RunWith(DevSdkIgnoreRunner.class)
Erik Klinece55eb12017-01-26 18:08:28 +090085@SmallTest
Remi NGUYEN VAN154cf1d2021-06-29 17:16:28 +090086@DevSdkIgnoreRule.IgnoreUpTo(VERSION_CODES.R)
Erik Klinece55eb12017-01-26 18:08:28 +090087public class ConnectivityManagerTest {
Hugo Benichi2aa65af2017-03-06 09:17:06 +090088
89 @Mock Context mCtx;
90 @Mock IConnectivityManager mService;
91
92 @Before
93 public void setUp() {
94 MockitoAnnotations.initMocks(this);
95 }
96
Erik Klinece55eb12017-01-26 18:08:28 +090097 static NetworkCapabilities verifyNetworkCapabilities(
98 int legacyType, int transportType, int... capabilities) {
99 final NetworkCapabilities nc = ConnectivityManager.networkCapabilitiesForType(legacyType);
100 assertNotNull(nc);
101 assertTrue(nc.hasTransport(transportType));
102 for (int capability : capabilities) {
103 assertTrue(nc.hasCapability(capability));
104 }
105
106 return nc;
107 }
108
109 static void verifyUnrestrictedNetworkCapabilities(int legacyType, int transportType) {
110 verifyNetworkCapabilities(
111 legacyType,
112 transportType,
113 NET_CAPABILITY_INTERNET,
114 NET_CAPABILITY_NOT_RESTRICTED,
115 NET_CAPABILITY_NOT_VPN,
116 NET_CAPABILITY_TRUSTED);
117 }
118
119 static void verifyRestrictedMobileNetworkCapabilities(int legacyType, int capability) {
120 final NetworkCapabilities nc = verifyNetworkCapabilities(
121 legacyType,
122 TRANSPORT_CELLULAR,
123 capability,
124 NET_CAPABILITY_NOT_VPN,
125 NET_CAPABILITY_TRUSTED);
126
127 assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
128 assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
129 }
130
131 @Test
132 public void testNetworkCapabilitiesForTypeMobile() {
133 verifyUnrestrictedNetworkCapabilities(
134 ConnectivityManager.TYPE_MOBILE, TRANSPORT_CELLULAR);
135 }
136
137 @Test
138 public void testNetworkCapabilitiesForTypeMobileCbs() {
139 verifyRestrictedMobileNetworkCapabilities(
140 ConnectivityManager.TYPE_MOBILE_CBS, NET_CAPABILITY_CBS);
141 }
142
143 @Test
144 public void testNetworkCapabilitiesForTypeMobileDun() {
145 verifyRestrictedMobileNetworkCapabilities(
146 ConnectivityManager.TYPE_MOBILE_DUN, NET_CAPABILITY_DUN);
147 }
148
149 @Test
150 public void testNetworkCapabilitiesForTypeMobileFota() {
151 verifyRestrictedMobileNetworkCapabilities(
152 ConnectivityManager.TYPE_MOBILE_FOTA, NET_CAPABILITY_FOTA);
153 }
154
155 @Test
156 public void testNetworkCapabilitiesForTypeMobileHipri() {
157 verifyUnrestrictedNetworkCapabilities(
158 ConnectivityManager.TYPE_MOBILE_HIPRI, TRANSPORT_CELLULAR);
159 }
160
161 @Test
162 public void testNetworkCapabilitiesForTypeMobileIms() {
163 verifyRestrictedMobileNetworkCapabilities(
164 ConnectivityManager.TYPE_MOBILE_IMS, NET_CAPABILITY_IMS);
165 }
166
167 @Test
168 public void testNetworkCapabilitiesForTypeMobileMms() {
169 final NetworkCapabilities nc = verifyNetworkCapabilities(
170 ConnectivityManager.TYPE_MOBILE_MMS,
171 TRANSPORT_CELLULAR,
172 NET_CAPABILITY_MMS,
173 NET_CAPABILITY_NOT_VPN,
174 NET_CAPABILITY_TRUSTED);
175
176 assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
177 }
178
179 @Test
180 public void testNetworkCapabilitiesForTypeMobileSupl() {
181 final NetworkCapabilities nc = verifyNetworkCapabilities(
182 ConnectivityManager.TYPE_MOBILE_SUPL,
183 TRANSPORT_CELLULAR,
184 NET_CAPABILITY_SUPL,
185 NET_CAPABILITY_NOT_VPN,
186 NET_CAPABILITY_TRUSTED);
187
188 assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
189 }
190
191 @Test
192 public void testNetworkCapabilitiesForTypeWifi() {
193 verifyUnrestrictedNetworkCapabilities(
194 ConnectivityManager.TYPE_WIFI, TRANSPORT_WIFI);
195 }
196
197 @Test
198 public void testNetworkCapabilitiesForTypeWifiP2p() {
199 final NetworkCapabilities nc = verifyNetworkCapabilities(
200 ConnectivityManager.TYPE_WIFI_P2P,
201 TRANSPORT_WIFI,
202 NET_CAPABILITY_NOT_RESTRICTED, NET_CAPABILITY_NOT_VPN,
203 NET_CAPABILITY_TRUSTED, NET_CAPABILITY_WIFI_P2P);
204
205 assertFalse(nc.hasCapability(NET_CAPABILITY_INTERNET));
206 }
207
208 @Test
209 public void testNetworkCapabilitiesForTypeBluetooth() {
210 verifyUnrestrictedNetworkCapabilities(
211 ConnectivityManager.TYPE_BLUETOOTH, TRANSPORT_BLUETOOTH);
212 }
213
214 @Test
215 public void testNetworkCapabilitiesForTypeEthernet() {
216 verifyUnrestrictedNetworkCapabilities(
217 ConnectivityManager.TYPE_ETHERNET, TRANSPORT_ETHERNET);
218 }
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900219
220 @Test
221 public void testCallbackRelease() throws Exception {
222 ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
223 NetworkRequest request = makeRequest(1);
Remi NGUYEN VANc9c745f2021-06-15 16:05:56 +0900224 NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class,
225 CALLS_REAL_METHODS);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900226 Handler handler = new Handler(Looper.getMainLooper());
227 ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
228
229 // register callback
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900230 when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
231 anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(request);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900232 manager.requestNetwork(request, callback, handler);
233
234 // callback triggers
235 captor.getValue().send(makeMessage(request, ConnectivityManager.CALLBACK_AVAILABLE));
Chalard Jeana23bc9e2018-01-30 22:41:41 +0900236 verify(callback, timeout(500).times(1)).onAvailable(any(Network.class),
Mike Yu96612ae2018-08-17 15:22:05 +0800237 any(NetworkCapabilities.class), any(LinkProperties.class), anyBoolean());
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900238
239 // unregister callback
240 manager.unregisterNetworkCallback(callback);
241 verify(mService, times(1)).releaseNetworkRequest(request);
242
243 // callback does not trigger anymore.
244 captor.getValue().send(makeMessage(request, ConnectivityManager.CALLBACK_LOSING));
245 verify(callback, timeout(500).times(0)).onLosing(any(), anyInt());
246 }
247
248 @Test
249 public void testCallbackRecycling() throws Exception {
250 ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
251 NetworkRequest req1 = makeRequest(1);
252 NetworkRequest req2 = makeRequest(2);
Remi NGUYEN VANc9c745f2021-06-15 16:05:56 +0900253 NetworkCallback callback = mock(ConnectivityManager.NetworkCallback.class,
254 CALLS_REAL_METHODS);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900255 Handler handler = new Handler(Looper.getMainLooper());
256 ArgumentCaptor<Messenger> captor = ArgumentCaptor.forClass(Messenger.class);
257
258 // register callback
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900259 when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
260 anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(req1);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900261 manager.requestNetwork(req1, callback, handler);
262
263 // callback triggers
264 captor.getValue().send(makeMessage(req1, ConnectivityManager.CALLBACK_AVAILABLE));
Chalard Jeana23bc9e2018-01-30 22:41:41 +0900265 verify(callback, timeout(100).times(1)).onAvailable(any(Network.class),
Mike Yu96612ae2018-08-17 15:22:05 +0800266 any(NetworkCapabilities.class), any(LinkProperties.class), anyBoolean());
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900267
268 // unregister callback
269 manager.unregisterNetworkCallback(callback);
270 verify(mService, times(1)).releaseNetworkRequest(req1);
271
272 // callback does not trigger anymore.
273 captor.getValue().send(makeMessage(req1, ConnectivityManager.CALLBACK_LOSING));
274 verify(callback, timeout(100).times(0)).onLosing(any(), anyInt());
275
276 // callback can be registered again
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900277 when(mService.requestNetwork(anyInt(), any(), anyInt(), captor.capture(), anyInt(), any(),
278 anyInt(), anyInt(), any(), nullable(String.class))).thenReturn(req2);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900279 manager.requestNetwork(req2, callback, handler);
280
281 // callback triggers
282 captor.getValue().send(makeMessage(req2, ConnectivityManager.CALLBACK_LOST));
283 verify(callback, timeout(100).times(1)).onLost(any());
284
285 // unregister callback
286 manager.unregisterNetworkCallback(callback);
287 verify(mService, times(1)).releaseNetworkRequest(req2);
288 }
289
290 // TODO: turn on this test when request callback 1:1 mapping is enforced
291 //@Test
292 private void noDoubleCallbackRegistration() throws Exception {
293 ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
294 NetworkRequest request = makeRequest(1);
295 NetworkCallback callback = new ConnectivityManager.NetworkCallback();
296 ApplicationInfo info = new ApplicationInfo();
297 // TODO: update version when starting to enforce 1:1 mapping
298 info.targetSdkVersion = VERSION_CODES.N_MR1 + 1;
299
300 when(mCtx.getApplicationInfo()).thenReturn(info);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900301 when(mService.requestNetwork(anyInt(), any(), anyInt(), any(), anyInt(), any(), anyInt(),
302 anyInt(), any(), nullable(String.class))).thenReturn(request);
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900303
304 Handler handler = new Handler(Looper.getMainLooper());
305 manager.requestNetwork(request, callback, handler);
306
307 // callback is already registered, reregistration should fail.
308 Class<IllegalArgumentException> wantException = IllegalArgumentException.class;
309 expectThrowable(() -> manager.requestNetwork(request, callback), wantException);
310
311 manager.unregisterNetworkCallback(callback);
312 verify(mService, times(1)).releaseNetworkRequest(request);
313
314 // unregistering the callback should make it registrable again.
315 manager.requestNetwork(request, callback);
316 }
317
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900318 @Test
Chiachang Wang859218c2021-09-16 14:38:52 +0800319 public void testDefaultNetworkActiveListener() throws Exception {
320 final ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
321 final ConnectivityManager.OnNetworkActiveListener listener =
322 mock(ConnectivityManager.OnNetworkActiveListener.class);
323 assertThrows(IllegalArgumentException.class,
324 () -> manager.removeDefaultNetworkActiveListener(listener));
325 manager.addDefaultNetworkActiveListener(listener);
326 verify(mService, times(1)).registerNetworkActivityListener(any());
327 manager.removeDefaultNetworkActiveListener(listener);
328 verify(mService, times(1)).unregisterNetworkActivityListener(any());
329 }
330
331 @Test
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900332 public void testArgumentValidation() throws Exception {
333 ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
334
335 NetworkRequest request = mock(NetworkRequest.class);
336 NetworkCallback callback = mock(NetworkCallback.class);
337 Handler handler = mock(Handler.class);
338 NetworkCallback nullCallback = null;
339 PendingIntent nullIntent = null;
340
Junyu Lai92c29c52021-06-22 03:03:51 +0000341 mustFail(() -> manager.requestNetwork(null, callback));
342 mustFail(() -> manager.requestNetwork(request, nullCallback));
343 mustFail(() -> manager.requestNetwork(request, callback, null));
344 mustFail(() -> manager.requestNetwork(request, callback, -1));
345 mustFail(() -> manager.requestNetwork(request, nullIntent));
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900346
Junyu Lai92c29c52021-06-22 03:03:51 +0000347 mustFail(() -> manager.requestBackgroundNetwork(null, callback, handler));
348 mustFail(() -> manager.requestBackgroundNetwork(request, null, handler));
349 mustFail(() -> manager.requestBackgroundNetwork(request, callback, null));
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900350
Junyu Lai92c29c52021-06-22 03:03:51 +0000351 mustFail(() -> manager.registerNetworkCallback(null, callback, handler));
352 mustFail(() -> manager.registerNetworkCallback(request, null, handler));
353 mustFail(() -> manager.registerNetworkCallback(request, callback, null));
354 mustFail(() -> manager.registerNetworkCallback(request, nullIntent));
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900355
Junyu Lai92c29c52021-06-22 03:03:51 +0000356 mustFail(() -> manager.registerDefaultNetworkCallback(null, handler));
357 mustFail(() -> manager.registerDefaultNetworkCallback(callback, null));
Lorenzo Colitti76b639e2021-01-29 20:14:04 +0900358
Junyu Lai92c29c52021-06-22 03:03:51 +0000359 mustFail(() -> manager.registerSystemDefaultNetworkCallback(null, handler));
360 mustFail(() -> manager.registerSystemDefaultNetworkCallback(callback, null));
361
362 mustFail(() -> manager.registerBestMatchingNetworkCallback(null, callback, handler));
363 mustFail(() -> manager.registerBestMatchingNetworkCallback(request, null, handler));
364 mustFail(() -> manager.registerBestMatchingNetworkCallback(request, callback, null));
365
366 mustFail(() -> manager.unregisterNetworkCallback(nullCallback));
367 mustFail(() -> manager.unregisterNetworkCallback(nullIntent));
368 mustFail(() -> manager.releaseNetworkRequest(nullIntent));
Hugo Benichi7abd43f2017-05-09 14:09:02 +0900369 }
370
371 static void mustFail(Runnable fn) {
372 try {
373 fn.run();
374 fail();
375 } catch (Exception expected) {
376 }
377 }
378
junyulaiad010792021-01-11 16:53:38 +0800379 @Test
380 public void testRequestType() throws Exception {
381 final String testPkgName = "MyPackage";
Roshan Piusaa24fde2020-12-17 14:53:09 -0800382 final String testAttributionTag = "MyTag";
junyulaiad010792021-01-11 16:53:38 +0800383 final ConnectivityManager manager = new ConnectivityManager(mCtx, mService);
384 when(mCtx.getOpPackageName()).thenReturn(testPkgName);
Roshan Piusaa24fde2020-12-17 14:53:09 -0800385 when(mCtx.getAttributionTag()).thenReturn(testAttributionTag);
junyulaiad010792021-01-11 16:53:38 +0800386 final NetworkRequest request = makeRequest(1);
387 final NetworkCallback callback = new ConnectivityManager.NetworkCallback();
388
389 manager.requestNetwork(request, callback);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900390 verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(request.networkCapabilities),
Roshan Pius951c0032020-12-22 15:10:42 -0800391 eq(REQUEST.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
Roshan Piusaa24fde2020-12-17 14:53:09 -0800392 eq(testPkgName), eq(testAttributionTag));
junyulaiad010792021-01-11 16:53:38 +0800393 reset(mService);
394
395 // Verify that register network callback does not calls requestNetwork at all.
396 manager.registerNetworkCallback(request, callback);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900397 verify(mService, never()).requestNetwork(anyInt(), any(), anyInt(), any(), anyInt(), any(),
398 anyInt(), anyInt(), any(), any());
Roshan Pius951c0032020-12-22 15:10:42 -0800399 verify(mService).listenForNetwork(eq(request.networkCapabilities), any(), any(), anyInt(),
Roshan Piusaa24fde2020-12-17 14:53:09 -0800400 eq(testPkgName), eq(testAttributionTag));
junyulaiad010792021-01-11 16:53:38 +0800401 reset(mService);
402
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900403 Handler handler = new Handler(ConnectivityThread.getInstanceLooper());
404
junyulaiad010792021-01-11 16:53:38 +0800405 manager.registerDefaultNetworkCallback(callback);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900406 verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(null),
Roshan Pius951c0032020-12-22 15:10:42 -0800407 eq(TRACK_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
Roshan Piusaa24fde2020-12-17 14:53:09 -0800408 eq(testPkgName), eq(testAttributionTag));
junyulaiad010792021-01-11 16:53:38 +0800409 reset(mService);
Junyu Laia62493f2021-01-19 11:10:56 +0000410
Chiachang Wang6ec9b8d2021-04-20 15:41:24 +0800411 manager.registerDefaultNetworkCallbackForUid(42, callback, handler);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900412 verify(mService).requestNetwork(eq(42), eq(null),
413 eq(TRACK_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
414 eq(testPkgName), eq(testAttributionTag));
415
junyulai05738ae2021-04-15 00:39:49 +0800416 manager.requestBackgroundNetwork(request, callback, handler);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900417 verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(request.networkCapabilities),
Roshan Pius951c0032020-12-22 15:10:42 -0800418 eq(BACKGROUND_REQUEST.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
Roshan Piusaa24fde2020-12-17 14:53:09 -0800419 eq(testPkgName), eq(testAttributionTag));
Junyu Laia62493f2021-01-19 11:10:56 +0000420 reset(mService);
Lorenzo Colitti76b639e2021-01-29 20:14:04 +0900421
Lorenzo Colitti76b639e2021-01-29 20:14:04 +0900422 manager.registerSystemDefaultNetworkCallback(callback, handler);
Lorenzo Colitti2a49c5d2021-03-12 22:48:07 +0900423 verify(mService).requestNetwork(eq(Process.INVALID_UID), eq(null),
Roshan Pius951c0032020-12-22 15:10:42 -0800424 eq(TRACK_SYSTEM_DEFAULT.ordinal()), any(), anyInt(), any(), eq(TYPE_NONE), anyInt(),
Lorenzo Colitti76b639e2021-01-29 20:14:04 +0900425 eq(testPkgName), eq(testAttributionTag));
426 reset(mService);
junyulaiad010792021-01-11 16:53:38 +0800427 }
428
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900429 static Message makeMessage(NetworkRequest req, int messageType) {
430 Bundle bundle = new Bundle();
431 bundle.putParcelable(NetworkRequest.class.getSimpleName(), req);
Chalard Jeana23bc9e2018-01-30 22:41:41 +0900432 // Pass default objects as we don't care which get passed here
433 bundle.putParcelable(Network.class.getSimpleName(), new Network(1));
434 bundle.putParcelable(NetworkCapabilities.class.getSimpleName(), new NetworkCapabilities());
435 bundle.putParcelable(LinkProperties.class.getSimpleName(), new LinkProperties());
Hugo Benichi2aa65af2017-03-06 09:17:06 +0900436 Message msg = Message.obtain();
437 msg.what = messageType;
438 msg.setData(bundle);
439 return msg;
440 }
441
442 static NetworkRequest makeRequest(int requestId) {
443 NetworkRequest request = new NetworkRequest.Builder().clearCapabilities().build();
444 return new NetworkRequest(request.networkCapabilities, ConnectivityManager.TYPE_NONE,
445 requestId, NetworkRequest.Type.NONE);
446 }
447
448 static void expectThrowable(Runnable block, Class<? extends Throwable> throwableType) {
449 try {
450 block.run();
451 } catch (Throwable t) {
452 if (t.getClass().equals(throwableType)) {
453 return;
454 }
455 fail("expected exception of type " + throwableType + ", but was " + t.getClass());
456 }
457 fail("expected exception of type " + throwableType);
458 }
Erik Klinece55eb12017-01-26 18:08:28 +0900459}