| package apex | 
 |  | 
 | import ( | 
 | 	"testing" | 
 |  | 
 | 	"github.com/google/blueprint/proptools" | 
 |  | 
 | 	"android/soong/android" | 
 | ) | 
 |  | 
 | func TestVndkApexForVndkLite(t *testing.T) { | 
 | 	ctx := testApex(t, ` | 
 | 		apex_vndk { | 
 | 			name: "com.android.vndk.current", | 
 | 			key: "com.android.vndk.current.key", | 
 | 			updatable: false, | 
 | 		} | 
 |  | 
 | 		apex_key { | 
 | 			name: "com.android.vndk.current.key", | 
 | 			public_key: "testkey.avbpubkey", | 
 | 			private_key: "testkey.pem", | 
 | 		} | 
 |  | 
 | 		cc_library { | 
 | 			name: "libvndk", | 
 | 			srcs: ["mylib.cpp"], | 
 | 			vendor_available: true, | 
 | 			product_available: true, | 
 | 			vndk: { | 
 | 				enabled: true, | 
 | 			}, | 
 | 			system_shared_libs: [], | 
 | 			stl: "none", | 
 | 			apex_available: [ "com.android.vndk.current" ], | 
 | 		} | 
 |  | 
 | 		cc_library { | 
 | 			name: "libvndksp", | 
 | 			srcs: ["mylib.cpp"], | 
 | 			vendor_available: true, | 
 | 			product_available: true, | 
 | 			vndk: { | 
 | 				enabled: true, | 
 | 				support_system_process: true, | 
 | 			}, | 
 | 			system_shared_libs: [], | 
 | 			stl: "none", | 
 | 			apex_available: [ "com.android.vndk.current" ], | 
 | 		} | 
 | 	`+vndkLibrariesTxtFiles("current"), | 
 | 		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { | 
 | 			variables.DeviceVndkVersion = proptools.StringPtr("") | 
 | 			variables.KeepVndk = proptools.BoolPtr(true) | 
 | 		}), | 
 | 	) | 
 | 	// VNDK-Lite contains only core variants of VNDK-Sp libraries | 
 | 	ensureExactContents(t, ctx, "com.android.vndk.current", "android_common", []string{ | 
 | 		"lib/libvndksp.so", | 
 | 		"lib/libc++.so", | 
 | 		"lib64/libvndksp.so", | 
 | 		"lib64/libc++.so", | 
 | 		"etc/llndk.libraries.29.txt", | 
 | 		"etc/vndkcore.libraries.29.txt", | 
 | 		"etc/vndksp.libraries.29.txt", | 
 | 		"etc/vndkprivate.libraries.29.txt", | 
 | 		"etc/vndkproduct.libraries.29.txt", | 
 | 	}) | 
 | } | 
 |  | 
 | func TestVndkApexUsesVendorVariant(t *testing.T) { | 
 | 	bp := ` | 
 | 		apex_vndk { | 
 | 			name: "com.android.vndk.current", | 
 | 			key: "mykey", | 
 | 			updatable: false, | 
 | 		} | 
 | 		apex_key { | 
 | 			name: "mykey", | 
 | 		} | 
 | 		cc_library { | 
 | 			name: "libfoo", | 
 | 			vendor_available: true, | 
 | 			product_available: true, | 
 | 			vndk: { | 
 | 				enabled: true, | 
 | 			}, | 
 | 			system_shared_libs: [], | 
 | 			stl: "none", | 
 | 		} | 
 | 		` + vndkLibrariesTxtFiles("current") | 
 |  | 
 | 	ensureFileSrc := func(t *testing.T, files []fileInApex, path, src string) { | 
 | 		t.Helper() | 
 | 		for _, f := range files { | 
 | 			if f.path == path { | 
 | 				ensureContains(t, f.src, src) | 
 | 				return | 
 | 			} | 
 | 		} | 
 | 		t.Errorf("expected path %q not found", path) | 
 | 	} | 
 |  | 
 | 	t.Run("VNDK lib doesn't have an apex variant", func(t *testing.T) { | 
 | 		ctx := testApex(t, bp) | 
 |  | 
 | 		// libfoo doesn't have apex variants | 
 | 		for _, variant := range ctx.ModuleVariantsForTests("libfoo") { | 
 | 			ensureNotContains(t, variant, "_myapex") | 
 | 		} | 
 |  | 
 | 		// VNDK APEX doesn't create apex variant | 
 | 		files := getFiles(t, ctx, "com.android.vndk.current", "android_common") | 
 | 		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.29_arm_armv7-a-neon_shared/libfoo.so") | 
 | 	}) | 
 |  | 
 | 	t.Run("VNDK APEX gathers only vendor variants even if product variants are available", func(t *testing.T) { | 
 | 		ctx := testApex(t, bp) | 
 |  | 
 | 		files := getFiles(t, ctx, "com.android.vndk.current", "android_common") | 
 | 		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.29_arm_armv7-a-neon_shared/libfoo.so") | 
 | 	}) | 
 |  | 
 | 	t.Run("VNDK APEX supports coverage variants", func(t *testing.T) { | 
 | 		ctx := testApex(t, bp, | 
 | 			android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { | 
 | 				variables.GcovCoverage = proptools.BoolPtr(true) | 
 | 				variables.Native_coverage = proptools.BoolPtr(true) | 
 | 			}), | 
 | 		) | 
 |  | 
 | 		files := getFiles(t, ctx, "com.android.vndk.current", "android_common") | 
 | 		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.29_arm_armv7-a-neon_shared/libfoo.so") | 
 |  | 
 | 		files = getFiles(t, ctx, "com.android.vndk.current", "android_common_cov") | 
 | 		ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.29_arm_armv7-a-neon_shared_cov/libfoo.so") | 
 | 	}) | 
 | } |