• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2015 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #include <android-base/file.h>
18  
19  #include "oatdump_test.h"
20  
21  namespace art {
22  
23  INSTANTIATE_TEST_SUITE_P(DynamicOrStatic,
24                           OatDumpTest,
25                           testing::Values(Flavor::kDynamic, Flavor::kStatic));
26  
27  // Disable tests on arm and arm64 as they are taking too long to run. b/27824283.
28  #define TEST_DISABLED_FOR_ARM_AND_ARM64() \
29    TEST_DISABLED_FOR_ARM();                \
30    TEST_DISABLED_FOR_ARM64();
31  
TEST_P(OatDumpTest,TestNoDumpVmap)32  TEST_P(OatDumpTest, TestNoDumpVmap) {
33    TEST_DISABLED_FOR_RISCV64();
34    TEST_DISABLED_FOR_ARM_AND_ARM64();
35    // TODO(b/334200225): Temporarily disable this test case for x86 and x86_64
36    // till the disassembler issue is fixed.
37    TEST_DISABLED_FOR_X86();
38    TEST_DISABLED_FOR_X86_64();
39    std::string error_msg;
40    ASSERT_TRUE(Exec(GetParam(),
41                     kArgImage | kArgBcp | kArgIsa,
42                     {"--no-dump:vmap"},
43                     kExpectImage | kExpectOat | kExpectCode));
44  }
45  
TEST_P(OatDumpTest,TestNoDisassemble)46  TEST_P(OatDumpTest, TestNoDisassemble) {
47    TEST_DISABLED_FOR_RISCV64();
48    TEST_DISABLED_FOR_ARM_AND_ARM64();
49    std::string error_msg;
50    ASSERT_TRUE(Exec(GetParam(),
51                     kArgImage | kArgBcp | kArgIsa,
52                     {"--no-disassemble"},
53                     kExpectImage | kExpectOat | kExpectCode));
54  }
55  
TEST_P(OatDumpTest,TestListClasses)56  TEST_P(OatDumpTest, TestListClasses) {
57    TEST_DISABLED_FOR_RISCV64();
58    TEST_DISABLED_FOR_ARM_AND_ARM64();
59    std::string error_msg;
60    ASSERT_TRUE(Exec(
61        GetParam(), kArgImage | kArgBcp | kArgIsa, {"--list-classes"}, kExpectImage | kExpectOat));
62  }
63  
TEST_P(OatDumpTest,TestListMethods)64  TEST_P(OatDumpTest, TestListMethods) {
65    TEST_DISABLED_FOR_RISCV64();
66    TEST_DISABLED_FOR_ARM_AND_ARM64();
67    std::string error_msg;
68    ASSERT_TRUE(Exec(
69        GetParam(), kArgImage | kArgBcp | kArgIsa, {"--list-methods"}, kExpectImage | kExpectOat));
70  }
71  
TEST_P(OatDumpTest,TestSymbolize)72  TEST_P(OatDumpTest, TestSymbolize) {
73    if (GetParam() == Flavor::kDynamic) {
74      TEST_DISABLED_FOR_TARGET();  // Can not write files inside the apex directory.
75    } else {
76      TEST_DISABLED_FOR_RISCV64();
77      TEST_DISABLED_FOR_ARM_AND_ARM64();
78    }
79    std::string error_msg;
80    ASSERT_TRUE(Exec(GetParam(), kArgSymbolize, {}, /*expects=*/0));
81  }
82  
TEST_P(OatDumpTest,TestExportDex)83  TEST_P(OatDumpTest, TestExportDex) {
84    if (GetParam() == Flavor::kStatic) {
85      TEST_DISABLED_FOR_RISCV64();
86      TEST_DISABLED_FOR_ARM_AND_ARM64();
87    }
88    std::string error_msg;
89    ASSERT_TRUE(GenerateAppOdexFile(GetParam()));
90    ASSERT_TRUE(Exec(GetParam(), kArgOatApp, {"--export-dex-to=" + tmp_dir_}, kExpectOat));
91    if (GetParam() == Flavor::kDynamic) {
92      const std::string dex_location =
93          tmp_dir_ + "/" + android::base::Basename(GetTestDexFileName(GetAppBaseName().c_str())) +
94          "_export.dex";
95      const std::string dexdump = GetExecutableFilePath("dexdump",
96                                                        /*is_debug=*/false,
97                                                        /*is_static=*/false,
98                                                        /*bitness=*/false);
99      std::string output;
100      auto post_fork_fn = []() { return true; };
101      ForkAndExecResult res = ForkAndExec({dexdump, "-d", dex_location}, post_fork_fn, &output);
102      ASSERT_TRUE(res.StandardSuccess());
103    }
104  }
105  
TEST_P(OatDumpTest,TestMethodAndOffsetOnly)106  TEST_P(OatDumpTest, TestMethodAndOffsetOnly) {
107    TEST_DISABLED_FOR_RISCV64();
108    TEST_DISABLED_FOR_ARM_AND_ARM64();
109    std::string error_msg;
110    ASSERT_TRUE(Exec(GetParam(),
111                     kArgOatBcp | kArgDexBcp | kArgMethodAndOffsetAsJson,
112                     {},
113                     kExpectMethodAndOffsetAsJson));
114  }
115  
116  }  // namespace art
117