blob: f16cf35bfb34c0502f1ada939864f0a469ce2cb2 [file] [log] [blame]
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -07001/*
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -08002 * Copyright (C) 2020 The Android Open Source Project
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -07003 *
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
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -080017package com.android.server.location.gnss;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070018
19import static com.google.common.truth.Truth.assertThat;
20
21import static org.mockito.ArgumentMatchers.any;
22import static org.mockito.ArgumentMatchers.anyBoolean;
23import static org.mockito.ArgumentMatchers.anyInt;
24import static org.mockito.ArgumentMatchers.anyLong;
25import static org.mockito.ArgumentMatchers.anyString;
26import static org.mockito.ArgumentMatchers.eq;
Soonil Nagarkarb6375a42020-01-29 15:23:06 -080027import static org.mockito.ArgumentMatchers.nullable;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070028import static org.mockito.Mockito.mock;
29import static org.mockito.Mockito.times;
30import static org.mockito.Mockito.verify;
31import static org.mockito.Mockito.when;
32import static org.testng.Assert.assertThrows;
33
34import android.Manifest;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070035import android.app.AppOpsManager;
36import android.content.Context;
37import android.content.pm.PackageManager;
38import android.location.GnssClock;
39import android.location.GnssMeasurementCorrections;
40import android.location.GnssMeasurementsEvent;
41import android.location.GnssNavigationMessage;
42import android.location.GnssSingleSatCorrection;
43import android.location.IBatchedLocationCallback;
44import android.location.IGnssMeasurementsListener;
45import android.location.IGnssNavigationMessageListener;
46import android.location.IGnssStatusListener;
47import android.location.INetInitiatedListener;
48import android.location.Location;
Soonil Nagarkarb6375a42020-01-29 15:23:06 -080049import android.location.LocationManagerInternal;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070050import android.os.Handler;
51import android.os.IBinder;
52import android.os.IInterface;
53import android.os.Message;
54import android.os.RemoteException;
55
Soonil Nagarkarb6375a42020-01-29 15:23:06 -080056import com.android.server.LocalServices;
57import com.android.server.location.AppForegroundHelper;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070058import com.android.server.location.GnssBatchingProvider;
59import com.android.server.location.GnssCapabilitiesProvider;
60import com.android.server.location.GnssLocationProvider;
61import com.android.server.location.GnssMeasurementCorrectionsProvider;
62import com.android.server.location.GnssMeasurementsProvider;
63import com.android.server.location.GnssMeasurementsProvider.GnssMeasurementProviderNative;
64import com.android.server.location.GnssNavigationMessageProvider;
65import com.android.server.location.GnssNavigationMessageProvider.GnssNavigationMessageProviderNative;
66import com.android.server.location.GnssStatusListenerHelper;
Soonil Nagarkar3f128402019-12-12 08:31:27 -080067import com.android.server.location.LocationUsageLogger;
Soonil Nagarkarb6375a42020-01-29 15:23:06 -080068import com.android.server.location.SettingsHelper;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070069
Soonil Nagarkarb6375a42020-01-29 15:23:06 -080070import org.junit.After;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070071import org.junit.Before;
72import org.junit.Test;
73import org.mockito.AdditionalMatchers;
74import org.mockito.Mock;
75import org.mockito.Mockito;
76import org.mockito.MockitoAnnotations;
77import org.mockito.invocation.InvocationOnMock;
78
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -080079import java.util.ArrayList;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070080import java.util.Arrays;
81import java.util.List;
82
83/**
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -080084 * Unit tests for {@link com.android.server.location.gnss.GnssManagerService}.
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -070085 */
86public class GnssManagerServiceTest {
87
88 // Gnss Providers
89 @Mock
90 private GnssLocationProvider mMockGnssLocationProvider;
91 @Mock
92 private GnssBatchingProvider mMockGnssBatchingProvider;
93 @Mock
94 private GnssLocationProvider.GnssSystemInfoProvider mMockGnssSystemInfoProvider;
95 @Mock
96 private GnssCapabilitiesProvider mMockGnssCapabilitiesProvider;
97 @Mock
98 private GnssMeasurementCorrectionsProvider mMockGnssMeasurementCorrectionsProvider;
99 @Mock
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800100 private INetInitiatedListener mNetInitiatedListener;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700101 private GnssMeasurementsProvider mTestGnssMeasurementsProvider;
102 private GnssStatusListenerHelper mTestGnssStatusProvider;
103 private GnssNavigationMessageProvider mTestGnssNavigationMessageProvider;
104
105 // Managers and services
106 @Mock
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800107 private AppOpsManager mAppOpsManager;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700108 @Mock
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800109 private SettingsHelper mSettingsHelper;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700110 @Mock
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800111 private AppForegroundHelper mAppForegroundHelper;
112 @Mock
113 private LocationManagerInternal mLocationManagerInternal;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700114
115 // Context and handler
116 @Mock
117 private Handler mMockHandler;
118 @Mock
119 private Context mMockContext;
120
121 // Class under test
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800122 private GnssManagerService mGnssManagerService;
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700123
124 @Before
125 public void setUp() {
126 MockitoAnnotations.initMocks(this);
127 GnssLocationProvider.setIsSupportedForTest(true);
128
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700129 when(mMockContext.getSystemServiceName(AppOpsManager.class)).thenReturn(
130 Context.APP_OPS_SERVICE);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700131 when(mMockContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800132 mAppOpsManager);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700133 enableLocationPermissions();
134
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800135 when(mAppForegroundHelper.isAppForeground(anyInt())).thenReturn(true);
136
137 LocalServices.addService(LocationManagerInternal.class, mLocationManagerInternal);
138
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700139 // Mock Handler will execute posted runnables immediately
140 when(mMockHandler.sendMessageAtTime(any(Message.class), anyLong())).thenAnswer(
141 (InvocationOnMock invocation) -> {
142 Message msg = (Message) (invocation.getArguments()[0]);
143 msg.getCallback().run();
144 return null;
145 });
146
147 // Setup providers
148 mTestGnssMeasurementsProvider = createGnssMeasurementsProvider(
149 mMockContext, mMockHandler);
150 mTestGnssStatusProvider = createGnssStatusListenerHelper(
151 mMockContext, mMockHandler);
152 mTestGnssNavigationMessageProvider = createGnssNavigationMessageProvider(
153 mMockContext, mMockHandler);
154
155 // Setup GnssLocationProvider to return providers
156 when(mMockGnssLocationProvider.getGnssStatusProvider()).thenReturn(
157 mTestGnssStatusProvider);
158 when(mMockGnssLocationProvider.getGnssBatchingProvider()).thenReturn(
159 mMockGnssBatchingProvider);
160 when(mMockGnssLocationProvider.getGnssCapabilitiesProvider()).thenReturn(
161 mMockGnssCapabilitiesProvider);
162 when(mMockGnssLocationProvider.getGnssSystemInfoProvider()).thenReturn(
163 mMockGnssSystemInfoProvider);
164 when(mMockGnssLocationProvider.getGnssMeasurementCorrectionsProvider()).thenReturn(
165 mMockGnssMeasurementCorrectionsProvider);
166 when(mMockGnssLocationProvider.getGnssMeasurementsProvider()).thenReturn(
167 mTestGnssMeasurementsProvider);
168 when(mMockGnssLocationProvider.getGnssNavigationMessageProvider()).thenReturn(
169 mTestGnssNavigationMessageProvider);
170 when(mMockGnssLocationProvider.getNetInitiatedListener()).thenReturn(
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800171 mNetInitiatedListener);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700172
173 // Setup GnssBatching provider
174 when(mMockGnssBatchingProvider.start(anyLong(), anyBoolean())).thenReturn(true);
175 when(mMockGnssBatchingProvider.stop()).thenReturn(true);
176
177 // Create GnssManagerService
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800178 mGnssManagerService = new GnssManagerService(mMockContext, mSettingsHelper,
179 mAppForegroundHelper, new LocationUsageLogger(),
180 mMockGnssLocationProvider);
181 mGnssManagerService.onSystemReady();
182 }
183
184 @After
185 public void tearDown() {
186 LocalServices.removeServiceForTest(LocationManagerInternal.class);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700187 }
188
189 private void overrideAsBinder(IInterface mockListener) {
190 IBinder mockBinder = mock(IBinder.class);
191 when(mockListener.asBinder()).thenReturn(mockBinder);
192 }
193
194 private IGnssStatusListener createMockGnssStatusListener() {
195 IGnssStatusListener mockListener = mock(IGnssStatusListener.class);
196 overrideAsBinder(mockListener);
197 return mockListener;
198 }
199
200 private IGnssMeasurementsListener createMockGnssMeasurementsListener() {
201 IGnssMeasurementsListener mockListener = mock(
202 IGnssMeasurementsListener.class);
203 overrideAsBinder(mockListener);
204 return mockListener;
205 }
206
207 private IBatchedLocationCallback createMockBatchedLocationCallback() {
208 IBatchedLocationCallback mockedCallback = mock(IBatchedLocationCallback.class);
209 overrideAsBinder(mockedCallback);
210 return mockedCallback;
211 }
212
213 private IGnssNavigationMessageListener createMockGnssNavigationMessageListener() {
214 IGnssNavigationMessageListener mockListener = mock(IGnssNavigationMessageListener.class);
215 overrideAsBinder(mockListener);
216 return mockListener;
217 }
218
219 private GnssMeasurementCorrections createDummyGnssMeasurementCorrections() {
220 GnssSingleSatCorrection gnssSingleSatCorrection =
221 new GnssSingleSatCorrection.Builder().build();
222 return
223 new GnssMeasurementCorrections.Builder().setSingleSatelliteCorrectionList(
224 Arrays.asList(gnssSingleSatCorrection)).build();
225 }
226
227 private void enableLocationPermissions() {
228 Mockito.doThrow(new SecurityException()).when(
229 mMockContext).enforceCallingPermission(
230 AdditionalMatchers.and(
231 AdditionalMatchers.not(eq(Manifest.permission.LOCATION_HARDWARE)),
232 AdditionalMatchers.not(eq(Manifest.permission.ACCESS_FINE_LOCATION))),
233 anyString());
234 when(mMockContext.checkPermission(
235 eq(android.Manifest.permission.LOCATION_HARDWARE), anyInt(), anyInt())).thenReturn(
236 PackageManager.PERMISSION_GRANTED);
237
238 // AppOpsManager will return true if OP_FINE_LOCATION is checked
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800239 when(mAppOpsManager.checkOp(anyInt(), anyInt(), anyString())).thenAnswer(
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700240 (InvocationOnMock invocation) -> {
241 int code = (int) (invocation.getArguments()[0]);
242 if (code == AppOpsManager.OP_FINE_LOCATION) {
243 return AppOpsManager.MODE_ALLOWED;
244 }
245 return AppOpsManager.MODE_ERRORED;
246 });
247 }
248
249 private void disableLocationPermissions() {
250 Mockito.doThrow(new SecurityException()).when(
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800251 mMockContext).enforceCallingPermission(anyString(), nullable(String.class));
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700252 Mockito.doThrow(new SecurityException()).when(
253 mMockContext).checkPermission(anyString(), anyInt(), anyInt());
254
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800255 when(mAppOpsManager.checkOp(anyInt(), anyInt(),
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700256 anyString())).thenReturn(AppOpsManager.MODE_ERRORED);
257 }
258
259 private GnssStatusListenerHelper createGnssStatusListenerHelper(Context context,
260 Handler handler) {
261 return new GnssStatusListenerHelper(
262 context, handler) {
263 @Override
264 protected boolean isAvailableInPlatform() {
265 return true;
266 }
267
268 @Override
269 protected boolean isGpsEnabled() {
270 return true;
271 }
272 };
273 }
274
275 private GnssMeasurementsProvider createGnssMeasurementsProvider(Context context,
276 Handler handler) {
277 GnssMeasurementProviderNative
278 mockGnssMeasurementProviderNative = mock(GnssMeasurementProviderNative.class);
279 return new GnssMeasurementsProvider(
280 context, handler, mockGnssMeasurementProviderNative) {
281 @Override
282 protected boolean isGpsEnabled() {
283 return true;
284 }
285 };
286 }
287
288 private GnssNavigationMessageProvider createGnssNavigationMessageProvider(Context context,
289 Handler handler) {
290 GnssNavigationMessageProviderNative mockGnssNavigationMessageProviderNative = mock(
291 GnssNavigationMessageProviderNative.class);
292 return new GnssNavigationMessageProvider(context, handler,
293 mockGnssNavigationMessageProviderNative) {
294 @Override
295 protected boolean isGpsEnabled() {
296 return true;
297 }
298 };
299 }
300
301 @Test
302 public void getGnssYearOfHardwareTest() {
303 final int gnssYearOfHardware = 2012;
304 when(mMockGnssSystemInfoProvider.getGnssYearOfHardware()).thenReturn(gnssYearOfHardware);
305 enableLocationPermissions();
306
307 assertThat(mGnssManagerService.getGnssYearOfHardware()).isEqualTo(gnssYearOfHardware);
308 }
309
310 @Test
311 public void getGnssHardwareModelNameTest() {
312 final String gnssHardwareModelName = "hardwarename";
313 when(mMockGnssSystemInfoProvider.getGnssHardwareModelName()).thenReturn(
314 gnssHardwareModelName);
315 enableLocationPermissions();
316
317 assertThat(mGnssManagerService.getGnssHardwareModelName()).isEqualTo(
318 gnssHardwareModelName);
319 }
320
321 @Test
322 public void getGnssCapabilitiesWithoutPermissionsTest() {
323 disableLocationPermissions();
324
325 assertThrows(SecurityException.class,
326 () -> mGnssManagerService.getGnssCapabilities("com.android.server"));
327 }
328
329 @Test
330 public void getGnssCapabilitiesWithPermissionsTest() {
331 final long mGnssCapabilities = 23132L;
332 when(mMockGnssCapabilitiesProvider.getGnssCapabilities()).thenReturn(mGnssCapabilities);
333 enableLocationPermissions();
334
335 assertThat(mGnssManagerService.getGnssCapabilities("com.android.server")).isEqualTo(
336 mGnssCapabilities);
337 }
338
339 @Test
340 public void getGnssBatchSizeWithoutPermissionsTest() {
341 disableLocationPermissions();
342
343 assertThrows(SecurityException.class,
344 () -> mGnssManagerService.getGnssBatchSize("com.android.server"));
345 }
346
347 @Test
348 public void getGnssBatchSizeWithPermissionsTest() {
349 final int gnssBatchSize = 10;
350 when(mMockGnssBatchingProvider.getBatchSize()).thenReturn(gnssBatchSize);
351 enableLocationPermissions();
352
353 assertThat(mGnssManagerService.getGnssBatchSize("com.android.server")).isEqualTo(
354 gnssBatchSize);
355 }
356
357 @Test
358 public void startGnssBatchWithoutPermissionsTest() {
359 final long periodNanos = 100L;
360 final boolean wakeOnFifoFull = true;
361
362 disableLocationPermissions();
363
364 assertThrows(SecurityException.class,
365 () -> mGnssManagerService.startGnssBatch(periodNanos, wakeOnFifoFull,
366 "com.android.server"));
367 verify(mMockGnssBatchingProvider, times(0)).start(periodNanos, wakeOnFifoFull);
368 }
369
370 @Test
371 public void startGnssBatchWithPermissionsTest() {
372 final long periodNanos = 100L;
373 final boolean wakeOnFifoFull = true;
374
375 enableLocationPermissions();
376
377 assertThat(mGnssManagerService.startGnssBatch(periodNanos, wakeOnFifoFull,
378 "com.android.server"))
379 .isEqualTo(
380 true);
381 verify(mMockGnssBatchingProvider, times(1)).start(100L, true);
382 }
383
384 @Test
385 public void addGnssBatchCallbackWithoutPermissionsTest() throws RemoteException {
386 IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -0800387 List<Location> mockLocationList = new ArrayList<>();
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700388
389 disableLocationPermissions();
390
391 assertThrows(SecurityException.class, () -> mGnssManagerService.addGnssBatchingCallback(
392 mockBatchedLocationCallback, "com.android.server", "abcd123",
393 "TestBatchedLocationCallback"));
394
395 mGnssManagerService.onReportLocation(mockLocationList);
396
397 verify(mockBatchedLocationCallback, times(0)).onLocationBatch(mockLocationList);
398 }
399
400 @Test
401 public void addGnssBatchCallbackWithPermissionsTest() throws RemoteException {
402 IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -0800403 List<Location> mockLocationList = new ArrayList<>();
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700404
405 enableLocationPermissions();
406
407 assertThat(mGnssManagerService.addGnssBatchingCallback(
408 mockBatchedLocationCallback, "com.android.server",
409 "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
410
411 mGnssManagerService.onReportLocation(mockLocationList);
412
413 verify(mockBatchedLocationCallback, times(1)).onLocationBatch(mockLocationList);
414 }
415
416 @Test
417 public void replaceGnssBatchCallbackTest() throws RemoteException {
418 IBatchedLocationCallback mockBatchedLocationCallback1 = createMockBatchedLocationCallback();
419 IBatchedLocationCallback mockBatchedLocationCallback2 = createMockBatchedLocationCallback();
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -0800420 List<Location> mockLocationList = new ArrayList<>();
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700421
422 enableLocationPermissions();
423
424 assertThat(mGnssManagerService.addGnssBatchingCallback(
425 mockBatchedLocationCallback1, "com.android.server",
426 "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
427 assertThat(mGnssManagerService.addGnssBatchingCallback(
428 mockBatchedLocationCallback2, "com.android.server",
429 "abcd123", "TestBatchedLocationCallback")).isEqualTo(true);
430
431 mGnssManagerService.onReportLocation(mockLocationList);
432
433 verify(mockBatchedLocationCallback1, times(0)).onLocationBatch(mockLocationList);
434 verify(mockBatchedLocationCallback2, times(1)).onLocationBatch(mockLocationList);
435 }
436
437 @Test
438 public void flushGnssBatchWithoutPermissionsTest() {
439 disableLocationPermissions();
440
441 assertThrows(SecurityException.class,
442 () -> mGnssManagerService.flushGnssBatch("com.android.server"));
443 verify(mMockGnssBatchingProvider, times(0)).flush();
444 }
445
446 @Test
447 public void flushGnssBatchWithPermissionsTest() {
448 enableLocationPermissions();
449 mGnssManagerService.flushGnssBatch("com.android.server");
450
451 verify(mMockGnssBatchingProvider, times(1)).flush();
452 }
453
454 @Test
455 public void removeGnssBatchingCallbackWithoutPermissionsTest() throws RemoteException {
456 IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -0800457 List<Location> mockLocationList = new ArrayList<>();
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700458
459 enableLocationPermissions();
460
461 mGnssManagerService.addGnssBatchingCallback(mockBatchedLocationCallback,
462 "com.android.server", "abcd123", "TestBatchedLocationCallback");
463
464 disableLocationPermissions();
465
466 assertThrows(SecurityException.class,
467 () -> mGnssManagerService.removeGnssBatchingCallback());
468
469 mGnssManagerService.onReportLocation(mockLocationList);
470
471 verify(mockBatchedLocationCallback, times(1)).onLocationBatch(mockLocationList);
472 }
473
474 @Test
475 public void removeGnssBatchingCallbackWithPermissionsTest() throws RemoteException {
476 IBatchedLocationCallback mockBatchedLocationCallback = createMockBatchedLocationCallback();
Soonil Nagarkarf20d10e2020-01-27 11:05:40 -0800477 List<Location> mockLocationList = new ArrayList<>();
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700478
479 enableLocationPermissions();
480
481 mGnssManagerService.addGnssBatchingCallback(mockBatchedLocationCallback,
482 "com.android.server", "abcd123", "TestBatchedLocationCallback");
483
484 mGnssManagerService.removeGnssBatchingCallback();
485
486 mGnssManagerService.onReportLocation(mockLocationList);
487
488 verify(mockBatchedLocationCallback, times(0)).onLocationBatch(mockLocationList);
489 }
490
491 @Test
492 public void stopGnssBatchWithoutPermissionsTest() {
493 disableLocationPermissions();
494
495 assertThrows(SecurityException.class, () -> mGnssManagerService.stopGnssBatch());
496 verify(mMockGnssBatchingProvider, times(0)).stop();
497 }
498
499 @Test
500 public void stopGnssBatchWithPermissionsTest() {
501 enableLocationPermissions();
502
503 assertThat(mGnssManagerService.stopGnssBatch()).isEqualTo(true);
504 verify(mMockGnssBatchingProvider, times(1)).stop();
505 }
506
507 @Test
508 public void registerGnssStatusCallbackWithoutPermissionsTest() throws RemoteException {
509 final int timeToFirstFix = 20000;
510 IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
511
512 disableLocationPermissions();
513
514 assertThrows(SecurityException.class, () -> mGnssManagerService
515 .registerGnssStatusCallback(
516 mockGnssStatusListener, "com.android.server", "abcd123"));
517
518 mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
519
520 verify(mockGnssStatusListener, times(0)).onFirstFix(timeToFirstFix);
521 }
522
523 @Test
524 public void registerGnssStatusCallbackWithPermissionsTest() throws RemoteException {
525 final int timeToFirstFix = 20000;
526 IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
527
528 enableLocationPermissions();
529
530 assertThat(mGnssManagerService.registerGnssStatusCallback(
531 mockGnssStatusListener, "com.android.server", "abcd123")).isEqualTo(true);
532
533 mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
534
535 verify(mockGnssStatusListener, times(1)).onFirstFix(timeToFirstFix);
536 }
537
538 @Test
539 public void unregisterGnssStatusCallbackWithPermissionsTest() throws RemoteException {
540 final int timeToFirstFix = 20000;
541 IGnssStatusListener mockGnssStatusListener = createMockGnssStatusListener();
542
543 enableLocationPermissions();
544
545 mGnssManagerService.registerGnssStatusCallback(
546 mockGnssStatusListener, "com.android.server", "abcd123");
547
548 mGnssManagerService.unregisterGnssStatusCallback(mockGnssStatusListener);
549
550 mTestGnssStatusProvider.onFirstFix(timeToFirstFix);
551
552 verify(mockGnssStatusListener, times(0)).onFirstFix(timeToFirstFix);
553 }
554
555 @Test
556 public void addGnssMeasurementsListenerWithoutPermissionsTest() throws RemoteException {
557 IGnssMeasurementsListener mockGnssMeasurementsListener =
558 createMockGnssMeasurementsListener();
559 GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
560 null);
561
562 disableLocationPermissions();
563
564 assertThrows(SecurityException.class,
565 () -> mGnssManagerService.addGnssMeasurementsListener(
566 mockGnssMeasurementsListener,
567 "com.android.server", "abcd123", "TestGnssMeasurementsListener"));
568
569 mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
570 verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
571 gnssMeasurementsEvent);
572 }
573
574 @Test
575 public void addGnssMeasurementsListenerWithPermissionsTest() throws RemoteException {
576 IGnssMeasurementsListener mockGnssMeasurementsListener =
577 createMockGnssMeasurementsListener();
578 GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
579 null);
580
581 enableLocationPermissions();
582
583 assertThat(mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
584 "com.android.server", "abcd123", "TestGnssMeasurementsListener")).isEqualTo(true);
585
586 mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
587 verify(mockGnssMeasurementsListener, times(1)).onGnssMeasurementsReceived(
588 gnssMeasurementsEvent);
589 }
590
591 @Test
592 public void injectGnssMeasurementCorrectionsWithoutPermissionsTest() {
593 GnssMeasurementCorrections gnssMeasurementCorrections =
594 createDummyGnssMeasurementCorrections();
595
596 disableLocationPermissions();
597
598 assertThrows(SecurityException.class,
599 () -> mGnssManagerService.injectGnssMeasurementCorrections(
600 gnssMeasurementCorrections, "com.android.server"));
601 verify(mMockGnssMeasurementCorrectionsProvider, times(0))
602 .injectGnssMeasurementCorrections(
603 gnssMeasurementCorrections);
604 }
605
606 @Test
607 public void injectGnssMeasurementCorrectionsWithPermissionsTest() {
608 GnssMeasurementCorrections gnssMeasurementCorrections =
609 createDummyGnssMeasurementCorrections();
610
611 enableLocationPermissions();
612
613 mGnssManagerService.injectGnssMeasurementCorrections(
614 gnssMeasurementCorrections, "com.android.server");
615 verify(mMockGnssMeasurementCorrectionsProvider, times(1))
616 .injectGnssMeasurementCorrections(
617 gnssMeasurementCorrections);
618 }
619
620 @Test
621 public void removeGnssMeasurementsListenerWithoutPermissionsTest() throws RemoteException {
622 IGnssMeasurementsListener mockGnssMeasurementsListener =
623 createMockGnssMeasurementsListener();
624 GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
625 null);
626
627 enableLocationPermissions();
628
629 mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
630 "com.android.server", "abcd123", "TestGnssMeasurementsListener");
631
632 disableLocationPermissions();
633
634 mGnssManagerService.removeGnssMeasurementsListener(
635 mockGnssMeasurementsListener);
636
637 mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
638 verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
639 gnssMeasurementsEvent);
640 }
641
642 @Test
643 public void removeGnssMeasurementsListenerWithPermissionsTest() throws RemoteException {
644 IGnssMeasurementsListener mockGnssMeasurementsListener =
645 createMockGnssMeasurementsListener();
646 GnssMeasurementsEvent gnssMeasurementsEvent = new GnssMeasurementsEvent(new GnssClock(),
647 null);
648
649 enableLocationPermissions();
650
651 mGnssManagerService.addGnssMeasurementsListener(mockGnssMeasurementsListener,
652 "com.android.server", "abcd123", "TestGnssMeasurementsListener");
653
654 disableLocationPermissions();
655
656 mGnssManagerService.removeGnssMeasurementsListener(
657 mockGnssMeasurementsListener);
658
659 mTestGnssMeasurementsProvider.onMeasurementsAvailable(gnssMeasurementsEvent);
660 verify(mockGnssMeasurementsListener, times(0)).onGnssMeasurementsReceived(
661 gnssMeasurementsEvent);
662 }
663
664 @Test
665 public void addGnssNavigationMessageListenerWithoutPermissionsTest() throws RemoteException {
666 IGnssNavigationMessageListener mockGnssNavigationMessageListener =
667 createMockGnssNavigationMessageListener();
668 GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
669
670 disableLocationPermissions();
671
672 assertThrows(SecurityException.class,
673 () -> mGnssManagerService.addGnssNavigationMessageListener(
674 mockGnssNavigationMessageListener, "com.android.server",
675 "abcd123", "TestGnssNavigationMessageListener"));
676
677 mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
678
679 verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
680 gnssNavigationMessage);
681 }
682
683 @Test
684 public void addGnssNavigationMessageListenerWithPermissionsTest() throws RemoteException {
685 IGnssNavigationMessageListener mockGnssNavigationMessageListener =
686 createMockGnssNavigationMessageListener();
687 GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
688
689 enableLocationPermissions();
690
691 assertThat(mGnssManagerService.addGnssNavigationMessageListener(
692 mockGnssNavigationMessageListener, "com.android.server",
693 "abcd123", "TestGnssNavigationMessageListener")).isEqualTo(true);
694
695 mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
696
697 verify(mockGnssNavigationMessageListener, times(1)).onGnssNavigationMessageReceived(
698 gnssNavigationMessage);
699 }
700
701 @Test
702 public void removeGnssNavigationMessageListenerWithoutPermissionsTest() throws RemoteException {
703 IGnssNavigationMessageListener mockGnssNavigationMessageListener =
704 createMockGnssNavigationMessageListener();
705 GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
706
707 enableLocationPermissions();
708
709 mGnssManagerService.addGnssNavigationMessageListener(
710 mockGnssNavigationMessageListener, "com.android.server",
711 "abcd123", "TestGnssNavigationMessageListener");
712
713 disableLocationPermissions();
714
715 mGnssManagerService.removeGnssNavigationMessageListener(
716 mockGnssNavigationMessageListener);
717
718 mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
719
720 verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
721 gnssNavigationMessage);
722 }
723
724 @Test
725 public void removeGnssNavigationMessageListenerWithPermissionsTest() throws RemoteException {
726 IGnssNavigationMessageListener mockGnssNavigationMessageListener =
727 createMockGnssNavigationMessageListener();
728 GnssNavigationMessage gnssNavigationMessage = new GnssNavigationMessage();
729
730 enableLocationPermissions();
731
732 mGnssManagerService.addGnssNavigationMessageListener(
733 mockGnssNavigationMessageListener, "com.android.server",
734 "abcd123", "TestGnssNavigationMessageListener");
735
736 mGnssManagerService.removeGnssNavigationMessageListener(
737 mockGnssNavigationMessageListener);
738
739 mTestGnssNavigationMessageProvider.onNavigationMessageAvailable(gnssNavigationMessage);
740
741 verify(mockGnssNavigationMessageListener, times(0)).onGnssNavigationMessageReceived(
742 gnssNavigationMessage);
743 }
744
745 @Test
746 public void sendNiResponseWithPermissionsTest() throws RemoteException {
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700747 int notifId = 0;
748 int userResponse = 0;
749 enableLocationPermissions();
750
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800751 mGnssManagerService.sendNiResponse(notifId, userResponse);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700752
Soonil Nagarkarb6375a42020-01-29 15:23:06 -0800753 verify(mNetInitiatedListener, times(1)).sendNiResponse(notifId, userResponse);
Sasha Kuznetsovb9f26b42019-10-03 17:30:46 -0700754 }
755}