1 package com.android.server.location;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 import static org.mockito.Matchers.anyBoolean;
5 import static org.mockito.Matchers.anyLong;
6 import static org.mockito.Matchers.eq;
7 import static org.mockito.Mockito.times;
8 import static org.mockito.Mockito.verify;
9 import static org.mockito.Mockito.when;
10 
11 import android.platform.test.annotations.Presubmit;
12 
13 import com.android.server.location.GnssBatchingProvider.GnssBatchingProviderNative;
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 GnssBatchingProvider}.
26  */
27 @RunWith(FrameworkRobolectricTestRunner.class)
28 @Config(
29         manifest = Config.NONE,
30         shadows = {
31         },
32         sdk = 27
33 )
34 @SystemLoaderPackages({"com.android.server.location"})
35 @Presubmit
36 public class GnssBatchingProviderTest {
37 
38     private static final long PERIOD_NANOS = (long) 1e9;
39     private static final boolean WAKE_ON_FIFO_FULL = true;
40     private static final int BATCH_SIZE = 3;
41     @Mock
42     private GnssBatchingProviderNative mMockNative;
43     private GnssBatchingProvider mTestProvider;
44 
45     @Before
setUp()46     public void setUp() {
47         MockitoAnnotations.initMocks(this);
48         when(mMockNative.initBatching()).thenReturn(true);
49         when(mMockNative.startBatch(anyLong(), anyBoolean())).thenReturn(true);
50         when(mMockNative.stopBatch()).thenReturn(true);
51         when(mMockNative.getBatchSize()).thenReturn(BATCH_SIZE);
52         mTestProvider = new GnssBatchingProvider(mMockNative);
53         mTestProvider.enable();
54         mTestProvider.start(PERIOD_NANOS, WAKE_ON_FIFO_FULL);
55     }
56 
57     @Test
start_nativeStarted()58     public void start_nativeStarted() {
59         verify(mMockNative).startBatch(eq(PERIOD_NANOS), eq(WAKE_ON_FIFO_FULL));
60     }
61 
62     @Test
stop_nativeStopped()63     public void stop_nativeStopped() {
64         mTestProvider.stop();
65         verify(mMockNative).stopBatch();
66     }
67 
68     @Test
flush_nativeFlushed()69     public void flush_nativeFlushed() {
70         mTestProvider.flush();
71         verify(mMockNative).flushBatch();
72     }
73 
74     @Test
getBatchSize_nativeGetBatchSize()75     public void getBatchSize_nativeGetBatchSize() {
76         assertThat(mTestProvider.getBatchSize()).isEqualTo(BATCH_SIZE);
77     }
78 
79     @Test
started_resume_started()80     public void started_resume_started() {
81         mTestProvider.resumeIfStarted();
82         verify(mMockNative, times(2)).startBatch(eq(PERIOD_NANOS), eq(WAKE_ON_FIFO_FULL));
83     }
84 
85     @Test
stopped_resume_notStarted()86     public void stopped_resume_notStarted() {
87         mTestProvider.stop();
88         mTestProvider.resumeIfStarted();
89         verify(mMockNative, times(1)).startBatch(eq(PERIOD_NANOS), eq(WAKE_ON_FIFO_FULL));
90     }
91 }
92