blob: 65630838d4199eb7b5f471c89323af9ba63dae9d [file] [log] [blame]
Jooyung Hana57af4a2020-01-23 05:36:59 +00001package apex
2
3import (
4 "testing"
5
6 "github.com/google/blueprint/proptools"
7
8 "android/soong/android"
9)
10
Jooyung Han73d20d02020-03-27 16:06:55 +090011func TestVndkApexForVndkLite(t *testing.T) {
Colin Cross1c460562021-02-16 17:55:47 -080012 ctx := testApex(t, `
Jooyung Han73d20d02020-03-27 16:06:55 +090013 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,
Justin Yun63e9ec72020-10-29 16:49:43 +090028 product_available: true,
Jooyung Han73d20d02020-03-27 16:06:55 +090029 vndk: {
30 enabled: true,
31 },
32 system_shared_libs: [],
33 stl: "none",
34 apex_available: [ "myapex" ],
35 }
36
37 cc_library {
38 name: "libvndksp",
39 srcs: ["mylib.cpp"],
40 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090041 product_available: true,
Jooyung Han73d20d02020-03-27 16:06:55 +090042 vndk: {
43 enabled: true,
44 support_system_process: true,
45 },
46 system_shared_libs: [],
47 stl: "none",
48 apex_available: [ "myapex" ],
49 }
50 `+vndkLibrariesTxtFiles("current"), func(fs map[string][]byte, config android.Config) {
51 config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("")
52 })
53 // VNDK-Lite contains only core variants of VNDK-Sp libraries
54 ensureExactContents(t, ctx, "myapex", "android_common_image", []string{
55 "lib/libvndksp.so",
56 "lib/libc++.so",
57 "lib64/libvndksp.so",
58 "lib64/libc++.so",
59 "etc/llndk.libraries.VER.txt",
60 "etc/vndkcore.libraries.VER.txt",
61 "etc/vndksp.libraries.VER.txt",
62 "etc/vndkprivate.libraries.VER.txt",
Justin Yun8a2600c2020-12-07 12:44:03 +090063 "etc/vndkproduct.libraries.VER.txt",
Jooyung Han73d20d02020-03-27 16:06:55 +090064 })
65}
66
Jooyung Hana57af4a2020-01-23 05:36:59 +000067func TestVndkApexUsesVendorVariant(t *testing.T) {
68 bp := `
69 apex_vndk {
70 name: "myapex",
71 key: "mykey",
72 }
73 apex_key {
74 name: "mykey",
75 }
76 cc_library {
77 name: "libfoo",
78 vendor_available: true,
Justin Yun63e9ec72020-10-29 16:49:43 +090079 product_available: true,
Jooyung Hana57af4a2020-01-23 05:36:59 +000080 vndk: {
81 enabled: true,
82 },
83 system_shared_libs: [],
84 stl: "none",
85 notice: "custom_notice",
86 }
87 ` + vndkLibrariesTxtFiles("current")
88
89 ensureFileSrc := func(t *testing.T, files []fileInApex, path, src string) {
90 t.Helper()
91 for _, f := range files {
92 if f.path == path {
93 ensureContains(t, f.src, src)
94 return
95 }
96 }
97 t.Fail()
98 }
99
100 t.Run("VNDK lib doesn't have an apex variant", func(t *testing.T) {
Colin Cross1c460562021-02-16 17:55:47 -0800101 ctx := testApex(t, bp)
Jooyung Hana57af4a2020-01-23 05:36:59 +0000102
103 // libfoo doesn't have apex variants
104 for _, variant := range ctx.ModuleVariantsForTests("libfoo") {
105 ensureNotContains(t, variant, "_myapex")
106 }
107
108 // VNDK APEX doesn't create apex variant
109 files := getFiles(t, ctx, "myapex", "android_common_image")
110 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
111 })
112
113 t.Run("VNDK APEX gathers only vendor variants even if product variants are available", func(t *testing.T) {
Colin Cross1c460562021-02-16 17:55:47 -0800114 ctx := testApex(t, bp, func(fs map[string][]byte, config android.Config) {
Jooyung Hana57af4a2020-01-23 05:36:59 +0000115 // Now product variant is available
116 config.TestProductVariables.ProductVndkVersion = proptools.StringPtr("current")
117 })
118
119 files := getFiles(t, ctx, "myapex", "android_common_image")
120 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
121 })
122
123 t.Run("VNDK APEX supports coverage variants", func(t *testing.T) {
Colin Cross1c460562021-02-16 17:55:47 -0800124 ctx := testApex(t, bp, func(fs map[string][]byte, config android.Config) {
Colin Cross1a6acd42020-06-16 17:51:46 -0700125 config.TestProductVariables.GcovCoverage = proptools.BoolPtr(true)
Colin Crossd9a121b2020-01-27 13:26:42 -0800126 config.TestProductVariables.Native_coverage = proptools.BoolPtr(true)
Jooyung Hana57af4a2020-01-23 05:36:59 +0000127 })
128
129 files := getFiles(t, ctx, "myapex", "android_common_image")
130 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
131
132 files = getFiles(t, ctx, "myapex", "android_common_cov_image")
133 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared_cov/libfoo.so")
134 })
135}