From b72ae2a45e7c9622255cd71216189bcbd9023ebe Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Fri, 6 Dec 2024 18:52:50 +0000 Subject: Mock calls to Binder in DexUseManagerLocalTest Bug: 382080250 Change-Id: Ic9129d5ffe85c476ffa1fa45b07c870b77fae392 Test: ABTD (http://go/abtd/run/L04000030008181623) --- .../java/com/android/server/art/DexUseManagerLocal.java | 15 ++++++++++++--- .../com/android/server/art/DexUseManagerTest.java | 15 +++++++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java b/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java index 7eb5a69165..51b63ca758 100644 --- a/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java +++ b/libartservice/service/java/com/android/server/art/DexUseManagerLocal.java @@ -413,7 +413,7 @@ public class DexUseManagerLocal { // TODO(jiakaiz): Investigate whether it should also be considered as isolated process if // `Process.isSdkSandboxUid` returns true. - boolean isolatedProcess = Process.isIsolatedUid(Binder.getCallingUid()); + boolean isolatedProcess = Process.isIsolatedUid(mInjector.getCallingUid()); long lastUsedAtMs = mInjector.getCurrentTimeMillis(); for (var entry : classLoaderContextByDexContainerFile.entrySet()) { @@ -588,7 +588,7 @@ public class DexUseManagerLocal { @GuardedBy("mLock") private boolean isOwningPackageForSecondaryDexLocked( @NonNull PackageState pkgState, @NonNull String dexPath) { - UserHandle userHandle = Binder.getCallingUserHandle(); + UserHandle userHandle = mInjector.getCallingUserHandle(); List locations = mSecondaryDexLocationManager.getLocations(pkgState, userHandle); for (int i = 0; i < locations.size(); i++) { if (Utils.pathStartsWith(dexPath, locations.get(i))) { @@ -663,7 +663,7 @@ public class DexUseManagerLocal { .computeIfAbsent(owningPackageName, k -> new PackageDexUse()) .mSecondaryDexUseByDexFile.computeIfAbsent( dexPath, k -> new SecondaryDexUse()); - secondaryDexUse.mUserHandle = Binder.getCallingUserHandle(); + secondaryDexUse.mUserHandle = mInjector.getCallingUserHandle(); SecondaryDexUseRecord record = secondaryDexUse.mRecordByLoader.computeIfAbsent( DexLoader.create(loadingPackageName, isolatedProcess), k -> new SecondaryDexUseRecord()); @@ -1391,5 +1391,14 @@ public class DexUseManagerLocal { public ArtManagerLocal getArtManagerLocal() { return Objects.requireNonNull(LocalManagerRegistry.getManager(ArtManagerLocal.class)); } + + @NonNull + public UserHandle getCallingUserHandle() { + return Binder.getCallingUserHandle(); + } + + public int getCallingUid() { + return Binder.getCallingUid(); + } } } diff --git a/libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java b/libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java index 95d111774d..3ea3509b82 100644 --- a/libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java +++ b/libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java @@ -90,7 +90,7 @@ public class DexUseManagerTest { public StaticMockitoRule mockitoRule = new StaticMockitoRule( SystemProperties.class, Constants.class, Process.class, ArtJni.class); - private final UserHandle mUserHandle = Binder.getCallingUserHandle(); + private final UserHandle mUserHandle = UserHandle.of(1); /** * The default value of `fileVisibility` returned by `getSecondaryDexInfo`. The value doesn't @@ -155,12 +155,12 @@ public class DexUseManagerTest { .thenReturn(mock(Intent.class)); mCeDir = Environment - .getDataCePackageDirectoryForUser(StorageManager.UUID_DEFAULT, - Binder.getCallingUserHandle(), OWNING_PKG_NAME) + .getDataCePackageDirectoryForUser( + StorageManager.UUID_DEFAULT, mUserHandle, OWNING_PKG_NAME) .toString(); mDeDir = Environment - .getDataDePackageDirectoryForUser(StorageManager.UUID_DEFAULT, - Binder.getCallingUserHandle(), OWNING_PKG_NAME) + .getDataDePackageDirectoryForUser( + StorageManager.UUID_DEFAULT, mUserHandle, OWNING_PKG_NAME) .toString(); mMockClock = new MockClock(); @@ -185,6 +185,8 @@ public class DexUseManagerTest { lenient().when(mInjector.isPreReboot()).thenReturn(false); lenient().when(mInjector.getArtManagerLocal()).thenReturn(mArtManagerLocal); lenient().when(mInjector.getPackageManagerLocal()).thenReturn(mPackageManagerLocal); + lenient().when(mInjector.getCallingUserHandle()).thenReturn(mUserHandle); + lenient().when(mInjector.getCallingUid()).thenReturn(110001); mDexUseManager = new DexUseManagerLocal(mInjector); mDexUseManager.systemReady(); @@ -793,7 +795,7 @@ public class DexUseManagerTest { assertThat(textproto).isEqualTo("package_dex_use {\n" + " owning_package_name: \"com.example.owningpackage\"\n" + " secondary_dex_use {\n" - + " dex_file: \"/data/user/0/com.example.owningpackage/bar.apk\"\n" + + " dex_file: \"/data/user/1/com.example.owningpackage/bar.apk\"\n" + " record {\n" + " abi_name: \"arm64-v8a\"\n" + " class_loader_context: \"CLC\"\n" @@ -801,6 +803,7 @@ public class DexUseManagerTest { + " loading_package_name: \"com.example.owningpackage\"\n" + " }\n" + " user_id {\n" + + " value: 1\n" + " }\n" + " }\n" + "}"); -- cgit v1.2.3-59-g8ed1b