1 package com.android.server.location; 2 3 import static org.mockito.Matchers.anyDouble; 4 import static org.mockito.Matchers.anyInt; 5 import static org.mockito.Matchers.eq; 6 import static org.mockito.Mockito.times; 7 import static org.mockito.Mockito.verify; 8 import static org.mockito.Mockito.when; 9 10 import android.os.Looper; 11 import android.os.RemoteException; 12 import android.platform.test.annotations.Presubmit; 13 14 import com.android.server.testing.FrameworkRobolectricTestRunner; 15 import com.android.server.testing.SystemLoaderPackages; 16 17 import org.junit.Before; 18 import org.junit.Test; 19 import org.junit.runner.RunWith; 20 import org.mockito.Mock; 21 import org.mockito.MockitoAnnotations; 22 import org.robolectric.annotation.Config; 23 24 /** 25 * Unit tests for {@link GnssGeofenceProvider}. 26 */ 27 @RunWith(FrameworkRobolectricTestRunner.class) 28 @Config( 29 manifest = Config.NONE, 30 sdk = 27 31 ) 32 @SystemLoaderPackages({"com.android.server.location"}) 33 @Presubmit 34 public class GnssGeofenceProviderTest { 35 private static final int GEOFENCE_ID = 12345; 36 private static final double LATITUDE = 10.0; 37 private static final double LONGITUDE = 20.0; 38 private static final double RADIUS = 5.0; 39 private static final int LAST_TRANSITION = 0; 40 private static final int MONITOR_TRANSITIONS = 0; 41 private static final int NOTIFICATION_RESPONSIVENESS = 0; 42 private static final int UNKNOWN_TIMER = 0; 43 @Mock 44 private GnssGeofenceProvider.GnssGeofenceProviderNative mMockNative; 45 private GnssGeofenceProvider mTestProvider; 46 47 @Before setUp()48 public void setUp() { 49 MockitoAnnotations.initMocks(this); 50 when(mMockNative.addGeofence(anyInt(), anyDouble(), anyDouble(), anyDouble(), anyInt(), 51 anyInt(), anyInt(), anyInt())).thenReturn(true); 52 when(mMockNative.pauseGeofence(anyInt())).thenReturn(true); 53 when(mMockNative.removeGeofence(anyInt())).thenReturn(true); 54 when(mMockNative.resumeGeofence(anyInt(), anyInt())).thenReturn(true); 55 mTestProvider = new GnssGeofenceProvider(Looper.myLooper(), mMockNative); 56 mTestProvider.addCircularHardwareGeofence(GEOFENCE_ID, LATITUDE, 57 LONGITUDE, RADIUS, LAST_TRANSITION, MONITOR_TRANSITIONS, 58 NOTIFICATION_RESPONSIVENESS, 59 UNKNOWN_TIMER); 60 } 61 62 @Test addGeofence_nativeAdded()63 public void addGeofence_nativeAdded() { 64 verify(mMockNative).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE), 65 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS), 66 eq(NOTIFICATION_RESPONSIVENESS), 67 eq(UNKNOWN_TIMER)); 68 } 69 70 @Test pauseGeofence_nativePaused()71 public void pauseGeofence_nativePaused() { 72 mTestProvider.pauseHardwareGeofence(GEOFENCE_ID); 73 verify(mMockNative).pauseGeofence(eq(GEOFENCE_ID)); 74 } 75 76 @Test removeGeofence_nativeRemoved()77 public void removeGeofence_nativeRemoved() { 78 mTestProvider.removeHardwareGeofence(GEOFENCE_ID); 79 verify(mMockNative).removeGeofence(eq(GEOFENCE_ID)); 80 } 81 82 @Test resumeGeofence_nativeResumed()83 public void resumeGeofence_nativeResumed() { 84 mTestProvider.pauseHardwareGeofence(GEOFENCE_ID); 85 mTestProvider.resumeHardwareGeofence(GEOFENCE_ID, MONITOR_TRANSITIONS); 86 verify(mMockNative).resumeGeofence(eq(GEOFENCE_ID), eq(MONITOR_TRANSITIONS)); 87 } 88 89 @Test addGeofence_restart_added()90 public void addGeofence_restart_added() throws RemoteException { 91 mTestProvider.resumeIfStarted(); 92 93 verify(mMockNative, times(2)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE), 94 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS), 95 eq(NOTIFICATION_RESPONSIVENESS), 96 eq(UNKNOWN_TIMER)); 97 } 98 99 @Test removeGeofence_restart_notAdded()100 public void removeGeofence_restart_notAdded() throws RemoteException { 101 mTestProvider.removeHardwareGeofence(GEOFENCE_ID); 102 mTestProvider.resumeIfStarted(); 103 104 verify(mMockNative, times(1)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE), 105 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS), 106 eq(NOTIFICATION_RESPONSIVENESS), 107 eq(UNKNOWN_TIMER)); 108 } 109 110 @Test pauseGeofence_restart_paused()111 public void pauseGeofence_restart_paused() throws RemoteException { 112 mTestProvider.pauseHardwareGeofence(GEOFENCE_ID); 113 mTestProvider.resumeIfStarted(); 114 115 verify(mMockNative, times(2)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE), 116 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS), 117 eq(NOTIFICATION_RESPONSIVENESS), 118 eq(UNKNOWN_TIMER)); 119 verify(mMockNative, times(2)).pauseGeofence(eq(GEOFENCE_ID)); 120 } 121 } 122