blob: 74a79e1c5b31b01986ee626b1faeb44a1eb6e322 [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) {
12 ctx, _ := testApex(t, `
13 apex_vndk {
Colin Cross2807f002021-03-02 10:15:29 -080014 name: "com.android.vndk.current",
15 key: "com.android.vndk.current.key",
Jooyung Han73d20d02020-03-27 16:06:55 +090016 }
17
18 apex_key {
Colin Cross2807f002021-03-02 10:15:29 -080019 name: "com.android.vndk.current.key",
Jooyung Han73d20d02020-03-27 16:06:55 +090020 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",
Colin Cross2807f002021-03-02 10:15:29 -080034 apex_available: [ "com.android.vndk.current" ],
Jooyung Han73d20d02020-03-27 16:06:55 +090035 }
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",
Colin Cross2807f002021-03-02 10:15:29 -080048 apex_available: [ "com.android.vndk.current" ],
Jooyung Han73d20d02020-03-27 16:06:55 +090049 }
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
Colin Cross2807f002021-03-02 10:15:29 -080054 ensureExactContents(t, ctx, "com.android.vndk.current", "android_common_image", []string{
Jooyung Han73d20d02020-03-27 16:06:55 +090055 "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 {
Colin Cross2807f002021-03-02 10:15:29 -080070 name: "com.android.vndk.current",
Jooyung Hana57af4a2020-01-23 05:36:59 +000071 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 }
Colin Cross2807f002021-03-02 10:15:29 -080097 t.Errorf("expected path %q not found", path)
Jooyung Hana57af4a2020-01-23 05:36:59 +000098 }
99
100 t.Run("VNDK lib doesn't have an apex variant", func(t *testing.T) {
101 ctx, _ := testApex(t, bp)
102
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
Colin Cross2807f002021-03-02 10:15:29 -0800109 files := getFiles(t, ctx, "com.android.vndk.current", "android_common_image")
Jooyung Hana57af4a2020-01-23 05:36:59 +0000110 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) {
114 ctx, _ := testApex(t, bp, func(fs map[string][]byte, config android.Config) {
115 // Now product variant is available
116 config.TestProductVariables.ProductVndkVersion = proptools.StringPtr("current")
117 })
118
Colin Cross2807f002021-03-02 10:15:29 -0800119 files := getFiles(t, ctx, "com.android.vndk.current", "android_common_image")
Jooyung Hana57af4a2020-01-23 05:36:59 +0000120 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) {
Ivan Lozanoa0cd8f92020-04-09 09:56:02 -0400124 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
Colin Cross2807f002021-03-02 10:15:29 -0800129 files := getFiles(t, ctx, "com.android.vndk.current", "android_common_image")
Jooyung Hana57af4a2020-01-23 05:36:59 +0000130 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared/libfoo.so")
131
Colin Cross2807f002021-03-02 10:15:29 -0800132 files = getFiles(t, ctx, "com.android.vndk.current", "android_common_cov_image")
Jooyung Hana57af4a2020-01-23 05:36:59 +0000133 ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.VER_arm_armv7-a-neon_shared_cov/libfoo.so")
134 })
135}