diff options
author | 2023-05-01 23:43:01 +0000 | |
---|---|---|
committer | 2023-05-01 23:43:01 +0000 | |
commit | e018bc858b3834cc1bc26afa7e5de2286b373f8d (patch) | |
tree | 0496051b0c7f128d91d63a549f5a2a058ea949d7 /apex/apex_test.go | |
parent | 316b0158fe57ee7764235923e7c6f3d530da39c6 (diff) | |
parent | 20fce2d340f3d84493b774a732705ddb80f56821 (diff) |
Merge "Enforce stub libraries should have a single apex_available"
Diffstat (limited to 'apex/apex_test.go')
-rw-r--r-- | apex/apex_test.go | 120 |
1 files changed, 108 insertions, 12 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index 31b7ef7ff..3ba4d8d55 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3218,10 +3218,7 @@ func TestStaticLinking(t *testing.T) { stubs: { versions: ["1", "2", "3"], }, - apex_available: [ - "//apex_available:platform", - "myapex", - ], + apex_available: ["myapex"], } cc_binary { @@ -4221,7 +4218,7 @@ func TestDependenciesInApexManifest(t *testing.T) { apex { name: "myapex_selfcontained", key: "myapex.key", - native_shared_libs: ["lib_dep", "libfoo"], + native_shared_libs: ["lib_dep_on_bar", "libbar"], compile_multilib: "both", file_contexts: ":myapex-file_contexts", updatable: false, @@ -4255,6 +4252,18 @@ func TestDependenciesInApexManifest(t *testing.T) { } cc_library { + name: "lib_dep_on_bar", + srcs: ["mylib.cpp"], + shared_libs: ["libbar"], + system_shared_libs: [], + stl: "none", + apex_available: [ + "myapex_selfcontained", + ], + } + + + cc_library { name: "libfoo", srcs: ["mytest.cpp"], stubs: { @@ -4264,9 +4273,22 @@ func TestDependenciesInApexManifest(t *testing.T) { stl: "none", apex_available: [ "myapex_provider", + ], + } + + cc_library { + name: "libbar", + srcs: ["mytest.cpp"], + stubs: { + versions: ["1"], + }, + system_shared_libs: [], + stl: "none", + apex_available: [ "myapex_selfcontained", ], } + `) var apexManifestRule android.TestingBuildParams @@ -4293,7 +4315,7 @@ func TestDependenciesInApexManifest(t *testing.T) { apexManifestRule = ctx.ModuleForTests("myapex_selfcontained", "android_common_myapex_selfcontained_image").Rule("apexManifestRule") provideNativeLibs = names(apexManifestRule.Args["provideNativeLibs"]) requireNativeLibs = names(apexManifestRule.Args["requireNativeLibs"]) - ensureListContains(t, provideNativeLibs, "libfoo.so") + ensureListContains(t, provideNativeLibs, "libbar.so") ensureListEmpty(t, requireNativeLibs) } @@ -8575,14 +8597,14 @@ func TestTestForForLibInOtherApex(t *testing.T) { apex { name: "com.android.art", key: "myapex.key", - native_shared_libs: ["mylib"], + native_shared_libs: ["libnativebridge"], updatable: false, } apex { name: "com.android.art.debug", key: "myapex.key", - native_shared_libs: ["mylib", "mytestlib"], + native_shared_libs: ["libnativebridge", "libnativebrdige_test"], updatable: false, } @@ -8593,8 +8615,8 @@ func TestTestForForLibInOtherApex(t *testing.T) { } cc_library { - name: "mylib", - srcs: ["mylib.cpp"], + name: "libnativebridge", + srcs: ["libnativebridge.cpp"], system_shared_libs: [], stl: "none", stubs: { @@ -8604,10 +8626,10 @@ func TestTestForForLibInOtherApex(t *testing.T) { } cc_library { - name: "mytestlib", + name: "libnativebrdige_test", srcs: ["mylib.cpp"], system_shared_libs: [], - shared_libs: ["mylib"], + shared_libs: ["libnativebridge"], stl: "none", apex_available: ["com.android.art.debug"], test_for: ["com.android.art"], @@ -10279,3 +10301,77 @@ func TestCannedFsConfig_HasCustomConfig(t *testing.T) { // Ensure that canned_fs_config has "cat my_config" at the end ensureContains(t, cmd, `( echo '/ 1000 1000 0755'; echo '/apex_manifest.json 1000 1000 0644'; echo '/apex_manifest.pb 1000 1000 0644'; cat my_config ) >`) } + +func TestStubLibrariesMultipleApexViolation(t *testing.T) { + testCases := []struct { + desc string + hasStubs bool + apexAvailable string + expectedError string + }{ + { + desc: "non-stub library can have multiple apex_available", + hasStubs: false, + apexAvailable: `["myapex", "otherapex"]`, + }, + { + desc: "stub library should not be available to anyapex", + hasStubs: true, + apexAvailable: `["//apex_available:anyapex"]`, + expectedError: "Stub libraries should have a single apex_available.*anyapex", + }, + { + desc: "stub library should not be available to multiple apexes", + hasStubs: true, + apexAvailable: `["myapex", "otherapex"]`, + expectedError: "Stub libraries should have a single apex_available.*myapex.*otherapex", + }, + { + desc: "stub library can be available to a core apex and a test apex", + hasStubs: true, + apexAvailable: `["myapex", "test_myapex"]`, + }, + } + bpTemplate := ` + cc_library { + name: "libfoo", + %v + apex_available: %v, + } + apex { + name: "myapex", + key: "apex.key", + updatable: false, + native_shared_libs: ["libfoo"], + } + apex { + name: "otherapex", + key: "apex.key", + updatable: false, + } + apex_test { + name: "test_myapex", + key: "apex.key", + updatable: false, + native_shared_libs: ["libfoo"], + } + apex_key { + name: "apex.key", + } + ` + for _, tc := range testCases { + stubs := "" + if tc.hasStubs { + stubs = `stubs: {symbol_file: "libfoo.map.txt"},` + } + bp := fmt.Sprintf(bpTemplate, stubs, tc.apexAvailable) + mockFsFixturePreparer := android.FixtureModifyMockFS(func(fs android.MockFS) { + fs["system/sepolicy/apex/test_myapex-file_contexts"] = nil + }) + if tc.expectedError == "" { + testApex(t, bp, mockFsFixturePreparer) + } else { + testApexError(t, tc.expectedError, bp, mockFsFixturePreparer) + } + } +} |