summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/apex/Android.bp110
-rwxr-xr-xbuild/apex/art_apex_test.py332
-rw-r--r--build/apex/com.android.runtime.testing.pk8bin0 -> 2375 bytes
-rw-r--r--build/apex/com.android.runtime.testing.x509.pem34
-rwxr-xr-xbuild/apex/runtests.sh6
-rw-r--r--build/art.go4
-rw-r--r--libdexfile/Android.bp3
-rw-r--r--test/Android.bp12
8 files changed, 469 insertions, 32 deletions
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 529662608e..299456b158 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -188,13 +188,18 @@ apex_key {
}
android_app_certificate {
+ name: "com.android.runtime.release.certificate",
+ certificate: "com.android.runtime.release",
+}
+
+android_app_certificate {
name: "com.android.runtime.debug.certificate",
certificate: "com.android.runtime.debug",
}
android_app_certificate {
- name: "com.android.runtime.release.certificate",
- certificate: "com.android.runtime.release",
+ name: "com.android.runtime.testing.certificate",
+ certificate: "com.android.runtime.testing",
}
prebuilt_etc {
@@ -241,20 +246,9 @@ apex_defaults {
required: ["art_apex_boot_integrity"],
}
-// Release version of the Runtime APEX module (not containing debug
-// variants nor tools), included in user builds. Also used for
-// storage-constrained devices in userdebug and eng builds.
-apex {
- name: "com.android.runtime.release",
- defaults: ["com.android.runtime-defaults"],
- certificate: ":com.android.runtime.release.certificate",
-}
-
-// "Debug" version of the Runtime APEX module (containing both release and
-// debug variants, as well as additional tools), included in userdebug and
-// eng build.
-apex {
- name: "com.android.runtime.debug",
+// Default values shared by (device) Debug and Testing Runtime APEXes.
+apex_defaults {
+ name: "com.android.runtime-dev-defaults",
defaults: ["com.android.runtime-defaults"],
native_shared_libs: art_runtime_debug_native_shared_libs +
libcore_debug_native_shared_libs,
@@ -271,15 +265,67 @@ apex {
art_tools_debug_device_only_binaries,
},
},
+}
+
+// Release version of the Runtime APEX module (not containing debug
+// variants nor tools), included in user builds. Also used for
+// storage-constrained devices in userdebug and eng builds.
+apex {
+ name: "com.android.runtime.release",
+ defaults: ["com.android.runtime-defaults"],
+ certificate: ":com.android.runtime.release.certificate",
+}
+
+// "Debug" version of the Runtime APEX module (containing both release and
+// debug variants, as well as additional tools), included in userdebug and
+// eng build.
+apex {
+ name: "com.android.runtime.debug",
+ defaults: ["com.android.runtime-dev-defaults"],
certificate: ":com.android.runtime.debug.certificate",
}
-// TODO: Do this better. art_apex will disable host builds when
+// ART gtests with dependencies on internal Runtime APEX libraries.
+art_gtests = [
+ "art_cmdline_tests",
+ "art_compiler_tests",
+ "art_dex2oat_tests",
+ "art_dexanalyze_tests",
+ "art_dexdiag_tests",
+ "art_dexdump_tests",
+ "art_dexlayout_tests",
+ "art_dexlist_tests",
+ "art_dexoptanalyzer_tests",
+ "art_imgdiag_tests",
+ "art_libartbase_tests",
+ "art_libartpalette_tests",
+ "art_libdexfile_tests",
+ "art_libdexfile_support_tests",
+ "art_libprofile_tests",
+ "art_oatdump_tests",
+ "art_profman_tests",
+ "art_runtime_compiler_tests",
+ "art_runtime_tests",
+ "art_sigchain_tests",
+]
+
+// "Testing" version of the Runtime APEX module (containing both release
+// and debug variants, additional tools, and ART gtests), for testing
+// purposes only.
+apex_test {
+ name: "com.android.runtime.testing",
+ defaults: ["com.android.runtime-dev-defaults"],
+ file_contexts: "com.android.runtime.debug",
+ certificate: ":com.android.runtime.testing.certificate",
+ tests: art_gtests,
+}
+
+// TODO: Do this better. art_apex_test_host will disable host builds when
// HOST_PREFER_32_BIT is set. We cannot simply use com.android.runtime.debug
// because binaries have different multilib classes and 'multilib: {}' isn't
// supported by target: { ... }.
// See b/120617876 for more information.
-art_apex_test {
+art_apex_test_host {
name: "com.android.runtime.host",
compile_multilib: "both",
payload_type: "zip",
@@ -396,6 +442,34 @@ cc_prebuilt_binary {
},
}
+genrule {
+ name: "art-check-testing-apex-gen",
+ srcs: [":com.android.runtime.testing"],
+ tools: [
+ "art-apex-tester",
+ "debugfs",
+ ],
+ cmd: "$(location art-apex-tester)" +
+ " --debugfs $(location debugfs)" +
+ " --tmpdir $(genDir)" +
+ " --testing" +
+ " $(in)" +
+ " && touch $(out)",
+ out: ["art-check-testing-apex-gen.dummy"],
+}
+
+cc_prebuilt_binary {
+ name: "art-check-testing-apex-gen-fakebin",
+ srcs: [":art-check-testing-apex-gen"],
+ host_supported: true,
+ device_supported: false,
+ target: {
+ darwin: {
+ enabled: false, // No python3.
+ },
+ },
+}
+
// Pre-install scripts.
sh_binary {
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 3bcf7c68de..86acfa6edd 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -26,6 +26,14 @@ import zipfile
logging.basicConfig(format='%(message)s')
+# Architectures supported by APEX packages.
+archs = ["arm", "arm64", "x86", "x86_64"]
+# Directory containing ART tests within a Runtime APEX (if the package includes
+# any). ART test executables are installed in `bin/art/<arch>`. Segregating
+# tests by architecture is useful on devices supporting more than one
+# architecture, as it permits testing all of them using a single Runtime APEX
+# package.
+art_test_dir = 'bin/test'
class FSObject:
def __init__(self, name, is_dir, is_exec, is_symlink, size):
@@ -270,6 +278,28 @@ class Checker:
self.fail('%s is not a symlink', path)
self._expected_file_globs.add(path)
+ def check_art_test_executable(self, filename):
+ # This is a simplistic implementation, as we declare victory as soon as the
+ # test binary is found for one of the supported (not built) architectures.
+ # Ideally we would propagate the built architectures from the build system
+ # to this script and require test binaries for all of them to be present.
+ # Note that this behavior is not specific to this method: there are other
+ # places in this script where we rely on this simplified strategy.
+ #
+ # TODO: Implement the suggestion above (here and in other places in this
+ # script).
+ test_found = False
+ for arch in archs:
+ test_path = '%s/%s/%s' % (art_test_dir, arch, filename)
+ test_is_file, _ = self.is_file(test_path)
+ if test_is_file:
+ test_found = True
+ self._expected_file_globs.add(test_path)
+ if not self._provider.get(test_path).is_exec:
+ self.fail('%s is not executable', test_path)
+ if not test_found:
+ self.fail('ART test binary missing: %s', filename)
+
def check_single_library(self, filename):
lib_path = 'lib/%s' % filename
lib64_path = 'lib64/%s' % filename
@@ -288,6 +318,10 @@ class Checker:
def ignore_path(self, path_glob):
self._expected_file_globs.add(path_glob)
+ def check_optional_art_test_executable(self, filename):
+ for arch in archs:
+ self.ignore_path('%s/%s/%s' % (art_test_dir, arch, filename))
+
def check_no_superfluous_files(self, dir_path):
paths = []
for name in sorted(self._provider.read_dir(dir_path).keys()):
@@ -616,6 +650,267 @@ class DebugTargetChecker:
self._checker.check_prefer64_library('libprocinfo')
+class TestingTargetChecker:
+ def __init__(self, checker):
+ self._checker = checker
+
+ def __str__(self):
+ return 'Testing (Target) Checker'
+
+ def run(self):
+ # Check cmdline tests.
+ self._checker.check_optional_art_test_executable('cmdline_parser_test')
+
+ # Check compiler tests.
+ self._checker.check_art_test_executable('atomic_dex_ref_map_test')
+ self._checker.check_art_test_executable('bounds_check_elimination_test')
+ self._checker.check_art_test_executable('codegen_test')
+ self._checker.check_art_test_executable('compiled_method_storage_test')
+ self._checker.check_art_test_executable('data_type_test')
+ self._checker.check_art_test_executable('dedupe_set_test')
+ self._checker.check_art_test_executable('dominator_test')
+ self._checker.check_art_test_executable('dwarf_test')
+ self._checker.check_art_test_executable('exception_test')
+ self._checker.check_art_test_executable('find_loops_test')
+ self._checker.check_art_test_executable('graph_checker_test')
+ self._checker.check_art_test_executable('graph_test')
+ self._checker.check_art_test_executable('gvn_test')
+ self._checker.check_art_test_executable('induction_var_analysis_test')
+ self._checker.check_art_test_executable('induction_var_range_test')
+ self._checker.check_art_test_executable('jni_cfi_test')
+ self._checker.check_art_test_executable('jni_compiler_test')
+ self._checker.check_art_test_executable('licm_test')
+ self._checker.check_art_test_executable('linker_patch_test')
+ self._checker.check_art_test_executable('live_interval_test')
+ self._checker.check_art_test_executable('load_store_analysis_test')
+ self._checker.check_art_test_executable('loop_optimization_test')
+ self._checker.check_art_test_executable('nodes_test')
+ self._checker.check_art_test_executable('nodes_vector_test')
+ self._checker.check_art_test_executable('optimizing_cfi_test')
+ self._checker.check_art_test_executable('output_stream_test')
+ self._checker.check_art_test_executable('parallel_move_test')
+ self._checker.check_art_test_executable('pretty_printer_test')
+ self._checker.check_art_test_executable('reference_type_propagation_test')
+ self._checker.check_art_test_executable('scheduler_test')
+ self._checker.check_art_test_executable('select_generator_test')
+ self._checker.check_art_test_executable('side_effects_test')
+ self._checker.check_art_test_executable('src_map_elem_test')
+ self._checker.check_art_test_executable('ssa_liveness_analysis_test')
+ self._checker.check_art_test_executable('ssa_test')
+ self._checker.check_art_test_executable('stack_map_test')
+ self._checker.check_art_test_executable('superblock_cloner_test')
+ self._checker.check_art_test_executable('suspend_check_test')
+ self._checker.check_art_test_executable('swap_space_test')
+ # These tests depend on a specific code generator and are conditionally included.
+ self._checker.check_optional_art_test_executable('constant_folding_test')
+ self._checker.check_optional_art_test_executable('dead_code_elimination_test')
+ self._checker.check_optional_art_test_executable('linearize_test')
+ self._checker.check_optional_art_test_executable('live_ranges_test')
+ self._checker.check_optional_art_test_executable('liveness_test')
+ self._checker.check_optional_art_test_executable('managed_register_arm64_test')
+ self._checker.check_optional_art_test_executable('managed_register_arm_test')
+ self._checker.check_optional_art_test_executable('managed_register_mips64_test')
+ self._checker.check_optional_art_test_executable('managed_register_x86_64_test')
+ self._checker.check_optional_art_test_executable('managed_register_x86_test')
+ self._checker.check_optional_art_test_executable('register_allocator_test')
+
+ # Check dex2oat tests.
+ self._checker.check_art_test_executable('compiler_driver_test')
+ self._checker.check_art_test_executable('dex2oat_image_test')
+ self._checker.check_art_test_executable('dex2oat_test')
+ self._checker.check_art_test_executable('dex_to_dex_decompiler_test')
+ self._checker.check_art_test_executable('elf_writer_test')
+ self._checker.check_art_test_executable('image_test')
+ self._checker.check_art_test_executable('image_write_read_test')
+ self._checker.check_art_test_executable('index_bss_mapping_encoder_test')
+ self._checker.check_art_test_executable('multi_oat_relative_patcher_test')
+ self._checker.check_art_test_executable('oat_writer_test')
+ self._checker.check_art_test_executable('verifier_deps_test')
+ # These tests depend on a specific code generator and are conditionally included.
+ self._checker.check_optional_art_test_executable('relative_patcher_arm64_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_mips32r6_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_mips64_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_mips_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_thumb2_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_x86_64_test')
+ self._checker.check_optional_art_test_executable('relative_patcher_x86_test')
+
+ # Check dexanalyze tests.
+ self._checker.check_optional_art_test_executable('dexanalyze_test')
+
+ # Check dexdiag tests.
+ self._checker.check_optional_art_test_executable('dexdiag_test')
+
+ # Check dexdump tests.
+ self._checker.check_art_test_executable('dexdump_test')
+
+ # Check dexlayout tests.
+ self._checker.check_optional_art_test_executable('dexlayout_test')
+
+ # Check dexlist tests.
+ self._checker.check_art_test_executable('dexlist_test')
+
+ # Check dexoptanalyzer tests.
+ self._checker.check_art_test_executable('dexoptanalyzer_test')
+
+ # Check imgdiag tests.
+ self._checker.check_art_test_executable('imgdiag_test')
+
+ # Check libartbase tests.
+ self._checker.check_art_test_executable('arena_allocator_test')
+ self._checker.check_art_test_executable('bit_field_test')
+ self._checker.check_art_test_executable('bit_memory_region_test')
+ self._checker.check_art_test_executable('bit_string_test')
+ self._checker.check_art_test_executable('bit_struct_test')
+ self._checker.check_art_test_executable('bit_table_test')
+ self._checker.check_art_test_executable('bit_utils_test')
+ self._checker.check_art_test_executable('bit_vector_test')
+ self._checker.check_art_test_executable('fd_file_test')
+ self._checker.check_art_test_executable('file_utils_test')
+ self._checker.check_art_test_executable('hash_set_test')
+ self._checker.check_art_test_executable('hex_dump_test')
+ self._checker.check_art_test_executable('histogram_test')
+ self._checker.check_art_test_executable('indenter_test')
+ self._checker.check_art_test_executable('instruction_set_test')
+ self._checker.check_art_test_executable('intrusive_forward_list_test')
+ self._checker.check_art_test_executable('leb128_test')
+ self._checker.check_art_test_executable('logging_test')
+ self._checker.check_art_test_executable('mem_map_test')
+ self._checker.check_art_test_executable('membarrier_test')
+ self._checker.check_art_test_executable('memfd_test')
+ self._checker.check_art_test_executable('memory_region_test')
+ self._checker.check_art_test_executable('memory_type_table_test')
+ self._checker.check_art_test_executable('safe_copy_test')
+ self._checker.check_art_test_executable('scoped_flock_test')
+ self._checker.check_art_test_executable('time_utils_test')
+ self._checker.check_art_test_executable('transform_array_ref_test')
+ self._checker.check_art_test_executable('transform_iterator_test')
+ self._checker.check_art_test_executable('utils_test')
+ self._checker.check_art_test_executable('variant_map_test')
+ self._checker.check_art_test_executable('zip_archive_test')
+
+ # Check libartpalette tests.
+ self._checker.check_art_test_executable('palette_test')
+
+ # Check libdexfile tests.
+ self._checker.check_art_test_executable('art_dex_file_loader_test')
+ self._checker.check_art_test_executable('art_libdexfile_support_tests')
+ self._checker.check_art_test_executable('class_accessor_test')
+ self._checker.check_art_test_executable('code_item_accessors_test')
+ self._checker.check_art_test_executable('compact_dex_file_test')
+ self._checker.check_art_test_executable('compact_offset_table_test')
+ self._checker.check_art_test_executable('descriptors_names_test')
+ self._checker.check_art_test_executable('dex_file_loader_test')
+ self._checker.check_art_test_executable('dex_file_verifier_test')
+ self._checker.check_art_test_executable('dex_instruction_test')
+ self._checker.check_art_test_executable('primitive_test')
+ self._checker.check_art_test_executable('string_reference_test')
+ self._checker.check_art_test_executable('test_dex_file_builder_test')
+ self._checker.check_art_test_executable('type_lookup_table_test')
+ self._checker.check_art_test_executable('utf_test')
+
+ # Check libprofile tests.
+ self._checker.check_optional_art_test_executable('profile_boot_info_test')
+ self._checker.check_optional_art_test_executable('profile_compilation_info_test')
+
+ # Check oatdump tests.
+ self._checker.check_art_test_executable('oatdump_app_test')
+ self._checker.check_art_test_executable('oatdump_image_test')
+ self._checker.check_art_test_executable('oatdump_test')
+
+ # Check profman tests.
+ self._checker.check_art_test_executable('profile_assistant_test')
+
+ # Check runtime compiler tests.
+ self._checker.check_art_test_executable('module_exclusion_test')
+ self._checker.check_art_test_executable('reflection_test')
+
+ # Check runtime tests.
+ self._checker.check_art_test_executable('arch_test')
+ self._checker.check_art_test_executable('barrier_test')
+ self._checker.check_art_test_executable('card_table_test')
+ self._checker.check_art_test_executable('cha_test')
+ self._checker.check_art_test_executable('class_linker_test')
+ self._checker.check_art_test_executable('class_loader_context_test')
+ self._checker.check_art_test_executable('class_table_test')
+ self._checker.check_art_test_executable('compiler_filter_test')
+ self._checker.check_art_test_executable('dex_cache_test')
+ self._checker.check_art_test_executable('dlmalloc_space_random_test')
+ self._checker.check_art_test_executable('dlmalloc_space_static_test')
+ self._checker.check_art_test_executable('entrypoints_order_test')
+ self._checker.check_art_test_executable('exec_utils_test')
+ self._checker.check_art_test_executable('gtest_test')
+ self._checker.check_art_test_executable('handle_scope_test')
+ self._checker.check_art_test_executable('heap_test')
+ self._checker.check_art_test_executable('heap_verification_test')
+ self._checker.check_art_test_executable('hidden_api_test')
+ self._checker.check_art_test_executable('image_space_test')
+ self._checker.check_art_test_executable('immune_spaces_test')
+ self._checker.check_art_test_executable('imtable_test')
+ self._checker.check_art_test_executable('indirect_reference_table_test')
+ self._checker.check_art_test_executable('instruction_set_features_arm64_test')
+ self._checker.check_art_test_executable('instruction_set_features_arm_test')
+ self._checker.check_art_test_executable('instruction_set_features_mips64_test')
+ self._checker.check_art_test_executable('instruction_set_features_mips_test')
+ self._checker.check_art_test_executable('instruction_set_features_test')
+ self._checker.check_art_test_executable('instruction_set_features_x86_64_test')
+ self._checker.check_art_test_executable('instruction_set_features_x86_test')
+ self._checker.check_art_test_executable('instrumentation_test')
+ self._checker.check_art_test_executable('intern_table_test')
+ self._checker.check_art_test_executable('java_vm_ext_test')
+ self._checker.check_art_test_executable('jdwp_options_test')
+ self._checker.check_art_test_executable('jit_memory_region_test')
+ self._checker.check_art_test_executable('jni_internal_test')
+ self._checker.check_art_test_executable('large_object_space_test')
+ self._checker.check_art_test_executable('math_entrypoints_test')
+ self._checker.check_art_test_executable('memcmp16_test')
+ self._checker.check_art_test_executable('method_handles_test')
+ self._checker.check_art_test_executable('method_type_test')
+ self._checker.check_art_test_executable('method_verifier_test')
+ self._checker.check_art_test_executable('mod_union_table_test')
+ self._checker.check_art_test_executable('monitor_pool_test')
+ self._checker.check_art_test_executable('monitor_test')
+ self._checker.check_art_test_executable('mutex_test')
+ self._checker.check_art_test_executable('oat_file_assistant_test')
+ self._checker.check_art_test_executable('oat_file_test')
+ self._checker.check_art_test_executable('object_test')
+ self._checker.check_art_test_executable('parsed_options_test')
+ self._checker.check_art_test_executable('prebuilt_tools_test')
+ self._checker.check_art_test_executable('profiling_info_test')
+ self._checker.check_art_test_executable('proxy_test')
+ self._checker.check_art_test_executable('quick_trampoline_entrypoints_test')
+ self._checker.check_art_test_executable('reference_queue_test')
+ self._checker.check_art_test_executable('reference_table_test')
+ self._checker.check_art_test_executable('reg_type_test')
+ self._checker.check_art_test_executable('rosalloc_space_random_test')
+ self._checker.check_art_test_executable('rosalloc_space_static_test')
+ self._checker.check_art_test_executable('runtime_callbacks_test')
+ self._checker.check_art_test_executable('runtime_test')
+ self._checker.check_art_test_executable('safe_math_test')
+ self._checker.check_art_test_executable('space_bitmap_test')
+ self._checker.check_art_test_executable('space_create_test')
+ self._checker.check_art_test_executable('stub_test')
+ self._checker.check_art_test_executable('subtype_check_info_test')
+ self._checker.check_art_test_executable('subtype_check_test')
+ self._checker.check_art_test_executable('system_weak_test')
+ self._checker.check_art_test_executable('task_processor_test')
+ self._checker.check_art_test_executable('thread_pool_test')
+ self._checker.check_art_test_executable('timing_logger_test')
+ self._checker.check_art_test_executable('transaction_test')
+ self._checker.check_art_test_executable('two_runtimes_test')
+ self._checker.check_art_test_executable('unstarted_runtime_test')
+ self._checker.check_art_test_executable('var_handle_test')
+ self._checker.check_art_test_executable('vdex_file_test')
+
+ # Check sigchainlib tests.
+ self._checker.check_art_test_executable('sigchain_test')
+
+ # Check ART test (internal) libraries.
+ self._checker.check_native_library('libart-gtest')
+ self._checker.check_native_library('libartd-disassembler')
+ self._checker.check_native_library('libartd-simulator-container')
+
+
class NoSuperfluousBinariesChecker:
def __init__(self, checker):
self._checker = checker
@@ -642,6 +937,18 @@ class NoSuperfluousLibrariesChecker:
self._checker.check_no_superfluous_files('lib64/bionic')
+class NoSuperfluousArtTestsChecker:
+ def __init__(self, checker):
+ self._checker = checker
+
+ def __str__(self):
+ return 'No superfluous ART tests checker'
+
+ def run(self):
+ for arch in archs:
+ self._checker.check_no_superfluous_files('%s/%s' % (art_test_dir, arch))
+
+
class List:
def __init__(self, provider, print_size):
self._provider = provider
@@ -731,15 +1038,24 @@ def art_apex_test_main(test_args):
if test_args.tree and test_args.debug:
logging.error("Both of --tree and --debug set")
return 1
+ if test_args.tree and test_args.testing:
+ logging.error("Both of --tree and --testing set")
+ return 1
if test_args.list and test_args.debug:
logging.error("Both of --list and --debug set")
return 1
+ if test_args.list and test_args.testing:
+ logging.error("Both of --list and --testing set")
+ return 1
if test_args.list and test_args.tree:
logging.error("Both of --list and --tree set")
return 1
if test_args.size and not (test_args.list or test_args.tree):
logging.error("--size set but neither --list nor --tree set")
return 1
+ if test_args.host and test_args.testing:
+ logging.error("Both of --host and --testing set")
+ return 1
if not test_args.tmpdir:
logging.error("Need a tmpdir.")
return 1
@@ -800,13 +1116,16 @@ def art_apex_test_main(test_args):
checkers.append(ReleaseHostChecker(base_checker))
else:
checkers.append(ReleaseTargetChecker(base_checker))
- if test_args.debug:
+ if test_args.debug or test_args.testing:
checkers.append(DebugChecker(base_checker))
- if test_args.debug and not test_args.host:
- checkers.append(DebugTargetChecker(base_checker))
+ if not test_args.host:
+ checkers.append(DebugTargetChecker(base_checker))
+ if test_args.testing:
+ checkers.append(TestingTargetChecker(base_checker))
# These checkers must be last.
checkers.append(NoSuperfluousBinariesChecker(base_checker))
+ checkers.append(NoSuperfluousArtTestsChecker(base_checker))
if not test_args.host:
# We only care about superfluous libraries on target, where their absence
# can be vital to ensure they get picked up from the right package.
@@ -851,8 +1170,9 @@ def art_apex_test_default(test_parser):
# TODO: Add host support
configs = [
- {'name': 'com.android.runtime.release', 'debug': False, 'host': False},
- {'name': 'com.android.runtime.debug', 'debug': True, 'host': False},
+ {'name': 'com.android.runtime.release', 'debug': False, 'testing': False, 'host': False},
+ {'name': 'com.android.runtime.debug', 'debug': True, 'testing': False, 'host': False},
+ {'name': 'com.android.runtime.testing', 'debug': False, 'testing': True, 'host': False},
]
for config in configs:
@@ -864,6 +1184,7 @@ def art_apex_test_default(test_parser):
logging.error("Cannot find APEX %s. Please build it first.", test_args.apex)
continue
test_args.debug = config['debug']
+ test_args.testing = config['testing']
test_args.host = config['host']
failed = art_apex_test_main(test_args) != 0
@@ -881,6 +1202,7 @@ if __name__ == "__main__":
parser.add_argument('--flattened', help='Check as flattened (target) apex', action='store_true')
parser.add_argument('--debug', help='Check as debug apex', action='store_true')
+ parser.add_argument('--testing', help='Check as testing apex', action='store_true')
parser.add_argument('--list', help='List all files', action='store_true')
parser.add_argument('--tree', help='Print directory tree', action='store_true')
diff --git a/build/apex/com.android.runtime.testing.pk8 b/build/apex/com.android.runtime.testing.pk8
new file mode 100644
index 0000000000..c8f4b8def7
--- /dev/null
+++ b/build/apex/com.android.runtime.testing.pk8
Binary files differ
diff --git a/build/apex/com.android.runtime.testing.x509.pem b/build/apex/com.android.runtime.testing.x509.pem
new file mode 100644
index 0000000000..5a3f1ad4cb
--- /dev/null
+++ b/build/apex/com.android.runtime.testing.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2zCCA8OgAwIBAgIUG5O+NPtM0znZ8C7SF61kl380/5UwDQYJKoZIhvcNAQEL
+BQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
+DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB0FuZHJvaWQxEDAOBgNVBAsMB0FuZHJv
+aWQxHDAaBgNVBAMME2NvbS5hbmRyb2lkLnJ1bnRpbWUwIBcNMTkwNjI0MTQ1ODU4
+WhgPNDc1NzA1MjAxNDU4NThaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lk
+MRAwDgYDVQQLDAdBbmRyb2lkMRwwGgYDVQQDDBNjb20uYW5kcm9pZC5ydW50aW1l
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmsFd0kQMlAgKlXR/orLj
+d4LNFGuMZFd50WLcd9eg4WxYDo3aTDLePFYZha7uYEZ7slpsToorZ7odUfEE9ocs
+5QiMqawgo4zsAGDltPM86cQ5lVc8lWHVuLHlL9osJ8f6xV8Frka8HFRSh08Pqyui
+wA4bYLWRan6dxuWNb0k+sJh2wZLngBwbuh82MkMfqES7XAHXSU8jNUT87b/cLmss
+mrcTOrReT3zWgwtwmYbAHHuzs7pfXnoBV8If6q1ZdSSs70Fyf1bHg/MsCFTTHSke
+f6BXcQ9vegcD+hqBzDCil99jlwnOL3ptepsSqKIdvv6G2uRWDd2+4dUkXvDu8QaE
+2CnMUl1484vQVvV/jmxZisMcGaXaYIPRUKOS71zxNBU0gylSjaRm3Iq3YkodHeEQ
+1iQLRZRH2mSUt6pl9e3NnIO6khAGiXIyTotT0W1ZBxccR76QYi5zcvTtl8/2wQ7q
+XZ7IIuzbaoK4x7aEqDSuXBkaZYyxkg0dNru7SA3CZhillntLyKuDnlgh5ORGckfS
+LRh62VepRZjTbfuJ0N8KrpawcuxrNXM8SyH7OfMKsCpPMGZpvtzNEV2MrD7RJ5Zq
+0/D+kaBb2he9W0vLs7L+LZzsZ854/ZAFRT3GCXRFHPjKRNsI7uvTzIwXoNzXCo1S
+EN1ygTlSd1wue4yGfdjT1MkCAwEAAaNTMFEwHQYDVR0OBBYEFNLhVRSFFot/RXr1
+hSRQcN6ZNzn5MB8GA1UdIwQYMBaAFNLhVRSFFot/RXr1hSRQcN6ZNzn5MA8GA1Ud
+EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAG/iTsWjeCydmYYShTu3e6DY
+RBdPTLdLVzfCqavxzsIbJuvsxpsdj1glK1AsvU/49plhofu36IVL3BIoYsUzLw63
+K/6n1lPdHAN1LXz7tCz/cra7ZcOJP87h6Xw7+blYfvxP/EUwhz4m/GYca8+1Ddio
+okXO0MdNiOXE+Qmfp1iXTr2l1WtcC1sD7jlU/0FhR9DFAT/vuZcsz8EyUSRY24Er
+05/mBNc6ebPVnJ24YsxSLj/CVPf82mhUml10EOhwtqgpZh+mPdL8LIAcT5aHzEbZ
+t81p1G0DJSJDobXZ9/GH2wii8cF0nK40L+VGvK48W1KOlW6K+JNwx2AiWw0agtlF
+TzDkTdtdwuTea87MfyRyZYqL1bN/I5W2g00EiZ/a+d8FimSZhwa4G3APkMYL65oR
+dotNim84Kga6pjpGPoCDUhFgoIQh27wWOn3lmk+xjjesB01hvXQQC30jdxuJalWX
+YNjAfYDpa26KuVsuu8t3KznBYAAapIZw1kH789uYfJmBVoonlotctn22+qG+PUgv
+q7vu7zu9MPgHcd+Vq/MFsQxfSnHFBEx+i7DI89oIxAfJWUXk9by1JGCDFzkgiQrz
+Ec6KfigmU0qClGl05cHZnTKLRV0fKVZRKSamSAFnaGWGy/utz181nLiRjNXiuxS2
+LxyS0Pcs8JHQlScH1ECw
+-----END CERTIFICATE-----
diff --git a/build/apex/runtests.sh b/build/apex/runtests.sh
index abf007be4a..12398dca48 100755
--- a/build/apex/runtests.sh
+++ b/build/apex/runtests.sh
@@ -125,6 +125,7 @@ function fail_check {
apex_modules=(
"com.android.runtime.release"
"com.android.runtime.debug"
+ "com.android.runtime.testing"
"com.android.runtime.host"
)
@@ -163,7 +164,10 @@ for apex_module in ${apex_modules[@]}; do
apex_path="$ANDROID_PRODUCT_OUT/system/apex/${apex_module}.apex"
fi
art_apex_test_args="$art_apex_test_args --debugfs $ANDROID_HOST_OUT/bin/debugfs"
- [[ $apex_module = *.debug ]] && test_only_args="--debug"
+ case $apex_module in
+ (*.debug) test_only_args="--debug";;
+ (*.testing) test_only_args="--testing";;
+ esac
fi
say "APEX package path: $apex_path"
diff --git a/build/art.go b/build/art.go
index 14ba7d55a1..e6157b43fb 100644
--- a/build/art.go
+++ b/build/art.go
@@ -318,10 +318,10 @@ func init() {
// changes this to 'prefer32' on all host binaries. Since HOST_PREFER_32_BIT is
// only used for testing we can just disable the module.
// See b/120617876 for more information.
- android.RegisterModuleType("art_apex_test", artTestApexBundleFactory)
+ android.RegisterModuleType("art_apex_test_host", artHostTestApexBundleFactory)
}
-func artTestApexBundleFactory() android.Module {
+func artHostTestApexBundleFactory() android.Module {
module := apex.ApexBundleFactory( /*testApex*/ true)
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
if envTrue(ctx, "HOST_PREFER_32_BIT") {
diff --git a/libdexfile/Android.bp b/libdexfile/Android.bp
index 4e4c9ac00d..d8e614ee2a 100644
--- a/libdexfile/Android.bp
+++ b/libdexfile/Android.bp
@@ -356,6 +356,9 @@ cc_library {
// test-art-{host,target}-gtest-art_libdexfile_support_tests.
art_cc_test {
name: "art_libdexfile_support_tests",
+ defaults: [
+ "art_test_defaults",
+ ],
host_supported: true,
srcs: [
"external/dex_file_supp_test.cc",
diff --git a/test/Android.bp b/test/Android.bp
index 2254477dd1..81c0bc1878 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -19,22 +19,22 @@ art_cc_defaults {
host_supported: true,
target: {
android_arm: {
- relative_install_path: "art/arm",
+ relative_install_path: "test/arm",
},
android_arm64: {
- relative_install_path: "art/arm64",
+ relative_install_path: "test/arm64",
},
android_mips: {
- relative_install_path: "art/mips",
+ relative_install_path: "test/mips",
},
android_mips64: {
- relative_install_path: "art/mips64",
+ relative_install_path: "test/mips64",
},
android_x86: {
- relative_install_path: "art/x86",
+ relative_install_path: "test/x86",
},
android_x86_64: {
- relative_install_path: "art/x86_64",
+ relative_install_path: "test/x86_64",
},
darwin: {
enabled: false,