From ab8c9e7df3a8a3645b5a588b8ea7cbf57f140797 Mon Sep 17 00:00:00 2001 From: Lei Ju Date: Thu, 23 Feb 2023 11:45:28 -0800 Subject: [PATCH] Avoid crashing when no nanoapp preploaded Test: unit test Fix: 270556677 Change-Id: I9e139e8e35cb2c25b4900fbbdb0e6483e71579a3 --- .../contexthub/ContextHubService.java | 11 +++--- .../contexthub/ContextHubServiceTest.java | 35 +++++++++++++------ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubService.java b/services/core/java/com/android/server/location/contexthub/ContextHubService.java index 8f657756eed37..6f3fbcfebdd84 100644 --- a/services/core/java/com/android/server/location/contexthub/ContextHubService.java +++ b/services/core/java/com/android/server/location/contexthub/ContextHubService.java @@ -1207,7 +1207,7 @@ public class ContextHubService extends IContextHubService.Stub { pw.println(""); pw.println("=================== NANOAPPS ===================="); // Dump nanoAppHash - mNanoAppStateManager.foreachNanoAppInstanceInfo((info) -> pw.println(info)); + mNanoAppStateManager.foreachNanoAppInstanceInfo(pw::println); pw.println(""); pw.println("=================== PRELOADED NANOAPPS ===================="); @@ -1255,16 +1255,17 @@ public class ContextHubService extends IContextHubService.Stub { proto.flush(); } - /** - * Dumps preloaded nanoapps to the console - */ + /** Dumps preloaded nanoapps to the console */ private void dumpPreloadedNanoapps(PrintWriter pw) { if (mContextHubWrapper == null) { return; } long[] preloadedNanoappIds = mContextHubWrapper.getPreloadedNanoappIds(); - for (long preloadedNanoappId: preloadedNanoappIds) { + if (preloadedNanoappIds == null) { + return; + } + for (long preloadedNanoappId : preloadedNanoappIds) { pw.print("ID: 0x"); pw.println(Long.toHexString(preloadedNanoappId)); } diff --git a/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubServiceTest.java b/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubServiceTest.java index fb1a8f87a50b9..c0a994ba340ac 100644 --- a/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/location/contexthub/ContextHubServiceTest.java @@ -40,6 +40,9 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.Arrays; import java.util.List; @@ -49,7 +52,8 @@ public class ContextHubServiceTest { private static final int CONTEXT_HUB_ID = 3; private static final String CONTEXT_HUB_STRING = "Context Hub Info Test"; - private Context mContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + private final Context mContext = + InstrumentationRegistry.getInstrumentation().getTargetContext(); @Mock private IContextHubWrapper mMockContextHubWrapper; @Mock private ContextHubInfo mMockContextHubInfo; @Rule public final MockitoRule mockito = MockitoJUnit.rule(); @@ -62,20 +66,29 @@ public class ContextHubServiceTest { when(mMockContextHubInfo.toString()).thenReturn(CONTEXT_HUB_STRING); when(mMockContextHubWrapper.getHubs()).thenReturn(hubInfo); - when(mMockContextHubWrapper.supportsLocationSettingNotifications()) - .thenReturn(true); + when(mMockContextHubWrapper.supportsLocationSettingNotifications()).thenReturn(true); when(mMockContextHubWrapper.supportsWifiSettingNotifications()).thenReturn(true); - when(mMockContextHubWrapper.supportsAirplaneModeSettingNotifications()) - .thenReturn(true); - when(mMockContextHubWrapper.supportsMicrophoneSettingNotifications()) - .thenReturn(true); + when(mMockContextHubWrapper.supportsAirplaneModeSettingNotifications()).thenReturn(true); + when(mMockContextHubWrapper.supportsMicrophoneSettingNotifications()).thenReturn(true); when(mMockContextHubWrapper.supportsBtSettingNotifications()).thenReturn(true); } -// TODO (b/254290317): These existing tests are to setup the testing infra for the ContextHub -// service and verify the constructor correctly registers a context hub. -// We need to augment these tests to cover the full behavior of the -// ContextHub service + @Test + public void testDump_emptyPreloadedNanoappList() { + when(mMockContextHubWrapper.getPreloadedNanoappIds()).thenReturn(null); + StringWriter stringWriter = new StringWriter(); + + ContextHubService service = new ContextHubService(mContext, mMockContextHubWrapper); + service.dump( + new FileDescriptor(), new PrintWriter(stringWriter), /* args= */ new String[0]); + + assertThat(stringWriter.toString()).isNotEmpty(); + } + + // TODO (b/254290317): These existing tests are to setup the testing infra for the ContextHub + // service and verify the constructor correctly registers a context hub. + // We need to augment these tests to cover the full behavior of the + // ContextHub service @Test public void testConstructorRegistersContextHub() throws RemoteException {