diff options
-rw-r--r-- | rules/apex/apex.bzl | 24 | ||||
-rw-r--r-- | rules/apex/apex_test.bzl | 60 | ||||
-rw-r--r-- | tests/apex/BUILD | 26 | ||||
-rw-r--r-- | tests/apex/com.android.adbd_backing.txt.golden | 1 | ||||
-rw-r--r-- | tests/apex/com.android.adbd_installed-files.txt.golden | 11 |
5 files changed, 119 insertions, 3 deletions
diff --git a/rules/apex/apex.bzl b/rules/apex/apex.bzl index 40733adc..a71229bc 100644 --- a/rules/apex/apex.bzl +++ b/rules/apex/apex.bzl @@ -40,6 +40,7 @@ ApexInfo = provider( "package_name": "APEX package name.", "backing_libs": "File containing libraries used by the APEX.", "symbols_used_by_apex": "Symbol list used by this APEX.", + "installed_files": "File containing all files installed by the APEX", }, ) @@ -90,7 +91,8 @@ def _create_file_mapping(ctx): backing_libs = [] for lib in file_mapping.values(): - backing_libs.append(lib.basename) + if lib.basename not in backing_libs: + backing_libs.append(lib.basename) backing_libs = sorted(backing_libs) # Handle prebuilts @@ -274,10 +276,24 @@ def _generate_apex_backing_file(ctx, backing_libs): backing_file = ctx.actions.declare_file(ctx.attr.name + "_backing.txt") ctx.actions.write( output = backing_file, - content = " ".join(backing_libs), + content = " ".join(backing_libs) + "\n", ) return backing_file +# Generate installed-files.txt which lists all installed files by the APEX. +def _generate_installed_files_list(ctx, file_mapping): + installed_files = ctx.actions.declare_file(ctx.attr.name + "-installed-files.txt") + command = [] + for device_path, bazel_file in file_mapping.items(): + command.append("echo $(stat -L -c %%s %s) ./%s" % (bazel_file.path, device_path)) + ctx.actions.run_shell( + inputs = file_mapping.values(), + outputs = [installed_files], + mnemonic = "GenerateApexInstalledFileList", + command = "(" + "; ".join(command) + ") | sort -nr > " + installed_files.path, + ) + return installed_files + # apexer - generate the APEX file. def _run_apexer(ctx, apex_toolchain): # Inputs @@ -409,6 +425,7 @@ def _run_apexer(ctx, apex_toolchain): provides_native_libs = provides_native_libs, backing_libs = _generate_apex_backing_file(ctx, backing_libs), symbols_used_by_apex = _generate_symbols_used_by_apex(ctx, apex_toolchain, staging_dir), + installed_files = _generate_installed_files_list(ctx, file_mapping), ) # Sign a file with signapk. @@ -521,9 +538,12 @@ def _apex_rule_impl(ctx): package_name = ctx.attr.package_name, backing_libs = apexer_outputs.backing_libs, symbols_used_by_apex = apexer_outputs.symbols_used_by_apex, + installed_files = apexer_outputs.installed_files, ), OutputGroupInfo( coverage_files = [apexer_outputs.symbols_used_by_apex], + backing_libs = depset([apexer_outputs.backing_libs]), + installed_files = depset([apexer_outputs.installed_files]), ), ] diff --git a/rules/apex/apex_test.bzl b/rules/apex/apex_test.bzl index 33e25a59..4d22b7a9 100644 --- a/rules/apex/apex_test.bzl +++ b/rules/apex/apex_test.bzl @@ -1407,7 +1407,64 @@ def _test_apex_backing_file(): apex_backing_file_test( name = test_name, target_under_test = name, - expected_content = "apex_backing_file_lib_cc.so libc++.so", + expected_content = "apex_backing_file_lib_cc.so libc++.so\n", + ) + + return test_name + +def _apex_installed_files_test(ctx): + env = analysistest.begin(ctx) + actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateApexInstalledFileList"] + asserts.true( + env, + len(actions) == 1, + "No GenerateApexInstalledFileList action found for creating <apex>-installed-files.txt file: %s" % actions, + ) + + asserts.equals( + env, + len(ctx.attr.expected_inputs), + len(actions[0].inputs.to_list()), + "Expected inputs length: %d, actual inputs length: %d" % (len(ctx.attr.expected_inputs), len(actions[0].inputs.to_list())), + ) + for file in actions[0].inputs.to_list(): + asserts.true( + env, + file.basename in ctx.attr.expected_inputs, + "Unexpected input: %s" % file.basename, + ) + asserts.equals(env, ctx.attr.expected_output, actions[0].outputs.to_list()[0].basename) + return analysistest.end(env) + +apex_installed_files_test = analysistest.make( + _apex_installed_files_test, + attrs = { + "expected_inputs": attr.string_list(), + "expected_output": attr.string(), + }, +) + +def _test_apex_installed_files(): + name = "apex_installed_files" + test_name = name + "_test" + + cc_library_shared( + name = name + "_lib_cc", + srcs = [name + "_lib.cc"], + tags = ["manual"], + ) + + test_apex( + name = name, + native_shared_libs_32 = [name + "_lib_cc"], + android_manifest = "AndroidManifest.xml", + ) + + apex_installed_files_test( + name = test_name, + target_under_test = name, + expected_inputs = ["libc++.so", "apex_installed_files_lib_cc.so"], + expected_output = "apex_installed_files-installed-files.txt", ) return test_name @@ -1478,5 +1535,6 @@ def apex_test_suite(name): _test_apex_testonly_without_manifest(), _test_apex_backing_file(), _test_apex_symbols_used_by_apex(), + _test_apex_installed_files(), ], ) diff --git a/tests/apex/BUILD b/tests/apex/BUILD index c31445d7..db4a9cd8 100644 --- a/tests/apex/BUILD +++ b/tests/apex/BUILD @@ -85,3 +85,29 @@ diff_test( "//build/bazel/platforms/arch:arm64", ], ) + +filegroup( + name = "com.android.adbd_backing_libs", + srcs = ["//packages/modules/adb/apex:com.android.adbd"], + output_group = "backing_libs", +) + +diff_test( + name = "com.android.adbd_backing_libs_diff_test", + file1 = ":com.android.adbd_backing_libs", + file2 = "com.android.adbd_backing.txt.golden", + target_compatible_with = ["//build/bazel/platforms/os:linux"], +) + +filegroup( + name = "com.android.adbd_installed_files", + srcs = ["//packages/modules/adb/apex:com.android.adbd"], + output_group = "installed_files", +) + +diff_test( + name = "com.android.adbd_installed_files_diff_test", + file1 = ":com.android.adbd_installed_files", + file2 = "com.android.adbd_installed-files.txt.golden", + target_compatible_with = ["//build/bazel/platforms/arch:arm"], +) diff --git a/tests/apex/com.android.adbd_backing.txt.golden b/tests/apex/com.android.adbd_backing.txt.golden new file mode 100644 index 00000000..95212975 --- /dev/null +++ b/tests/apex/com.android.adbd_backing.txt.golden @@ -0,0 +1 @@ +libadb_pairing_auth.so libadb_pairing_connection.so libadb_pairing_server.so libadbconnection_client.so libbase.so libc++.so libcrypto.so libcrypto_utils.so libcutils.so diff --git a/tests/apex/com.android.adbd_installed-files.txt.golden b/tests/apex/com.android.adbd_installed-files.txt.golden new file mode 100644 index 00000000..63d86553 --- /dev/null +++ b/tests/apex/com.android.adbd_installed-files.txt.golden @@ -0,0 +1,11 @@ +1803948 ./bin/adbd +772404 ./lib/libcrypto.so +443480 ./lib/libc++.so +291756 ./lib/libadb_pairing_connection.so +174552 ./lib/libbase.so +124604 ./lib/libadb_pairing_auth.so +124220 ./lib/libadbconnection_client.so +60712 ./lib/libcutils.so +36688 ./lib/libadb_pairing_server.so +3956 ./lib/libcrypto_utils.so +181 ./etc/init.rc |