summaryrefslogtreecommitdiff
path: root/oatdump/oatdump_app_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'oatdump/oatdump_app_test.cc')
-rw-r--r--oatdump/oatdump_app_test.cc142
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