• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 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 
17 package com.android.internal.telephony.satellite;
18 
19 import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
20 
21 import static com.android.internal.telephony.satellite.SatelliteConstants.CONFIG_DATA_SOURCE_CONFIG_UPDATER;
22 import static com.android.internal.telephony.satellite.SatelliteConstants.CONFIG_DATA_SOURCE_ENTITLEMENT;
23 
24 import static org.junit.Assert.assertEquals;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.anyBoolean;
27 import static org.mockito.Mockito.clearInvocations;
28 import static org.mockito.Mockito.doReturn;
29 import static org.mockito.Mockito.times;
30 import static org.mockito.Mockito.verify;
31 
32 import android.testing.AndroidTestingRunner;
33 import android.testing.TestableLooper;
34 
35 import com.android.internal.telephony.TelephonyTest;
36 import com.android.internal.telephony.metrics.SatelliteStats;
37 import com.android.internal.telephony.satellite.metrics.CarrierRoamingSatelliteControllerStats;
38 import com.android.internal.telephony.subscription.SubscriptionManagerService;
39 import com.android.telephony.Rlog;
40 
41 import org.junit.After;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.mockito.ArgumentMatchers;
46 import org.mockito.Mock;
47 import org.mockito.MockitoAnnotations;
48 
49 @RunWith(AndroidTestingRunner.class)
50 @TestableLooper.RunWithLooper
51 public class CarrierRoamingSatelliteControllerStatsTest extends TelephonyTest {
52     private static final String TAG = "CarrierRoamingSatelliteControllerStatsTest";
53     private static final int TEST_SUB_ID_0 = 0;
54     private static final int TEST_SUB_ID_1 = 1;
55     private static final int TEST_CARRIER_ID_0 = 1000;
56     private static final int TEST_CARRIER_ID_1 = 1111;
57     private static final long SESSION_TIME = 100L;
58     private static final long SESSION_GAP_1 = 1000000L;
59     private static final long SESSION_GAP_2 = 2000000L;
60     private static final long SESSION_GAP_3 = 4000000L;
61 
62     private TestCarrierRoamingSatelliteControllerStats mTestCarrierRoamingSatelliteControllerStats;
63     @Mock
64     private SatelliteStats mMockSatelliteStats;
65     @Mock
66     private SubscriptionManagerService mMockSubscriptionManagerService;
67     @Mock
68     private SatelliteController mMockSatellitecontroller;
69 
70     @Before
setUp()71     public void setUp() throws Exception {
72         super.setUp(getClass().getSimpleName());
73         MockitoAnnotations.initMocks(this);
74         logd(TAG + " Setup!");
75         BackupAndRestoreCarrierRoamContParam.backUpStaticParams();
76         replaceInstance(SatelliteStats.class, "sInstance", null, mMockSatelliteStats);
77         mTestCarrierRoamingSatelliteControllerStats =
78                 new TestCarrierRoamingSatelliteControllerStats();
79         replaceInstance(SubscriptionManagerService.class, "sInstance", null,
80                 mMockSubscriptionManagerService);
81         replaceInstance(SatelliteController.class, "sInstance", null, mMockSatellitecontroller);
82     }
83 
84     @After
tearDown()85     public void tearDown() throws Exception {
86         Rlog.d(TAG, "tearDown()");
87         BackupAndRestoreCarrierRoamContParam.restoreStaticParams();
88         super.tearDown();
89     }
90 
91     @Test
testReportConfigDataSource()92     public void testReportConfigDataSource() {
93         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
94                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
95         doReturn(new int[]{TEST_SUB_ID_0}).when(
96                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
97         doReturn(false).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
98 
99         initializeStaticParams();
100         expected.initializeParams();
101         expected.setConfigDataSource(CONFIG_DATA_SOURCE_ENTITLEMENT);
102         expected.setCarrierId(TEST_CARRIER_ID_0);
103         expected.setIsMultiSim(false);
104         expected.setIsNbIotNtn(false);
105         clearInvocations(mMockSatelliteStats);
106         mTestCarrierRoamingSatelliteControllerStats.reportConfigDataSource(TEST_SUB_ID_0,
107                 CONFIG_DATA_SOURCE_ENTITLEMENT);
108         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
109                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
110 
111         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
112                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
113         doReturn(true).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
114 
115         initializeStaticParams();
116         expected.initializeParams();
117         expected.setConfigDataSource(CONFIG_DATA_SOURCE_CONFIG_UPDATER);
118         expected.setCarrierId(TEST_CARRIER_ID_1);
119         expected.setIsMultiSim(true);
120         expected.setIsNbIotNtn(true);
121         clearInvocations(mMockSatelliteStats);
122         mTestCarrierRoamingSatelliteControllerStats.reportConfigDataSource(TEST_SUB_ID_1,
123                 CONFIG_DATA_SOURCE_CONFIG_UPDATER);
124         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
125                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
126     }
127 
128     @Test
testReportCountOfEntitlementStatusQueryRequest()129     public void testReportCountOfEntitlementStatusQueryRequest() {
130         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
131                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
132         doReturn(new int[]{TEST_SUB_ID_0}).when(
133                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
134         doReturn(false).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
135 
136         initializeStaticParams();
137         expected.initializeParams();
138         expected.setCountOfEntitlementStatusQueryRequest(1);
139         expected.setCarrierId(TEST_CARRIER_ID_0);
140         expected.setIsMultiSim(false);
141         expected.setIsNbIotNtn(false);
142         clearInvocations(mMockSatelliteStats);
143         mTestCarrierRoamingSatelliteControllerStats.reportCountOfEntitlementStatusQueryRequest(
144                 TEST_SUB_ID_0);
145         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
146                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
147 
148         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
149                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
150         doReturn(true).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
151 
152         initializeStaticParams();
153         expected.initializeParams();
154         expected.setCountOfEntitlementStatusQueryRequest(1);
155         expected.setCarrierId(TEST_CARRIER_ID_1);
156         expected.setIsMultiSim(true);
157         expected.setIsNbIotNtn(true);
158         clearInvocations(mMockSatelliteStats);
159         mTestCarrierRoamingSatelliteControllerStats.reportCountOfEntitlementStatusQueryRequest(
160                 TEST_SUB_ID_1);
161         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
162                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
163     }
164 
165     @Test
testReportCountOfSatelliteConfigUpdateRequest()166     public void testReportCountOfSatelliteConfigUpdateRequest() {
167         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
168                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
169         doReturn(new int[]{TEST_SUB_ID_0}).when(
170                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
171 
172         initializeStaticParams();
173         expected.initializeParams();
174         expected.setCountOfSatelliteConfigUpdateRequest(1);
175         expected.setCarrierId(UNKNOWN_CARRIER_ID);
176         expected.setIsMultiSim(false);
177 
178         clearInvocations(mMockSatelliteStats);
179         mTestCarrierRoamingSatelliteControllerStats.reportCountOfSatelliteConfigUpdateRequest();
180         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
181                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
182 
183         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
184                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
185 
186         initializeStaticParams();
187         expected.initializeParams();
188         expected.setCountOfSatelliteConfigUpdateRequest(1);
189         expected.setCarrierId(UNKNOWN_CARRIER_ID);
190         expected.setIsMultiSim(true);
191 
192         clearInvocations(mMockSatelliteStats);
193         mTestCarrierRoamingSatelliteControllerStats.reportCountOfSatelliteConfigUpdateRequest();
194         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
195                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
196     }
197 
198     @Test
testReportCountOfSatelliteNotificationDisplayed()199     public void testReportCountOfSatelliteNotificationDisplayed() {
200         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
201                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
202         doReturn(new int[]{TEST_SUB_ID_0}).when(
203                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
204         doReturn(false).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
205 
206         initializeStaticParams();
207         expected.initializeParams();
208         expected.setCountOfSatelliteNotificationDisplayed(1);
209         expected.setCarrierId(TEST_CARRIER_ID_0);
210         expected.setIsMultiSim(false);
211         expected.setIsNbIotNtn(false);
212 
213         clearInvocations(mMockSatelliteStats);
214         mTestCarrierRoamingSatelliteControllerStats.reportCountOfSatelliteNotificationDisplayed(
215                 TEST_SUB_ID_0);
216         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
217                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
218 
219         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
220                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
221         doReturn(true).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
222 
223         initializeStaticParams();
224         expected.initializeParams();
225         expected.setCountOfSatelliteNotificationDisplayed(1);
226         expected.setCarrierId(TEST_CARRIER_ID_1);
227         expected.setIsMultiSim(true);
228         expected.setIsNbIotNtn(true);
229         clearInvocations(mMockSatelliteStats);
230         mTestCarrierRoamingSatelliteControllerStats.reportCountOfSatelliteNotificationDisplayed(
231                 TEST_SUB_ID_1);
232         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
233                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
234     }
235 
236     @Test
testReportCarrierId()237     public void testReportCarrierId() {
238         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
239                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
240         doReturn(new int[]{TEST_SUB_ID_0}).when(
241                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
242 
243         initializeStaticParams();
244         expected.initializeParams();
245         expected.setCarrierId(TEST_CARRIER_ID_0);
246         expected.setIsMultiSim(false);
247 
248         clearInvocations(mMockSatelliteStats);
249         mTestCarrierRoamingSatelliteControllerStats.reportCarrierId(TEST_CARRIER_ID_0);
250         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
251                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
252 
253         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
254                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
255 
256         initializeStaticParams();
257         expected.initializeParams();
258         expected.setCarrierId(TEST_CARRIER_ID_1);
259         expected.setIsMultiSim(true);
260         clearInvocations(mMockSatelliteStats);
261         mTestCarrierRoamingSatelliteControllerStats.reportCarrierId(TEST_CARRIER_ID_1);
262         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
263                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
264     }
265 
266     @Test
testReportIsDeviceEntitled()267     public void testReportIsDeviceEntitled() {
268         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
269                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
270         doReturn(new int[]{TEST_SUB_ID_0}).when(
271                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
272         doReturn(false).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
273 
274         initializeStaticParams();
275         expected.initializeParams();
276         expected.setIsDeviceEntitled(true);
277         expected.setCarrierId(TEST_CARRIER_ID_0);
278         expected.setIsMultiSim(false);
279         expected.setIsNbIotNtn(false);
280 
281         clearInvocations(mMockSatelliteStats);
282         mTestCarrierRoamingSatelliteControllerStats.reportIsDeviceEntitled(TEST_SUB_ID_0, true);
283         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
284                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
285 
286         doReturn(new int[]{TEST_SUB_ID_0, TEST_SUB_ID_1}).when(
287                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
288         doReturn(true).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
289 
290         initializeStaticParams();
291         expected.initializeParams();
292         expected.setIsDeviceEntitled(false);
293         expected.setCarrierId(TEST_CARRIER_ID_1);
294         expected.setIsMultiSim(true);
295         expected.setIsNbIotNtn(true);
296         clearInvocations(mMockSatelliteStats);
297         mTestCarrierRoamingSatelliteControllerStats.reportIsDeviceEntitled(TEST_SUB_ID_1, false);
298         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
299                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
300     }
301 
302     @Test
testSatelliteSessionGaps()303     public void testSatelliteSessionGaps() {
304         final ExpectedCarrierRoamingSatelliteControllerStatsParam expected =
305                 new ExpectedCarrierRoamingSatelliteControllerStatsParam();
306         doReturn(new int[]{TEST_SUB_ID_0}).when(
307                 mMockSubscriptionManagerService).getActiveSubIdList(anyBoolean());
308         doReturn(false).when(mMockSatellitecontroller).isInCarrierRoamingNbIotNtn(any());
309 
310         initializeStaticParams();
311         expected.initializeParams();
312         expected.setCarrierId(TEST_CARRIER_ID_0);
313         expected.setIsMultiSim(false);
314         expected.setIsNbIotNtn(false);
315         clearInvocations(mMockSatelliteStats);
316         // first satellite session starts
317         mTestCarrierRoamingSatelliteControllerStats.setCurrentTime(0L);
318         // session counter is increased when session starts
319         expected.setCountOfSatelliteSessions(1);
320         mTestCarrierRoamingSatelliteControllerStats.onSessionStart(TEST_SUB_ID_0);
321         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
322                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
323 
324         clearInvocations(mMockSatelliteStats);
325         // first satellite session ends
326         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_TIME);
327         mTestCarrierRoamingSatelliteControllerStats.onSessionEnd(TEST_SUB_ID_0);
328 
329         // session gaps would be 0
330         expected.setSatelliteSessionGapMinSec(0);
331         expected.setSatelliteSessionGapAvgSec(0);
332         expected.setSatelliteSessionGapMaxSec(0);
333         // session counter is not reported when session ends
334         expected.setCountOfSatelliteSessions(0);
335         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
336                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
337 
338         clearInvocations(mMockSatelliteStats);
339         // second session starts, gap between 1st and 2nd session is 1000sec
340         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_GAP_1);
341         expected.setCountOfSatelliteSessions(1);
342         mTestCarrierRoamingSatelliteControllerStats.onSessionStart(TEST_SUB_ID_0);
343         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
344                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
345 
346         clearInvocations(mMockSatelliteStats);
347         // second session end
348         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_TIME);
349         mTestCarrierRoamingSatelliteControllerStats.onSessionEnd(TEST_SUB_ID_0);
350 
351         // session gap min / avg / max would be 1000 each
352         expected.setSatelliteSessionGapMinSec(1000);
353         expected.setSatelliteSessionGapAvgSec(1000);
354         expected.setSatelliteSessionGapMaxSec(1000);
355         expected.setCountOfSatelliteSessions(0);
356         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
357                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
358 
359         clearInvocations(mMockSatelliteStats);
360         // 3rd session starts, gap between 2nd and 3rd session is 2000
361         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_GAP_2);
362         expected.setCountOfSatelliteSessions(1);
363         mTestCarrierRoamingSatelliteControllerStats.onSessionStart(TEST_SUB_ID_0);
364         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
365                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
366 
367         clearInvocations(mMockSatelliteStats);
368         // 3rd session end
369         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_TIME);
370         mTestCarrierRoamingSatelliteControllerStats.onSessionEnd(TEST_SUB_ID_0);
371 
372         // session gap min would be 1000
373         expected.setSatelliteSessionGapMinSec(1000);
374         // session gap avg would be 1500
375         int avgGapSec = (int) ((SESSION_GAP_1 + SESSION_GAP_2) / (2 * 1000));
376         expected.setSatelliteSessionGapAvgSec(avgGapSec);
377         // session gap max would be 2000
378         expected.setSatelliteSessionGapMaxSec(2000);
379         expected.setCountOfSatelliteSessions(0);
380         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
381                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
382 
383         clearInvocations(mMockSatelliteStats);
384         // 4th session starts, gap between 3rd and 4th session is 4000
385         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_GAP_3);
386         expected.setCountOfSatelliteSessions(1);
387         mTestCarrierRoamingSatelliteControllerStats.onSessionStart(TEST_SUB_ID_0);
388         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
389                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
390 
391         clearInvocations(mMockSatelliteStats);
392         // 4th session end
393         mTestCarrierRoamingSatelliteControllerStats.increaseCurrentTime(SESSION_TIME);
394         mTestCarrierRoamingSatelliteControllerStats.onSessionEnd(TEST_SUB_ID_0);
395 
396         // session gap min would be 1000
397         expected.setSatelliteSessionGapMinSec(1000);
398         // session gap avg would be 2333
399         avgGapSec = (int) ((SESSION_GAP_1 + SESSION_GAP_2 + SESSION_GAP_3) / (3 * 1000));
400         expected.setSatelliteSessionGapAvgSec(avgGapSec);
401         // session gap max would be 4000
402         expected.setSatelliteSessionGapMaxSec(4000);
403         expected.setCountOfSatelliteSessions(0);
404         verify(mMockSatelliteStats, times(1)).onCarrierRoamingSatelliteControllerStatsMetrics(
405                 ArgumentMatchers.argThat(argument -> verifyAssets(expected, argument)));
406     }
407 
408     private static class BackupAndRestoreCarrierRoamContParam {
409         private static int sSatelliteSessionGapMinSec;
410         private static int sSatelliteSessionGapAvgSec;
411         private static int sSatelliteSessionGapMaxSec;
412         private static int sCarrierId;
413         private static boolean sIsDeviceEntitled;
414         private static boolean sIsMultiSim;
415         private static boolean sIsNbIotNtn;
416 
backUpStaticParams()417         public static void backUpStaticParams() {
418             SatelliteStats.CarrierRoamingSatelliteControllerStatsParams param =
419                     new SatelliteStats.CarrierRoamingSatelliteControllerStatsParams.Builder()
420                             .build();
421             sSatelliteSessionGapMinSec = param.getSatelliteSessionGapMinSec();
422             sSatelliteSessionGapAvgSec = param.getSatelliteSessionGapAvgSec();
423             sSatelliteSessionGapMaxSec = param.getSatelliteSessionGapMaxSec();
424             sCarrierId = param.getCarrierId();
425             sIsDeviceEntitled = param.isDeviceEntitled();
426             sIsMultiSim = param.isMultiSim();
427             sIsNbIotNtn = param.isNbIotNtn();
428         }
429 
restoreStaticParams()430         public static void restoreStaticParams() {
431             SatelliteStats.getInstance().onCarrierRoamingSatelliteControllerStatsMetrics(
432                     new SatelliteStats.CarrierRoamingSatelliteControllerStatsParams.Builder()
433                             .setSatelliteSessionGapMinSec(sSatelliteSessionGapMinSec)
434                             .setSatelliteSessionGapAvgSec(sSatelliteSessionGapAvgSec)
435                             .setSatelliteSessionGapMaxSec(sSatelliteSessionGapMaxSec)
436                             .setCarrierId(sCarrierId)
437                             .setIsDeviceEntitled(sIsDeviceEntitled)
438                             .setIsMultiSim(sIsMultiSim)
439                             .setIsNbIotNtn(sIsNbIotNtn)
440                             .build());
441         }
442     }
443 
initializeStaticParams()444     private void initializeStaticParams() {
445         SatelliteStats.getInstance().onCarrierRoamingSatelliteControllerStatsMetrics(
446                 new SatelliteStats.CarrierRoamingSatelliteControllerStatsParams.Builder()
447                         .setSatelliteSessionGapMinSec(0)
448                         .setSatelliteSessionGapAvgSec(0)
449                         .setSatelliteSessionGapMaxSec(0)
450                         .setCarrierId(UNKNOWN_CARRIER_ID)
451                         .setIsDeviceEntitled(false)
452                         .setIsMultiSim(false)
453                         .setIsNbIotNtn(false)
454                         .build());
455     }
456 
verifyAssets(ExpectedCarrierRoamingSatelliteControllerStatsParam expected, SatelliteStats.CarrierRoamingSatelliteControllerStatsParams actual)457     private boolean verifyAssets(ExpectedCarrierRoamingSatelliteControllerStatsParam expected,
458             SatelliteStats.CarrierRoamingSatelliteControllerStatsParams actual) {
459         assertEquals(expected.getConfigDataSource(), actual.getConfigDataSource());
460         assertEquals(expected.getCountOfEntitlementStatusQueryRequest(),
461                 actual.getCountOfEntitlementStatusQueryRequest());
462         assertEquals(expected.getCountOfSatelliteConfigUpdateRequest(),
463                 actual.getCountOfSatelliteConfigUpdateRequest());
464         assertEquals(expected.getCountOfSatelliteNotificationDisplayed(),
465                 actual.getCountOfSatelliteNotificationDisplayed());
466         assertEquals(expected.getSatelliteSessionGapMinSec(),
467                 actual.getSatelliteSessionGapMinSec());
468         assertEquals(expected.getSatelliteSessionGapAvgSec(),
469                 actual.getSatelliteSessionGapAvgSec());
470         assertEquals(expected.getSatelliteSessionGapMaxSec(),
471                 actual.getSatelliteSessionGapMaxSec());
472         assertEquals(expected.getCarrierId(), actual.getCarrierId());
473         assertEquals(expected.isDeviceEntitled(), actual.isDeviceEntitled());
474         assertEquals(expected.isMultiSim(), actual.isMultiSim());
475         assertEquals(expected.getCountOfSatelliteSessions(), actual.getCountOfSatelliteSessions());
476         assertEquals(expected.isNbIotNtn(), actual.isNbIotNtn());
477         return true;
478     }
479 
480     private static class ExpectedCarrierRoamingSatelliteControllerStatsParam {
481         private int mConfigDataSource;
482         private int mCountOfEntitlementStatusQueryRequest;
483         private int mCountOfSatelliteConfigUpdateRequest;
484         private int mCountOfSatelliteNotificationDisplayed;
485         private int mSatelliteSessionGapMinSec;
486         private int mSatelliteSessionGapAvgSec;
487         private int mSatelliteSessionGapMaxSec;
488         private int mCarrierId;
489         private boolean mIsDeviceEntitled;
490         private boolean mIsMultiSim;
491         private int mCountOfSatelliteSessions;
492         private boolean mIsNbIotNtn;
493 
getConfigDataSource()494         public int getConfigDataSource() {
495             return mConfigDataSource;
496         }
497 
getCountOfEntitlementStatusQueryRequest()498         public int getCountOfEntitlementStatusQueryRequest() {
499             return mCountOfEntitlementStatusQueryRequest;
500         }
501 
getCountOfSatelliteConfigUpdateRequest()502         public int getCountOfSatelliteConfigUpdateRequest() {
503             return mCountOfSatelliteConfigUpdateRequest;
504         }
505 
getCountOfSatelliteNotificationDisplayed()506         public int getCountOfSatelliteNotificationDisplayed() {
507             return mCountOfSatelliteNotificationDisplayed;
508         }
509 
getSatelliteSessionGapMinSec()510         public int getSatelliteSessionGapMinSec() {
511             return mSatelliteSessionGapMinSec;
512         }
513 
getSatelliteSessionGapAvgSec()514         public int getSatelliteSessionGapAvgSec() {
515             return mSatelliteSessionGapAvgSec;
516         }
517 
getSatelliteSessionGapMaxSec()518         public int getSatelliteSessionGapMaxSec() {
519             return mSatelliteSessionGapMaxSec;
520         }
521 
getCarrierId()522         public int getCarrierId() {
523             return mCarrierId;
524         }
525 
isDeviceEntitled()526         public boolean isDeviceEntitled() {
527             return mIsDeviceEntitled;
528         }
529 
isMultiSim()530         public boolean isMultiSim() {
531             return mIsMultiSim;
532         }
533 
getCountOfSatelliteSessions()534         public int getCountOfSatelliteSessions() {
535             return mCountOfSatelliteSessions;
536         }
537 
isNbIotNtn()538         public boolean isNbIotNtn() {
539             return mIsNbIotNtn;
540         }
541 
setConfigDataSource(int configDataSource)542         public void setConfigDataSource(int configDataSource) {
543             mConfigDataSource = configDataSource;
544         }
545 
setCountOfEntitlementStatusQueryRequest( int countOfEntitlementStatusQueryRequest)546         public void setCountOfEntitlementStatusQueryRequest(
547                 int countOfEntitlementStatusQueryRequest) {
548             mCountOfEntitlementStatusQueryRequest = countOfEntitlementStatusQueryRequest;
549         }
550 
setCountOfSatelliteConfigUpdateRequest( int countOfSatelliteConfigUpdateRequest)551         public void setCountOfSatelliteConfigUpdateRequest(
552                 int countOfSatelliteConfigUpdateRequest) {
553             mCountOfSatelliteConfigUpdateRequest = countOfSatelliteConfigUpdateRequest;
554         }
555 
setCountOfSatelliteNotificationDisplayed( int countOfSatelliteNotificationDisplayed)556         public void setCountOfSatelliteNotificationDisplayed(
557                 int countOfSatelliteNotificationDisplayed) {
558             mCountOfSatelliteNotificationDisplayed = countOfSatelliteNotificationDisplayed;
559         }
560 
setSatelliteSessionGapMinSec(int satelliteSessionGapMinSec)561         public void setSatelliteSessionGapMinSec(int satelliteSessionGapMinSec) {
562             mSatelliteSessionGapMinSec = satelliteSessionGapMinSec;
563         }
564 
setSatelliteSessionGapAvgSec(int satelliteSessionGapAvgSec)565         public void setSatelliteSessionGapAvgSec(int satelliteSessionGapAvgSec) {
566             mSatelliteSessionGapAvgSec = satelliteSessionGapAvgSec;
567         }
568 
setSatelliteSessionGapMaxSec(int satelliteSessionGapMaxSec)569         public void setSatelliteSessionGapMaxSec(int satelliteSessionGapMaxSec) {
570             mSatelliteSessionGapMaxSec = satelliteSessionGapMaxSec;
571         }
572 
setCarrierId(int carrierId)573         public void setCarrierId(int carrierId) {
574             mCarrierId = carrierId;
575         }
576 
setIsDeviceEntitled(boolean isDeviceEntitled)577         public void setIsDeviceEntitled(boolean isDeviceEntitled) {
578             mIsDeviceEntitled = isDeviceEntitled;
579         }
580 
setIsMultiSim(boolean isMultiSim)581         public void setIsMultiSim(boolean isMultiSim) {
582             mIsMultiSim = isMultiSim;
583         }
584 
setCountOfSatelliteSessions(int countOfSatelliteSessions)585         public void setCountOfSatelliteSessions(int countOfSatelliteSessions) {
586             mCountOfSatelliteSessions = countOfSatelliteSessions;
587         }
588 
setIsNbIotNtn(boolean isNbIotNtn)589         public void setIsNbIotNtn(boolean isNbIotNtn) {
590             mIsNbIotNtn = isNbIotNtn;
591         }
592 
initializeParams()593         public void initializeParams() {
594             mConfigDataSource = SatelliteConstants.CONFIG_DATA_SOURCE_UNKNOWN;
595             mCountOfEntitlementStatusQueryRequest = 0;
596             mCountOfSatelliteConfigUpdateRequest = 0;
597             mCountOfSatelliteNotificationDisplayed = 0;
598             mSatelliteSessionGapMinSec = 0;
599             mSatelliteSessionGapAvgSec = 0;
600             mSatelliteSessionGapMaxSec = 0;
601             mCarrierId = UNKNOWN_CARRIER_ID;
602             mIsDeviceEntitled = false;
603             mIsMultiSim = false;
604             mCountOfSatelliteSessions = 0;
605             mIsNbIotNtn = false;
606         }
607     }
608 
609     static class TestCarrierRoamingSatelliteControllerStats extends
610             CarrierRoamingSatelliteControllerStats {
611         private long mCurrentTime;
TestCarrierRoamingSatelliteControllerStats()612         TestCarrierRoamingSatelliteControllerStats() {
613             super();
614             logd("constructing TestCarrierRoamingSatelliteControllerStats");
615         }
616 
617         @Override
getCarrierIdFromSubscription(int subId)618         public int getCarrierIdFromSubscription(int subId) {
619             logd("getCarrierIdFromSubscription()");
620             if (subId == TEST_SUB_ID_0) {
621                 return TEST_CARRIER_ID_0;
622             } else if (subId == TEST_SUB_ID_1) {
623                 return TEST_CARRIER_ID_1;
624             } else {
625                 return UNKNOWN_CARRIER_ID;
626             }
627         }
628 
629         @Override
getElapsedRealtime()630         public long getElapsedRealtime() {
631             return mCurrentTime;
632         }
633 
setCurrentTime(long currentTime)634         public void setCurrentTime(long currentTime) {
635             mCurrentTime = currentTime;
636         }
637 
increaseCurrentTime(long incTime)638         public void increaseCurrentTime(long incTime) {
639             mCurrentTime += incTime;
640         }
641     }
642 }
643