diff options
author | 2023-12-01 14:29:04 +0000 | |
---|---|---|
committer | 2023-12-01 16:43:02 +0000 | |
commit | f51e433b5d32cb83eb2ee302544ecf67a10525b9 (patch) | |
tree | fa7805622038a6d27e199154b75aa383fe81a5ae | |
parent | 87f2fc441d91315de50d4cbab4452c3b51020402 (diff) |
Fix NullPointerException in ArtManagerLocal.onBoot.
Map.of doesn't allow null values.
Bug: 314092832
Bug: 242170869
Test: atest ArtServiceTests
Change-Id: I1b0aba676078effadc3ba44e0837121f46881ee0
-rw-r--r-- | libartservice/service/java/com/android/server/art/ArtManagerLocal.java | 2 | ||||
-rw-r--r-- | libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java index aa9511b274..da081df258 100644 --- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java +++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java @@ -890,7 +890,7 @@ public final class ArtManagerLocal { @Nullable Consumer<OperationProgress> progressCallback) { try (var snapshot = mInjector.getPackageManagerLocal().withFilteredSnapshot()) { dexoptPackages(snapshot, bootReason, new CancellationSignal(), progressCallbackExecutor, - Map.of(ArtFlags.PASS_MAIN, progressCallback)); + progressCallback != null ? Map.of(ArtFlags.PASS_MAIN, progressCallback) : null); } } diff --git a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java index dba51366e8..425aed4aa9 100644 --- a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java +++ b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java @@ -93,6 +93,7 @@ import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.Executor; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -997,6 +998,31 @@ public class ArtManagerLocalTest { } @Test + public void testOnBoot() throws Exception { + var progressCallbackExecutor = mock(Executor.class); + var progressCallback = mock(Consumer.class); + + when(mDexoptHelper.dexopt(any(), any(), + argThat(params -> params.getReason().equals(ReasonMapping.REASON_FIRST_BOOT)), + any(), any(), same(progressCallbackExecutor), same(progressCallback))) + .thenReturn(DexoptResult.create()); + + mArtManagerLocal.onBoot( + ReasonMapping.REASON_FIRST_BOOT, progressCallbackExecutor, progressCallback); + } + + @Test + public void testOnBootNoProgressCallback() throws Exception { + when(mDexoptHelper.dexopt(any(), any(), + argThat(params -> params.getReason().equals(ReasonMapping.REASON_FIRST_BOOT)), + any(), any(), isNull(), isNull())) + .thenReturn(DexoptResult.create()); + + mArtManagerLocal.onBoot(ReasonMapping.REASON_FIRST_BOOT, + null /* progressCallbackExecutor */, null /* progressCallback */); + } + + @Test public void testCleanup() throws Exception { // It should keep all artifacts, but not runtime images. doReturn(createGetDexoptStatusResult("speed-profile", "bg-dexopt", "location")) |