diff options
Diffstat (limited to 'oatdump/oatdump_app_test.cc')
-rw-r--r-- | oatdump/oatdump_app_test.cc | 142 |
1 files changed, 137 insertions, 5 deletions
diff --git a/oatdump/oatdump_app_test.cc b/oatdump/oatdump_app_test.cc index 14af024db1..03b43cef11 100644 --- a/oatdump/oatdump_app_test.cc +++ b/oatdump/oatdump_app_test.cc @@ -18,11 +18,78 @@ namespace art { -TEST_P(OatDumpTest, TestDumpOatWithBootImage) { +// Oat file compiled with a boot image. oatdump invoked with a boot image. +TEST_P(OatDumpTest, TestDumpOatWithRuntimeWithBootImage) { TEST_DISABLED_FOR_RISCV64(); ASSERT_TRUE(GenerateAppOdexFile(GetParam())); + ASSERT_TRUE(Exec(GetParam(), + kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, + {}, + kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); +} + +// Oat file compiled without a boot image. oatdump invoked without a boot image. +TEST_P(OatDumpTest, TestDumpOatWithRuntimeWithNoBootImage) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_FOR_DEBUG_BUILD(); // DCHECK failed. + ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {"--boot-image=/nonx/boot.art"})); + ASSERT_TRUE(Exec(GetParam(), + kArgOatApp | kArgBcp | kArgIsa, + {"--boot-image=/nonx/boot.art"}, + kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); +} + +// Dex code cannot be found in the vdex file, and no --dex-file is specified. Dump header only. +TEST_P(OatDumpTest, TestDumpOatTryWithRuntimeDexNotFound) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE( + GenerateAppOdexFile(GetParam(), {"--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); + ASSERT_TRUE(Exec(GetParam(), kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, {}, kExpectOat)); +} + +// Dex code cannot be found in the vdex file, but can be found in the specified dex file. +TEST_P(OatDumpTest, TestDumpOatWithRuntimeDexSpecified) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE( + GenerateAppOdexFile(GetParam(), {"--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); + ASSERT_TRUE(Exec(GetParam(), + kArgOatApp | kArgDexApp | kArgBootImage | kArgBcp | kArgIsa, + {}, + kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); +} + +// Oat file compiled with a boot image. oatdump invoked without a boot image. +TEST_P(OatDumpTest, TestDumpOatWithoutRuntimeBcpMismatch) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE(GenerateAppOdexFile(GetParam())); + ASSERT_TRUE(Exec(GetParam(), + kArgOatApp | kArgBcp | kArgIsa, + {"--boot-image=/nonx/boot.art"}, + kExpectOat | kExpectCode | kExpectBssOffsetsForBcp)); +} + +// Bootclasspath not specified. +TEST_P(OatDumpTest, TestDumpOatWithoutRuntimeNoBcp) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE(GenerateAppOdexFile(GetParam())); + ASSERT_TRUE(Exec(GetParam(), kArgOatApp, {}, kExpectOat | kExpectCode | kExpectBssOffsetsForBcp)); +} + +// Dex code cannot be found in the vdex file, and no --dex-file is specified. Dump header only. +TEST_P(OatDumpTest, TestDumpOatWithoutRuntimeDexNotFound) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE( + GenerateAppOdexFile(GetParam(), {"--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); + ASSERT_TRUE(Exec(GetParam(), kArgOatApp, {}, kExpectOat)); +} + +// Dex code cannot be found in the vdex file, but can be found in the specified dex file. +TEST_P(OatDumpTest, TestDumpOatWithoutRuntimeDexSpecified) { + TEST_DISABLED_FOR_RISCV64(); + ASSERT_TRUE( + GenerateAppOdexFile(GetParam(), {"--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); ASSERT_TRUE(Exec( - GetParam(), kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, {}, kExpectOat | kExpectCode)); + GetParam(), kArgOatApp | kArgDexApp, {}, kExpectOat | kExpectCode | kExpectBssOffsetsForBcp)); } TEST_P(OatDumpTest, TestDumpAppImageWithBootImage) { @@ -31,9 +98,21 @@ TEST_P(OatDumpTest, TestDumpAppImageWithBootImage) { const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {app_image_arg})); ASSERT_TRUE(Exec(GetParam(), + kArgAppImage | kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, + {}, + kExpectImage | kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); +} + +// Deprecated usage, but checked for compatibility. +TEST_P(OatDumpTest, TestDumpAppImageWithBootImageLegacy) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS(); // GC bug, b/126305867 + const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); + ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {app_image_arg})); + ASSERT_TRUE(Exec(GetParam(), kArgAppImage | kArgImage | kArgBcp | kArgIsa, {"--app-oat=" + GetAppOdexName()}, - kExpectImage | kExpectOat | kExpectCode)); + kExpectImage | kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); } TEST_P(OatDumpTest, TestDumpAppImageInvalidPath) { @@ -42,10 +121,63 @@ TEST_P(OatDumpTest, TestDumpAppImageInvalidPath) { const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {app_image_arg})); ASSERT_TRUE(Exec(GetParam(), - kArgImage | kArgBcp | kArgIsa, - {"--app-image=missing_app_image.art", "--app-oat=" + GetAppOdexName()}, + kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, + {"--app-image=missing_app_image.art"}, /*expects=*/0, /*expect_failure=*/true)); } +// The runtime can start, but the boot image check should fail. +TEST_P(OatDumpTest, TestDumpAppImageWithWrongBootImage) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS(); // GC bug, b/126305867 + const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); + ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {app_image_arg})); + ASSERT_TRUE(Exec(GetParam(), + kArgAppImage | kArgOatApp | kArgBcp | kArgIsa, + {"--boot-image=/nonx/boot.art"}, + /*expects=*/0, + /*expect_failure=*/true)); +} + +// Not possible. +TEST_P(OatDumpTest, TestDumpAppImageWithoutRuntime) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS(); // GC bug, b/126305867 + const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); + ASSERT_TRUE(GenerateAppOdexFile(GetParam(), {app_image_arg})); + ASSERT_TRUE(Exec(GetParam(), + kArgAppImage | kArgOatApp, + {}, + /*expects=*/0, + /*expect_failure=*/true)); +} + +// Dex code cannot be found in the vdex file, and no --dex-file is specified. Cannot dump app image. +TEST_P(OatDumpTest, TestDumpAppImageDexNotFound) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS(); // GC bug, b/126305867 + const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); + ASSERT_TRUE(GenerateAppOdexFile( + GetParam(), {app_image_arg, "--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); + ASSERT_TRUE(Exec(GetParam(), + kArgAppImage | kArgOatApp | kArgBootImage | kArgBcp | kArgIsa, + {}, + /*expects=*/0, + /*expect_failure=*/true)); +} + +// Dex code cannot be found in the vdex file, but can be found in the specified dex file. +TEST_P(OatDumpTest, TestDumpAppImageDexSpecified) { + TEST_DISABLED_FOR_RISCV64(); + TEST_DISABLED_WITHOUT_BAKER_READ_BARRIERS(); // GC bug, b/126305867 + const std::string app_image_arg = "--app-image-file=" + GetAppImageName(); + ASSERT_TRUE(GenerateAppOdexFile( + GetParam(), {app_image_arg, "--dex-location=/nonx/app.jar", "--copy-dex-files=false"})); + ASSERT_TRUE(Exec(GetParam(), + kArgAppImage | kArgOatApp | kArgDexApp | kArgBootImage | kArgBcp | kArgIsa, + {}, + kExpectImage | kExpectOat | kExpectCode | kExpectBssMappingsForBcp)); +} + } // namespace art |