1package apex 2 3import ( 4 "testing" 5 6 "github.com/google/blueprint/proptools" 7 8 "android/soong/android" 9) 10 11func TestVndkApexForVndkLite(t *testing.T) { 12 ctx, _ := testApex(t, ` 13 apex_vndk { 14 name: "myapex", 15 key: "myapex.key", 16 } 17 18 apex_key { 19 name: "myapex.key", 20 public_key: "testkey.avbpubkey", 21 private_key: "testkey.pem", 22 } 23 24 cc_library { 25 name: "libvndk", 26 srcs: ["mylib.cpp"], 27 vendor_available: true, 28 vndk: { 29 enabled: true, 30 }, 31 system_shared_libs: [], 32 stl: "none", 33 apex_available: [ "myapex" ], 34 } 35 36 cc_library { 37 name: "libvndksp", 38 srcs: ["mylib.cpp"], 39 vendor_available: true, 40 vndk: { 41 enabled: true, 42 support_system_process: true, 43 }, 44 system_shared_libs: [], 45 stl: "none", 46 apex_available: [ "myapex" ], 47 } 48 `+vndkLibrariesTxtFiles("current"), func(fs map[string][]byte, config android.Config) { 49 config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("") 50 }) 51 // VNDK-Lite contains only core variants of VNDK-Sp libraries 52 ensureExactContents(t, ctx, "myapex", "android_common_image", []string{ 53 "lib/libvndksp.so", 54 "lib/libc++.so", 55 "lib64/libvndksp.so", 56 "lib64/libc++.so", 57 "etc/llndk.libraries.VER.txt", 58 "etc/vndkcore.libraries.VER.txt", 59 "etc/vndksp.libraries.VER.txt", 60 "etc/vndkprivate.libraries.VER.txt", 61 }) 62} 63 64func TestVndkApexUsesVendorVariant(t *testing.T) { 65 bp := ` 66 apex_vndk { 67 name: "myapex", 68 key: "mykey", 69 } 70 apex_key { 71 name: "mykey", 72 } 73 cc_library { 74 name: "libfoo", 75 vendor_available: true, 76 vndk: { 77 enabled: true, 78 }, 79 system_shared_libs: [], 80 stl: "none", 81 notice: "custom_notice", 82 } 83 ` + vndkLibrariesTxtFiles("current") 84 85 ensureFileSrc := func(t *testing.T, files []fileInApex, path, src string) { 86 t.Helper() 87 for _, f := range files { 88 if f.path == path { 89 ensureContains(t, f.src, src) 90 return 91 } 92 } 93 t.Fail() 94 } 95 96 t.Run("VNDK lib doesn't have an apex variant", func(t *testing.T) { 97 ctx, _ := testApex(t, bp) 98 99 // libfoo doesn't have apex variants 100 for _, variant := range ctx.ModuleVariantsForTests("libfoo") { 101 ensureNotContains(t, variant, "_myapex") 102 } 103 104 // VNDK APEX doesn't create apex variant 105 files := getFiles(t, ctx, "myapex", "android_common_image") 106 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so") 107 }) 108 109 t.Run("VNDK APEX gathers only vendor variants even if product variants are available", func(t *testing.T) { 110 ctx, _ := testApex(t, bp, func(fs map[string][]byte, config android.Config) { 111 // Now product variant is available 112 config.TestProductVariables.ProductVndkVersion = proptools.StringPtr("current") 113 }) 114 115 files := getFiles(t, ctx, "myapex", "android_common_image") 116 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so") 117 }) 118 119 t.Run("VNDK APEX supports coverage variants", func(t *testing.T) { 120 ctx, _ := testApex(t, bp, func(fs map[string][]byte, config android.Config) { 121 config.TestProductVariables.GcovCoverage = proptools.BoolPtr(true) 122 config.TestProductVariables.Native_coverage = proptools.BoolPtr(true) 123 }) 124 125 files := getFiles(t, ctx, "myapex", "android_common_image") 126 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so") 127 128 files = getFiles(t, ctx, "myapex", "android_common_cov_image") 129 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared_cov/libfoo.so") 130 }) 131} 132