diff options
Diffstat (limited to 'sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java')
-rw-r--r-- | sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java | 491 |
1 files changed, 307 insertions, 184 deletions
diff --git a/sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java b/sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java index 2316563957..c8f5db3ea1 100644 --- a/sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java +++ b/sdksandbox/tests/unittest/src/com/android/server/sdksandbox/SdkSandboxManagerServiceUnitTest.java @@ -20,6 +20,7 @@ import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREG import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__ADD_SDK_SANDBOX_LIFECYCLE_CALLBACK; import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__REMOVE_SDK_SANDBOX_LIFECYCLE_CALLBACK; +import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE; import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER; import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_SANDBOX_TO_APP; import static com.android.sdksandbox.service.stats.SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX; @@ -108,6 +109,7 @@ public class SdkSandboxManagerServiceUnitTest { private MockitoSession mStaticMockSession = null; private Context mSpyContext; private SdkSandboxManagerService.Injector mInjector; + private int mClientAppUid; private static final String CLIENT_PACKAGE_NAME = "com.android.client"; private static final String SDK_NAME = "com.android.codeprovider"; @@ -173,6 +175,8 @@ public class SdkSandboxManagerServiceUnitTest { mInjector = Mockito.spy(new InjectorForTest()); mService = new SdkSandboxManagerService(mSpyContext, mProvider, mInjector); + + mClientAppUid = Process.myUid(); } @After @@ -336,7 +340,6 @@ public class SdkSandboxManagerServiceUnitTest { android.Manifest.permission.ACCESS_NETWORK_STATE); } - @Test public void testLoadSdk_successOnFirstLoad_errorOnLoadAgain() throws Exception { disableNetworkPermissionChecks(); @@ -366,33 +369,51 @@ public class SdkSandboxManagerServiceUnitTest { } @Test - public void testLoadSdk_errorOnFirstLoad_canBeLoadedAgain() throws Exception { + public void testLoadSdk_firstLoadPending_errorOnLoadAgainRequest() throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); - // Load code, but make it fail + // Request to load the SDK, but do not complete loading it { FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); mService.loadSdk( TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); - // Assume SupplementalProcess load fails - mSdkSandboxService.sendLoadCodeError(); + } + + // Requesting to load the SDK while the first load is still pending should throw an error + { + FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); + mService.loadSdk( + TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); + // Verify loading failed assertThat(callback.isLoadSdkSuccessful()).isFalse(); + assertThat(callback.getLoadSdkErrorCode()) + .isEqualTo(SdkSandboxManager.LOAD_SDK_ALREADY_LOADED); + assertThat(callback.getLoadSdkErrorMsg()).contains("is currently being loaded"); } + } - // Caller should be able to retry loading the code + @Test + public void testLoadSdk_errorOnFirstLoad_canBeLoadedAgain() throws Exception { + disableNetworkPermissionChecks(); + disableForegroundCheck(); + + // Load code, but make it fail { FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); mService.loadSdk( TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); - // Assume SupplementalProcess loads successfully - mSdkSandboxService.sendLoadCodeSuccessful(); - assertThat(callback.isLoadSdkSuccessful()).isTrue(); + // Assume sdk load fails + mSdkSandboxService.sendLoadCodeError(); + assertThat(callback.isLoadSdkSuccessful()).isFalse(); } + + // Caller should be able to retry loading the code + loadSdk(SDK_NAME); } @Test - public void testLoadSdk_SandboxDiesInBetween() throws Exception { + public void testLoadSdk_sandboxDiesInBetween() throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); @@ -415,7 +436,24 @@ public class SdkSandboxManagerServiceUnitTest { } @Test - public void testRequestSurfacePackageSdkNotLoaded() throws Exception { + public void testLoadSdk_sandboxIsInitialized() throws Exception { + loadSdk(SDK_NAME); + + // Verify that sandbox was initialized + assertThat(mSdkSandboxService.getInitializationCount()).isEqualTo(1); + } + + @Test + public void testLoadSdk_sandboxIsInitialized_onlyOnce() throws Exception { + loadSdk(SDK_NAME); + loadSdk(SDK_PROVIDER_RESOURCES_SDK_NAME); + + // Verify that sandbox was initialized + assertThat(mSdkSandboxService.getInitializationCount()).isEqualTo(1); + } + + @Test + public void testRequestSurfacePackageSdkNotLoaded_SandboxExists() throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); @@ -428,21 +466,21 @@ public class SdkSandboxManagerServiceUnitTest { // Trying to request package with not exist SDK packageName String sdkName = "invalid"; - IllegalArgumentException thrown = - assertThrows( - IllegalArgumentException.class, - () -> - mService.requestSurfacePackage( - TEST_PACKAGE, - sdkName, - new Binder(), - 0, - 500, - 500, - TIME_APP_CALLED_SYSTEM_SERVER, - new Bundle(), - new FakeRequestSurfacePackageCallbackBinder())); - assertThat(thrown).hasMessageThat().contains("Sdk " + sdkName + " is not loaded"); + FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = + new FakeRequestSurfacePackageCallbackBinder(); + mService.requestSurfacePackage( + TEST_PACKAGE, + sdkName, + new Binder(), + 0, + 500, + 500, + TIME_APP_CALLED_SYSTEM_SERVER, + new Bundle(), + surfacePackageCallback); + assertThat(surfacePackageCallback.isRequestSurfacePackageSuccessful()).isFalse(); + assertThat(surfacePackageCallback.getSurfacePackageErrorCode()) + .isEqualTo(SdkSandboxManager.REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED); } @Test @@ -465,13 +503,13 @@ public class SdkSandboxManagerServiceUnitTest { callback); assertThat(callback.isRequestSurfacePackageSuccessful()).isFalse(); assertThat(callback.getSurfacePackageErrorCode()) - .isEqualTo(SdkSandboxManager.SDK_SANDBOX_PROCESS_NOT_AVAILABLE); + .isEqualTo(SdkSandboxManager.REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED); } @Test public void testRequestSurfacePackage() throws Exception { // 1. We first need to collect a proper sdkToken by calling loadCode - loadSdk(); + loadSdk(SDK_NAME); // 2. Call request package with the retrieved sdkToken FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = @@ -528,12 +566,12 @@ public class SdkSandboxManagerServiceUnitTest { requestSurfacePackageCallback); assertThat(requestSurfacePackageCallback.isRequestSurfacePackageSuccessful()).isFalse(); assertThat(requestSurfacePackageCallback.getSurfacePackageErrorCode()) - .isEqualTo(SdkSandboxManager.SDK_SANDBOX_PROCESS_NOT_AVAILABLE); + .isEqualTo(SdkSandboxManager.REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED); } @Test public void testSurfacePackageError() throws Exception { - loadSdk(); + loadSdk(SDK_NAME); // Assume SurfacePackage encounters an error. FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = @@ -583,7 +621,7 @@ public class SdkSandboxManagerServiceUnitTest { assertThat(surfacePackageCallback.isRequestSurfacePackageSuccessful()).isFalse(); assertThat(surfacePackageCallback.getSurfacePackageErrorCode()) - .isEqualTo(SdkSandboxManager.SDK_SANDBOX_PROCESS_NOT_AVAILABLE); + .isEqualTo(SdkSandboxManager.REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED); } @Test @@ -595,7 +633,7 @@ public class SdkSandboxManagerServiceUnitTest { TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER, lifecycleCallback); // Load SDK and start the sandbox - loadSdk(); + loadSdk(SDK_NAME); // Kill the sandbox ArgumentCaptor<IBinder.DeathRecipient> deathRecipientCaptor = @@ -612,7 +650,7 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testAddSdkSandboxProcessDeathCallback_AfterStartingSandbox() throws Exception { // Load SDK and start the sandbox - loadSdk(); + loadSdk(SDK_NAME); // Register for sandbox death event FakeSdkSandboxProcessDeathCallbackBinder lifecycleCallback = @@ -635,7 +673,7 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testMultipleAddSdkSandboxProcessDeathCallbacks() throws Exception { // Load SDK and start the sandbox - loadSdk(); + loadSdk(SDK_NAME); // Register for sandbox death event FakeSdkSandboxProcessDeathCallbackBinder lifecycleCallback1 = @@ -665,7 +703,7 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testRemoveSdkSandboxProcessDeathCallback() throws Exception { // Load SDK and start the sandbox - loadSdk(); + loadSdk(SDK_NAME); // Register for sandbox death event FakeSdkSandboxProcessDeathCallbackBinder lifecycleCallback1 = @@ -734,7 +772,14 @@ public class SdkSandboxManagerServiceUnitTest { PackageManager.MATCH_STATIC_SHARED_AND_SDK_LIBRARIES); assertThat(info).isNotNull(); SandboxedSdkContext sandboxedSdkContext = - new SandboxedSdkContext(context, CLIENT_PACKAGE_NAME, info, SDK_NAME, null, null); + new SandboxedSdkContext( + context, + getClass().getClassLoader(), + CLIENT_PACKAGE_NAME, + info, + SDK_NAME, + null, + null); Resources resources = sandboxedSdkContext.getResources(); int integerId = resources.getIdentifier("test_integer", "integer", @@ -790,7 +835,7 @@ public class SdkSandboxManagerServiceUnitTest { disableKillUid(); // First load SDK. - loadSdk(); + loadSdk(SDK_NAME); final CallingInfo callingInfo = new CallingInfo(Process.myUid(), TEST_PACKAGE); @@ -811,7 +856,7 @@ public class SdkSandboxManagerServiceUnitTest { disableKillUid(); // First load SDK. - loadSdk(); + loadSdk(SDK_NAME); final CallingInfo callingInfo = new CallingInfo(Process.myUid(), TEST_PACKAGE); @@ -879,20 +924,20 @@ public class SdkSandboxManagerServiceUnitTest { } @Test - public void testGetLoadedSdkLibrariesInfo_afterLoadSdkSuccess() throws Exception { - loadSdk(); - assertThat(mService.getLoadedSdkLibrariesInfo(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER)) + public void testGetSandboxedSdks_afterLoadSdkSuccess() throws Exception { + loadSdk(SDK_NAME); + assertThat(mService.getSandboxedSdks(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER)) .hasSize(1); assertThat( - mService.getLoadedSdkLibrariesInfo( - TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER) + mService.getSandboxedSdks(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER) .get(0) + .getSharedLibraryInfo() .getName()) .isEqualTo(SDK_NAME); } @Test - public void testGetLoadedSdkLibrariesInfo_errorLoadingSdk() throws Exception { + public void testGetSandboxedSdks_errorLoadingSdk() throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); @@ -906,7 +951,7 @@ public class SdkSandboxManagerServiceUnitTest { assertThat(callback.isLoadSdkSuccessful()).isFalse(); assertThat(callback.getLoadSdkErrorCode()) .isEqualTo(SdkSandboxManager.LOAD_SDK_INTERNAL_ERROR); - assertThat(mService.getLoadedSdkLibrariesInfo(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER)) + assertThat(mService.getSandboxedSdks(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER)) .isEmpty(); } @@ -928,28 +973,17 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testUnloadSdkThatIsNotLoaded() throws Exception { // Load SDK to bring up a sandbox - loadSdk(); - // Trying to load an SDK that is not loaded should fail. - assertThrows( - IllegalArgumentException.class, - () -> mService.unloadSdk( - TEST_PACKAGE, SDK_PROVIDER_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER)); + loadSdk(SDK_NAME); + // Trying to unload an SDK that is not loaded should do nothing - it's a no-op. + mService.unloadSdk(TEST_PACKAGE, SDK_PROVIDER_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER); } @Test public void testUnloadSdkThatIsLoaded() throws Exception { disableKillUid(); - loadSdk(); + loadSdk(SDK_NAME); - FakeLoadSdkCallbackBinder callback2 = new FakeLoadSdkCallbackBinder(); - mService.loadSdk( - TEST_PACKAGE, - SDK_PROVIDER_RESOURCES_SDK_NAME, - TIME_APP_CALLED_SYSTEM_SERVER, - new Bundle(), - callback2); - mSdkSandboxService.sendLoadCodeSuccessful(); - assertThat(callback2.isLoadSdkSuccessful()).isTrue(); + loadSdk(SDK_PROVIDER_RESOURCES_SDK_NAME); final CallingInfo callingInfo = new CallingInfo(Process.myUid(), TEST_PACKAGE); mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER); @@ -967,10 +1001,32 @@ public class SdkSandboxManagerServiceUnitTest { } @Test + public void testUnloadSdkThatIsBeingLoaded() throws Exception { + // Ask to load SDK, but don't finish loading it + disableKillUid(); + disableNetworkPermissionChecks(); + disableForegroundCheck(); + + FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); + mService.loadSdk( + TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); + + // Trying to unload an SDK that is being loaded should fail + assertThrows( + IllegalArgumentException.class, + () -> mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER)); + + // After loading the SDK, unloading should not fail + mSdkSandboxService.sendLoadCodeSuccessful(); + assertThat(callback.isLoadSdkSuccessful()).isTrue(); + mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER); + } + + @Test public void testUnloadSdkAfterKillingSandboxDoesNotThrowException() throws Exception { disableKillUid(); - loadSdk(); + loadSdk(SDK_NAME); // Kill the sandbox ArgumentCaptor<IBinder.DeathRecipient> deathRecipientCaptor = @@ -1030,7 +1086,7 @@ public class SdkSandboxManagerServiceUnitTest { callback.resetLatch(); // Now loadSdk so that sandbox is created - loadSdk(); + loadSdk(SDK_NAME); // Verify that onSandboxStart was called assertThat(callback.hasSandboxStarted()).isTrue(); @@ -1059,7 +1115,7 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testStopSdkSandbox() throws Exception { disableKillUid(); - loadSdk(); + loadSdk(SDK_NAME); Mockito.doNothing() .when(mSpyContext) @@ -1117,7 +1173,7 @@ public class SdkSandboxManagerServiceUnitTest { @Test public void testLatencyMetrics_IpcFromAppToSystemServer_LoadSdk() throws Exception { - loadSdk(); + loadSdk(SDK_NAME); ExtendedMockito.verify( () -> @@ -1128,14 +1184,14 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test public void testLatencyMetrics_IpcFromAppToSystemServer_RequestSurfacePackage() throws Exception { - loadSdk(); + loadSdk(SDK_NAME); // 2. Call request package FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = @@ -1154,37 +1210,36 @@ public class SdkSandboxManagerServiceUnitTest { () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, (int) (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test - public void testLatencyMetrics_IpcFromAppToSystemServer_GetLoadedSdkLibrariesInfo() { - mService.getLoadedSdkLibrariesInfo(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER); + public void testLatencyMetrics_IpcFromAppToSystemServer_GetSandboxedSdks() { + mService.getSandboxedSdks(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__GET_LOADED_SDK_LIBRARIES_INFO, + SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__GET_SANDBOXED_SDKS, (int) (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test public void testLatencyMetrics_IpcFromAppToSystemServer_UnloadSdk() throws Exception { disableKillUid(); - loadSdk(); + + loadSdk(SDK_NAME); mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER); ExtendedMockito.verify( () -> @@ -1195,8 +1250,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test @@ -1217,8 +1272,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } // TODO(b/242149555): Update tests to use fake for getting time series. @@ -1230,7 +1285,7 @@ public class SdkSandboxManagerServiceUnitTest { START_TIME_TO_LOAD_SANDBOX, END_TIME_TO_LOAD_SANDBOX, TIME_SYSTEM_SERVER_CALLS_SANDBOX); - loadSdk(); + loadSdk(SDK_NAME); final int timeToLoadSdk = (int) (END_TIME_TO_LOAD_SANDBOX - START_TIME_TO_LOAD_SANDBOX); @@ -1241,7 +1296,8 @@ public class SdkSandboxManagerServiceUnitTest { SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK, timeToLoadSdk, /*success=*/ true, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__LOAD_SANDBOX)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__LOAD_SANDBOX, + mClientAppUid)); int timeSystemServerAppToSandbox = (int) @@ -1257,12 +1313,13 @@ public class SdkSandboxManagerServiceUnitTest { timeSystemServerAppToSandbox, /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test public void testLatencyMetrics_SystemServerSandboxToApp_LoadSdk() throws Exception { - loadSdk(); + loadSdk(SDK_NAME); ExtendedMockito.verify( () -> @@ -1271,7 +1328,8 @@ public class SdkSandboxManagerServiceUnitTest { Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> @@ -1280,7 +1338,8 @@ public class SdkSandboxManagerServiceUnitTest { Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX))); + Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> @@ -1289,7 +1348,8 @@ public class SdkSandboxManagerServiceUnitTest { Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER), + Mockito.eq(mClientAppUid))); } @Test @@ -1320,7 +1380,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SANDBOX_RECEIVED_CALL_FROM_SYSTEM_SERVER - TIME_SYSTEM_SERVER_CALLED_SANDBOX), /*success=*/ true, - SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX)); + SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX, + mClientAppUid)); int sandboxLatency = (int) @@ -1335,7 +1396,8 @@ public class SdkSandboxManagerServiceUnitTest { SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK, sandboxLatency, /*success=*/ true, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1344,7 +1406,8 @@ public class SdkSandboxManagerServiceUnitTest { SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK, (int) (TIME_SDK_CALL_COMPLETED - TIME_SANDBOX_CALLED_SDK), /*success=*/ true, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1355,7 +1418,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX - TIME_SANDBOX_CALLED_SYSTEM_SERVER), /*success=*/ true, - SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER)); + SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test @@ -1363,6 +1427,7 @@ public class SdkSandboxManagerServiceUnitTest { throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); + Mockito.when(mInjector.getCurrentTime()) .thenReturn( TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, @@ -1400,7 +1465,8 @@ public class SdkSandboxManagerServiceUnitTest { timeSystemServerAppToSandbox, /*success=*/ false, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test @@ -1408,6 +1474,7 @@ public class SdkSandboxManagerServiceUnitTest { throws RemoteException { disableNetworkPermissionChecks(); disableForegroundCheck(); + Mockito.when(mInjector.getCurrentTime()) .thenReturn(TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, TIME_FAILURE_HANDLED); @@ -1425,7 +1492,8 @@ public class SdkSandboxManagerServiceUnitTest { - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ false, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1434,6 +1502,7 @@ public class SdkSandboxManagerServiceUnitTest { Mockito.anyInt(), Mockito.anyInt(), Mockito.anyBoolean(), + Mockito.anyInt(), Mockito.anyInt()), Mockito.times(2)); } @@ -1473,7 +1542,8 @@ public class SdkSandboxManagerServiceUnitTest { - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ false, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1482,6 +1552,7 @@ public class SdkSandboxManagerServiceUnitTest { Mockito.anyInt(), Mockito.anyInt(), Mockito.anyBoolean(), + Mockito.anyInt(), Mockito.anyInt()), Mockito.times(2)); } @@ -1510,7 +1581,8 @@ public class SdkSandboxManagerServiceUnitTest { SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__LOAD_SDK, (int) (TIME_FAILURE_HANDLED - START_TIME_TO_LOAD_SANDBOX), /*success=*/ false, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__LOAD_SANDBOX)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__LOAD_SANDBOX, + mClientAppUid)); } @Test @@ -1526,7 +1598,7 @@ public class SdkSandboxManagerServiceUnitTest { TIME_SYSTEM_SERVER_CALLED_APP, TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, TIME_SYSTEM_SERVER_CALLED_SANDBOX); - loadSdk(); + loadSdk(SDK_NAME); // 2. Call request package FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = @@ -1548,47 +1620,44 @@ public class SdkSandboxManagerServiceUnitTest { () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, (int) (TIME_SYSTEM_SERVER_CALLED_SANDBOX - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX))); + Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER), + Mockito.eq(mClientAppUid))); } @Test @@ -1605,7 +1674,7 @@ public class SdkSandboxManagerServiceUnitTest { TIME_SYSTEM_SERVER_CALLED_APP, TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, TIME_SYSTEM_SERVER_CALLED_SANDBOX); - loadSdk(); + loadSdk(SDK_NAME); // 2. Call request package FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = @@ -1627,80 +1696,122 @@ public class SdkSandboxManagerServiceUnitTest { () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, (int) (TIME_SYSTEM_SERVER_CALLED_SANDBOX - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX))); + Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK))); + Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK), + Mockito.eq(mClientAppUid))); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( Mockito.eq(SdkSandboxStatsLog.SANDBOX_API_CALLED), - Mockito.eq( - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), + Mockito.eq(SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE), Mockito.anyInt(), Mockito.eq(/*success=*/ true), - Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER))); + Mockito.eq(SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER), + Mockito.eq(mClientAppUid))); + } + + @Test + public void testLatencyMetrics_SystemServerSandboxToApp_RequestSurfacePackage() + throws RemoteException { + Mockito.when(mInjector.getCurrentTime()) + .thenReturn( + TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, + START_TIME_TO_LOAD_SANDBOX, + END_TIME_TO_LOAD_SANDBOX, + TIME_SYSTEM_SERVER_CALLED_SANDBOX, + TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX, + TIME_SYSTEM_SERVER_CALLED_APP, + TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, + TIME_SYSTEM_SERVER_CALLED_SANDBOX, + TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX, + TIME_SYSTEM_SERVER_CALLED_APP); + loadSdk(SDK_NAME); + + // 2. Call request package + FakeRequestSurfacePackageCallbackBinder surfacePackageCallback = + new FakeRequestSurfacePackageCallbackBinder(); + mService.requestSurfacePackage( + TEST_PACKAGE, + SDK_NAME, + new Binder(), + 0, + 500, + 500, + TIME_APP_CALLED_SYSTEM_SERVER, + new Bundle(), + surfacePackageCallback); + mSdkSandboxService.sendSurfacePackageReady( + new SandboxLatencyInfo(TIME_SYSTEM_SERVER_CALLED_SANDBOX)); + + ExtendedMockito.verify( + () -> + SdkSandboxStatsLog.write( + SdkSandboxStatsLog.SANDBOX_API_CALLED, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + (int) + (TIME_SYSTEM_SERVER_CALLED_APP + - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX), + /*success=*/ true, + SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_SANDBOX_TO_APP, + mClientAppUid)); } @Test - public void testLatencyMetrics_SystemServerAppToSandbox_GetLoadedSdkLibrariesInfo() { + public void testLatencyMetrics_SystemServerAppToSandbox_GetSandboxedSdks() { // TODO(b/242149555): Update tests to use fake for getting time series. Mockito.when(mInjector.getCurrentTime()) .thenReturn(TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP, END_TIME_IN_SYSTEM_SERVER); - mService.getLoadedSdkLibrariesInfo(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER); + mService.getSandboxedSdks(TEST_PACKAGE, TIME_APP_CALLED_SYSTEM_SERVER); ExtendedMockito.verify( () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__GET_LOADED_SDK_LIBRARIES_INFO, + SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__GET_SANDBOXED_SDKS, (int) (END_TIME_IN_SYSTEM_SERVER - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test @@ -1711,12 +1822,11 @@ public class SdkSandboxManagerServiceUnitTest { () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, /*latency=*/ 1, /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_APP)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_APP, + mClientAppUid)); } @Test @@ -1753,14 +1863,14 @@ public class SdkSandboxManagerServiceUnitTest { assertThat(listener.isKillSwitchEnabled()).isFalse(); listener.onPropertiesChanged( new DeviceConfig.Properties( - DeviceConfig.NAMESPACE_SDK_SANDBOX, + DeviceConfig.NAMESPACE_ADSERVICES, Map.of(PROPERTY_DISABLE_SANDBOX, "true"))); assertThat(listener.isKillSwitchEnabled()).isTrue(); listener.onPropertiesChanged( new DeviceConfig.Properties( - DeviceConfig.NAMESPACE_SDK_SANDBOX, + DeviceConfig.NAMESPACE_ADSERVICES, Map.of(PROPERTY_DISABLE_SANDBOX, "false"))); - assertThat(listener.isKillSwitchEnabled()).isTrue(); + assertThat(listener.isKillSwitchEnabled()).isFalse(); } @Test @@ -1770,13 +1880,13 @@ public class SdkSandboxManagerServiceUnitTest { mService.getSdkSandboxSettingsListener(); listener.onPropertiesChanged( new DeviceConfig.Properties( - DeviceConfig.NAMESPACE_SDK_SANDBOX, + DeviceConfig.NAMESPACE_ADSERVICES, Map.of(PROPERTY_DISABLE_SANDBOX, "false"))); mService.getSdkSandboxSettingsListener().reset(); - loadSdk(); + loadSdk(SDK_NAME); listener.onPropertiesChanged( new DeviceConfig.Properties( - DeviceConfig.NAMESPACE_SDK_SANDBOX, + DeviceConfig.NAMESPACE_ADSERVICES, Map.of(PROPERTY_DISABLE_SANDBOX, "true"))); int callingUid = Binder.getCallingUid(); final CallingInfo callingInfo = new CallingInfo(callingUid, TEST_PACKAGE); @@ -1784,15 +1894,18 @@ public class SdkSandboxManagerServiceUnitTest { } @Test - public void testLoadSdkFailsWhenSandboxDisabled() { + public void testLoadSdkFailsWhenSandboxDisabled() throws Exception { disableNetworkPermissionChecks(); disableForegroundCheck(); SdkSandboxManagerService.SdkSandboxSettingsListener listener = mService.getSdkSandboxSettingsListener(); listener.reset(); + // Sleep needed to avoid deadlock. + // TODO(b/257255118): Remove this sleep. + Thread.sleep(500); listener.onPropertiesChanged( new DeviceConfig.Properties( - DeviceConfig.NAMESPACE_SDK_SANDBOX, + DeviceConfig.NAMESPACE_ADSERVICES, Map.of(PROPERTY_DISABLE_SANDBOX, "true"))); FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); mService.loadSdk( @@ -1828,14 +1941,14 @@ public class SdkSandboxManagerServiceUnitTest { () -> SdkSandboxStatsLog.write( SdkSandboxStatsLog.SANDBOX_API_CALLED, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, + SANDBOX_API_CALLED__METHOD__REQUEST_SURFACE_PACKAGE, (int) (TIME_FAILURE_HANDLED - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ false, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test @@ -1857,7 +1970,7 @@ public class SdkSandboxManagerServiceUnitTest { TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX, TIME_SYSTEM_SERVER_CALLED_APP); - loadSdk(); + loadSdk(SDK_NAME); mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER); ExtendedMockito.verify( () -> @@ -1868,8 +1981,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1881,11 +1994,12 @@ public class SdkSandboxManagerServiceUnitTest { - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test - public void testLatencyMetrics_systemServer_unloadSdk_withSandboxLatencies() throws Exception { + public void testLatencyMetrics_SystemServer_UnloadSdk_WithSandboxLatencies() throws Exception { disableKillUid(); Mockito.when(mInjector.getCurrentTime()) @@ -1904,7 +2018,7 @@ public class SdkSandboxManagerServiceUnitTest { TIME_SYSTEM_SERVER_CALLED_APP, TIME_SANDBOX_CALLED_SYSTEM_SERVER); - loadSdk(); + loadSdk(SDK_NAME); mService.unloadSdk(TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER); mSdkSandboxService.sendUnloadSdkSuccess(); @@ -1917,7 +2031,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SANDBOX_RECEIVED_CALL_FROM_SYSTEM_SERVER - TIME_SYSTEM_SERVER_CALLED_SANDBOX), /*success=*/ true, - SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX)); + SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_TO_SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1930,7 +2045,8 @@ public class SdkSandboxManagerServiceUnitTest { - (TIME_SDK_CALL_COMPLETED - TIME_SANDBOX_CALLED_SDK)), /*success=*/ true, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SANDBOX, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1939,7 +2055,8 @@ public class SdkSandboxManagerServiceUnitTest { SdkSandboxStatsLog.SANDBOX_API_CALLED__METHOD__UNLOAD_SDK, (int) (TIME_SDK_CALL_COMPLETED - TIME_SANDBOX_CALLED_SDK), /*success=*/ true, - SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__SDK, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1950,7 +2067,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SANDBOX_CALLED_SYSTEM_SERVER - TIME_SANDBOX_CALLED_SYSTEM_SERVER), /*success=*/ true, - SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER)); + SANDBOX_API_CALLED__STAGE__SANDBOX_TO_SYSTEM_SERVER, + mClientAppUid)); ExtendedMockito.verify( () -> @@ -1961,7 +2079,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_CALLED_APP - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_SANDBOX), /*success=*/ true, - SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_SANDBOX_TO_APP)); + SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_SANDBOX_TO_APP, + mClientAppUid)); } @Test @@ -1985,8 +2104,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test @@ -2013,7 +2132,8 @@ public class SdkSandboxManagerServiceUnitTest { - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } @Test @@ -2045,8 +2165,8 @@ public class SdkSandboxManagerServiceUnitTest { (TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP - TIME_APP_CALLED_SYSTEM_SERVER), /*success=*/ true, - SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER)); + SdkSandboxStatsLog.SANDBOX_API_CALLED__STAGE__APP_TO_SYSTEM_SERVER, + mClientAppUid)); } @Test @@ -2081,7 +2201,8 @@ public class SdkSandboxManagerServiceUnitTest { - TIME_SYSTEM_SERVER_RECEIVED_CALL_FROM_APP), /*success=*/ true, SdkSandboxStatsLog - .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX)); + .SANDBOX_API_CALLED__STAGE__SYSTEM_SERVER_APP_TO_SANDBOX, + mClientAppUid)); } private SandboxLatencyInfo getFakedSandboxLatencies() { @@ -2096,12 +2217,12 @@ public class SdkSandboxManagerServiceUnitTest { return sandboxLatencyInfo; } - private void loadSdk() throws RemoteException { + private void loadSdk(String sdkName) throws RemoteException { disableNetworkPermissionChecks(); disableForegroundCheck(); FakeLoadSdkCallbackBinder callback = new FakeLoadSdkCallbackBinder(); mService.loadSdk( - TEST_PACKAGE, SDK_NAME, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); + TEST_PACKAGE, sdkName, TIME_APP_CALLED_SYSTEM_SERVER, new Bundle(), callback); mSdkSandboxService.sendLoadCodeSuccessful(); assertThat(callback.isLoadSdkSuccessful()).isTrue(); } @@ -2171,10 +2292,11 @@ public class SdkSandboxManagerServiceUnitTest { private ILoadSdkInSandboxCallback mLoadSdkInSandboxCallback; private final ISdkSandboxManagerToSdkSandboxCallback mManagerToSdkCallback; private IRequestSurfacePackageFromSdkCallback mRequestSurfacePackageFromSdkCallback = null; - private ISdkToServiceCallback mSdkToServiceCallback; private IUnloadSdkCallback mUnloadSdkCallback = null; private boolean mSurfacePackageRequested = false; + private int mInitializationCount = 0; + boolean mIsDisabledResponse = false; private SharedPreferencesUpdate mLastSyncUpdate = null; @@ -2184,9 +2306,13 @@ public class SdkSandboxManagerServiceUnitTest { } @Override + public void initialize(ISdkToServiceCallback sdkToServiceCallback) { + mInitializationCount++; + } + + @Override public void loadSdk( String callingPackageName, - IBinder codeToken, ApplicationInfo info, String sdkName, String sdkProviderClass, @@ -2194,15 +2320,13 @@ public class SdkSandboxManagerServiceUnitTest { String deDataDir, Bundle params, ILoadSdkInSandboxCallback callback, - SandboxLatencyInfo sandboxLatencyInfo, - ISdkToServiceCallback sdkToServiceCallback) { + SandboxLatencyInfo sandboxLatencyInfo) { mLoadSdkInSandboxCallback = callback; - mSdkToServiceCallback = sdkToServiceCallback; } @Override public void unloadSdk( - IBinder sdkToken, + String sdkName, IUnloadSdkCallback callback, SandboxLatencyInfo sandboxLatencyInfo) { mUnloadSdkCallback = callback; @@ -2232,12 +2356,11 @@ public class SdkSandboxManagerServiceUnitTest { return mLastSyncUpdate; } + int getInitializationCount() { + return mInitializationCount; + } + void sendLoadCodeSuccessful() throws RemoteException { - // Whenever loadSdk has been called successfully, the callback should have been - // instantiated. - Objects.requireNonNull( - mSdkToServiceCallback, - "mSdkToServiceCallback should have been passed when loadSdk succeeded"); mLoadSdkInSandboxCallback.onLoadSdkSuccess( new SandboxedSdk(new Binder()), mManagerToSdkCallback, |