From 490a6f9b76872fcd30ddd3303b6b1ecd4cf6be3f Mon Sep 17 00:00:00 2001 From: Chan Wang Date: Mon, 23 Sep 2024 11:52:00 +0000 Subject: [PATCH] Temporarily bypass apex availability check for /product apexes with a specific prefix Bug: 361501627 Test: m nothing --no-skip-soong-tests Change-Id: Ifb855bed3514d27ecccddb5cd986537c628683b1 --- apex/apex.go | 6 ++ apex/apex_test.go | 166 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) diff --git a/apex/apex.go b/apex/apex.go index d5776b5deb..3850ee1373 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2785,6 +2785,12 @@ func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) { return } + // Temporarily bypass /product APEXes with a specific prefix. + // TODO: b/352818241 - Remove this after APEX availability is enforced for /product APEXes. + if a.ProductSpecific() && strings.HasPrefix(a.ApexVariationName(), "com.sdv.") { + return + } + // Coverage build adds additional dependencies for the coverage-only runtime libraries. // Requiring them and their transitive depencies with apex_available is not right // because they just add noise. diff --git a/apex/apex_test.go b/apex/apex_test.go index 8d34e9fdeb..f36467ef4b 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -6216,6 +6216,87 @@ func TestApexAvailable_DirectDep(t *testing.T) { system_shared_libs: [], apex_available: ["otherapex"], }`) + + // 'apex_available' check is bypassed for /product apex with a specific prefix. + // TODO: b/352818241 - Remove below two cases after APEX availability is enforced for /product APEXes. + testApex(t, ` + apex { + name: "com.sdv.myapex", + key: "myapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + product_specific: true, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + apex { + name: "com.any.otherapex", + key: "otherapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + } + + apex_key { + name: "otherapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libfoo", + stl: "none", + system_shared_libs: [], + apex_available: ["com.any.otherapex"], + product_specific: true, + }`, + android.FixtureMergeMockFs(android.MockFS{ + "system/sepolicy/apex/com.sdv.myapex-file_contexts": nil, + "system/sepolicy/apex/com.any.otherapex-file_contexts": nil, + })) + + // 'apex_available' check is not bypassed for non-product apex with a specific prefix. + testApexError(t, "requires \"libfoo\" that doesn't list the APEX under 'apex_available'.", ` + apex { + name: "com.sdv.myapex", + key: "myapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + apex { + name: "com.any.otherapex", + key: "otherapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + } + + apex_key { + name: "otherapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libfoo", + stl: "none", + system_shared_libs: [], + apex_available: ["com.any.otherapex"], + }`, + android.FixtureMergeMockFs(android.MockFS{ + "system/sepolicy/apex/com.sdv.myapex-file_contexts": nil, + "system/sepolicy/apex/com.any.otherapex-file_contexts": nil, + })) } func TestApexAvailable_IndirectDep(t *testing.T) { @@ -6261,6 +6342,91 @@ func TestApexAvailable_IndirectDep(t *testing.T) { stl: "none", system_shared_libs: [], }`) + + // 'apex_available' check is bypassed for /product apex with a specific prefix. + // TODO: b/352818241 - Remove below two cases after APEX availability is enforced for /product APEXes. + testApex(t, ` + apex { + name: "com.sdv.myapex", + key: "myapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + product_specific: true, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libfoo", + stl: "none", + shared_libs: ["libbar"], + system_shared_libs: [], + apex_available: ["com.sdv.myapex"], + product_specific: true, + } + + cc_library { + name: "libbar", + stl: "none", + shared_libs: ["libbaz"], + system_shared_libs: [], + apex_available: ["com.sdv.myapex"], + product_specific: true, + } + + cc_library { + name: "libbaz", + stl: "none", + system_shared_libs: [], + product_specific: true, + }`, + android.FixtureMergeMockFs(android.MockFS{ + "system/sepolicy/apex/com.sdv.myapex-file_contexts": nil, + })) + + // 'apex_available' check is not bypassed for non-product apex with a specific prefix. + testApexError(t, `requires "libbaz" that doesn't list the APEX under 'apex_available'.`, ` + apex { + name: "com.sdv.myapex", + key: "myapex.key", + native_shared_libs: ["libfoo"], + updatable: false, + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libfoo", + stl: "none", + shared_libs: ["libbar"], + system_shared_libs: [], + apex_available: ["com.sdv.myapex"], + } + + cc_library { + name: "libbar", + stl: "none", + shared_libs: ["libbaz"], + system_shared_libs: [], + apex_available: ["com.sdv.myapex"], + } + + cc_library { + name: "libbaz", + stl: "none", + system_shared_libs: [], + }`, + android.FixtureMergeMockFs(android.MockFS{ + "system/sepolicy/apex/com.sdv.myapex-file_contexts": nil, + })) } func TestApexAvailable_IndirectStaticDep(t *testing.T) {