xref: /aosp_15_r20/build/soong/sysprop/sysprop_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2019 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage sysprop
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"os"
19*333d2b36SAndroid Build Coastguard Worker	"strings"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/cc"
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/java"
25*333d2b36SAndroid Build Coastguard Worker	"android/soong/rust"
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
28*333d2b36SAndroid Build Coastguard Worker)
29*333d2b36SAndroid Build Coastguard Worker
30*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) {
31*333d2b36SAndroid Build Coastguard Worker	os.Exit(m.Run())
32*333d2b36SAndroid Build Coastguard Worker}
33*333d2b36SAndroid Build Coastguard Worker
34*333d2b36SAndroid Build Coastguard Workerfunc test(t *testing.T, bp string) *android.TestResult {
35*333d2b36SAndroid Build Coastguard Worker	t.Helper()
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Worker	bp += `
38*333d2b36SAndroid Build Coastguard Worker		cc_library {
39*333d2b36SAndroid Build Coastguard Worker			name: "libbase",
40*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
41*333d2b36SAndroid Build Coastguard Worker		}
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker		cc_library_headers {
44*333d2b36SAndroid Build Coastguard Worker			name: "libbase_headers",
45*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
46*333d2b36SAndroid Build Coastguard Worker			product_available: true,
47*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
48*333d2b36SAndroid Build Coastguard Worker		}
49*333d2b36SAndroid Build Coastguard Worker
50*333d2b36SAndroid Build Coastguard Worker		java_library {
51*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-library-stub-platform",
52*333d2b36SAndroid Build Coastguard Worker			sdk_version: "core_current",
53*333d2b36SAndroid Build Coastguard Worker		}
54*333d2b36SAndroid Build Coastguard Worker
55*333d2b36SAndroid Build Coastguard Worker		java_library {
56*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-library-stub-vendor",
57*333d2b36SAndroid Build Coastguard Worker			soc_specific: true,
58*333d2b36SAndroid Build Coastguard Worker			sdk_version: "core_current",
59*333d2b36SAndroid Build Coastguard Worker		}
60*333d2b36SAndroid Build Coastguard Worker
61*333d2b36SAndroid Build Coastguard Worker		java_library {
62*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-library-stub-product",
63*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
64*333d2b36SAndroid Build Coastguard Worker			sdk_version: "core_current",
65*333d2b36SAndroid Build Coastguard Worker		}
66*333d2b36SAndroid Build Coastguard Worker
67*333d2b36SAndroid Build Coastguard Worker		rust_library {
68*333d2b36SAndroid Build Coastguard Worker			name: "librustutils",
69*333d2b36SAndroid Build Coastguard Worker			crate_name: "rustutils",
70*333d2b36SAndroid Build Coastguard Worker			srcs: ["librustutils/lib.rs"],
71*333d2b36SAndroid Build Coastguard Worker			product_available: true,
72*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
73*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "29",
74*333d2b36SAndroid Build Coastguard Worker		}
75*333d2b36SAndroid Build Coastguard Worker
76*333d2b36SAndroid Build Coastguard Worker		rust_library {
77*333d2b36SAndroid Build Coastguard Worker			name: "liblog_rust",
78*333d2b36SAndroid Build Coastguard Worker			crate_name: "log",
79*333d2b36SAndroid Build Coastguard Worker			srcs: ["log/src/lib.rs"],
80*333d2b36SAndroid Build Coastguard Worker			product_available: true,
81*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
82*333d2b36SAndroid Build Coastguard Worker			min_sdk_version: "29",
83*333d2b36SAndroid Build Coastguard Worker		}
84*333d2b36SAndroid Build Coastguard Worker	`
85*333d2b36SAndroid Build Coastguard Worker
86*333d2b36SAndroid Build Coastguard Worker	mockFS := android.MockFS{
87*333d2b36SAndroid Build Coastguard Worker		"a.java":                           nil,
88*333d2b36SAndroid Build Coastguard Worker		"b.java":                           nil,
89*333d2b36SAndroid Build Coastguard Worker		"c.java":                           nil,
90*333d2b36SAndroid Build Coastguard Worker		"d.cpp":                            nil,
91*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-platform-current.txt": nil,
92*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-platform-latest.txt":  nil,
93*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-platform-on-product-current.txt": nil,
94*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-platform-on-product-latest.txt":  nil,
95*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-vendor-current.txt":              nil,
96*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-vendor-latest.txt":               nil,
97*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-vendor-on-product-current.txt":   nil,
98*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-vendor-on-product-latest.txt":    nil,
99*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-odm-current.txt":                 nil,
100*333d2b36SAndroid Build Coastguard Worker		"api/sysprop-odm-latest.txt":                  nil,
101*333d2b36SAndroid Build Coastguard Worker		"framework/aidl/a.aidl":                       nil,
102*333d2b36SAndroid Build Coastguard Worker
103*333d2b36SAndroid Build Coastguard Worker		// For framework-res, which is an implicit dependency for framework
104*333d2b36SAndroid Build Coastguard Worker		"AndroidManifest.xml":                        nil,
105*333d2b36SAndroid Build Coastguard Worker		"build/make/target/product/security/testkey": nil,
106*333d2b36SAndroid Build Coastguard Worker
107*333d2b36SAndroid Build Coastguard Worker		"build/soong/scripts/jar-wrapper.sh": nil,
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Worker		"jdk8/jre/lib/jce.jar": nil,
110*333d2b36SAndroid Build Coastguard Worker		"jdk8/jre/lib/rt.jar":  nil,
111*333d2b36SAndroid Build Coastguard Worker		"jdk8/lib/tools.jar":   nil,
112*333d2b36SAndroid Build Coastguard Worker
113*333d2b36SAndroid Build Coastguard Worker		"bar-doc/a.java":                 nil,
114*333d2b36SAndroid Build Coastguard Worker		"bar-doc/b.java":                 nil,
115*333d2b36SAndroid Build Coastguard Worker		"bar-doc/IFoo.aidl":              nil,
116*333d2b36SAndroid Build Coastguard Worker		"bar-doc/known_oj_tags.txt":      nil,
117*333d2b36SAndroid Build Coastguard Worker		"external/doclava/templates-sdk": nil,
118*333d2b36SAndroid Build Coastguard Worker
119*333d2b36SAndroid Build Coastguard Worker		"cert/new_cert.x509.pem": nil,
120*333d2b36SAndroid Build Coastguard Worker		"cert/new_cert.pk8":      nil,
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Worker		"android/sysprop/PlatformProperties.sysprop": nil,
123*333d2b36SAndroid Build Coastguard Worker		"com/android/VendorProperties.sysprop":       nil,
124*333d2b36SAndroid Build Coastguard Worker		"com/android2/OdmProperties.sysprop":         nil,
125*333d2b36SAndroid Build Coastguard Worker
126*333d2b36SAndroid Build Coastguard Worker		"librustutils/lib.rs": nil,
127*333d2b36SAndroid Build Coastguard Worker		"log/src/lib.rs":      nil,
128*333d2b36SAndroid Build Coastguard Worker	}
129*333d2b36SAndroid Build Coastguard Worker
130*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
131*333d2b36SAndroid Build Coastguard Worker		cc.PrepareForTestWithCcDefaultModules,
132*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
133*333d2b36SAndroid Build Coastguard Worker		rust.PrepareForTestWithRustDefaultModules,
134*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithSyspropBuildComponents,
135*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
136*333d2b36SAndroid Build Coastguard Worker			variables.DeviceSystemSdkVersions = []string{"28"}
137*333d2b36SAndroid Build Coastguard Worker			variables.DeviceCurrentApiLevelForVendorModules = proptools.StringPtr("28")
138*333d2b36SAndroid Build Coastguard Worker		}),
139*333d2b36SAndroid Build Coastguard Worker		java.FixtureWithPrebuiltApis(map[string][]string{
140*333d2b36SAndroid Build Coastguard Worker			"28": {},
141*333d2b36SAndroid Build Coastguard Worker			"29": {},
142*333d2b36SAndroid Build Coastguard Worker			"30": {},
143*333d2b36SAndroid Build Coastguard Worker		}),
144*333d2b36SAndroid Build Coastguard Worker		mockFS.AddToFixture(),
145*333d2b36SAndroid Build Coastguard Worker		android.FixtureWithRootAndroidBp(bp),
146*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
147*333d2b36SAndroid Build Coastguard Worker
148*333d2b36SAndroid Build Coastguard Worker	return result
149*333d2b36SAndroid Build Coastguard Worker}
150*333d2b36SAndroid Build Coastguard Worker
151*333d2b36SAndroid Build Coastguard Workerfunc TestSyspropLibrary(t *testing.T) {
152*333d2b36SAndroid Build Coastguard Worker	result := test(t, `
153*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
154*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-platform",
155*333d2b36SAndroid Build Coastguard Worker			apex_available: ["//apex_available:platform"],
156*333d2b36SAndroid Build Coastguard Worker			srcs: ["android/sysprop/PlatformProperties.sysprop"],
157*333d2b36SAndroid Build Coastguard Worker			api_packages: ["android.sysprop"],
158*333d2b36SAndroid Build Coastguard Worker			property_owner: "Platform",
159*333d2b36SAndroid Build Coastguard Worker			vendor_available: true,
160*333d2b36SAndroid Build Coastguard Worker			host_supported: true,
161*333d2b36SAndroid Build Coastguard Worker		}
162*333d2b36SAndroid Build Coastguard Worker
163*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
164*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-platform-on-product",
165*333d2b36SAndroid Build Coastguard Worker			srcs: ["android/sysprop/PlatformProperties.sysprop"],
166*333d2b36SAndroid Build Coastguard Worker			api_packages: ["android.sysprop"],
167*333d2b36SAndroid Build Coastguard Worker			property_owner: "Platform",
168*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
169*333d2b36SAndroid Build Coastguard Worker		}
170*333d2b36SAndroid Build Coastguard Worker
171*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
172*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-vendor",
173*333d2b36SAndroid Build Coastguard Worker			srcs: ["com/android/VendorProperties.sysprop"],
174*333d2b36SAndroid Build Coastguard Worker			api_packages: ["com.android"],
175*333d2b36SAndroid Build Coastguard Worker			property_owner: "Vendor",
176*333d2b36SAndroid Build Coastguard Worker			vendor: true,
177*333d2b36SAndroid Build Coastguard Worker		}
178*333d2b36SAndroid Build Coastguard Worker
179*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
180*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-vendor-on-product",
181*333d2b36SAndroid Build Coastguard Worker			srcs: ["com/android/VendorProperties.sysprop"],
182*333d2b36SAndroid Build Coastguard Worker			api_packages: ["com.android"],
183*333d2b36SAndroid Build Coastguard Worker			property_owner: "Vendor",
184*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
185*333d2b36SAndroid Build Coastguard Worker		}
186*333d2b36SAndroid Build Coastguard Worker
187*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
188*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-odm",
189*333d2b36SAndroid Build Coastguard Worker			srcs: ["com/android2/OdmProperties.sysprop"],
190*333d2b36SAndroid Build Coastguard Worker			api_packages: ["com.android2"],
191*333d2b36SAndroid Build Coastguard Worker			property_owner: "Odm",
192*333d2b36SAndroid Build Coastguard Worker			device_specific: true,
193*333d2b36SAndroid Build Coastguard Worker		}
194*333d2b36SAndroid Build Coastguard Worker
195*333d2b36SAndroid Build Coastguard Worker		java_library {
196*333d2b36SAndroid Build Coastguard Worker			name: "java-platform",
197*333d2b36SAndroid Build Coastguard Worker			srcs: ["c.java"],
198*333d2b36SAndroid Build Coastguard Worker			sdk_version: "system_current",
199*333d2b36SAndroid Build Coastguard Worker			libs: ["sysprop-platform"],
200*333d2b36SAndroid Build Coastguard Worker		}
201*333d2b36SAndroid Build Coastguard Worker
202*333d2b36SAndroid Build Coastguard Worker		java_library {
203*333d2b36SAndroid Build Coastguard Worker			name: "java-platform-private",
204*333d2b36SAndroid Build Coastguard Worker			srcs: ["c.java"],
205*333d2b36SAndroid Build Coastguard Worker			platform_apis: true,
206*333d2b36SAndroid Build Coastguard Worker			libs: ["sysprop-platform"],
207*333d2b36SAndroid Build Coastguard Worker		}
208*333d2b36SAndroid Build Coastguard Worker
209*333d2b36SAndroid Build Coastguard Worker		java_library {
210*333d2b36SAndroid Build Coastguard Worker			name: "java-product",
211*333d2b36SAndroid Build Coastguard Worker			srcs: ["c.java"],
212*333d2b36SAndroid Build Coastguard Worker			sdk_version: "system_current",
213*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
214*333d2b36SAndroid Build Coastguard Worker			libs: ["sysprop-platform", "sysprop-vendor-on-product"],
215*333d2b36SAndroid Build Coastguard Worker		}
216*333d2b36SAndroid Build Coastguard Worker
217*333d2b36SAndroid Build Coastguard Worker		java_library {
218*333d2b36SAndroid Build Coastguard Worker			name: "java-vendor",
219*333d2b36SAndroid Build Coastguard Worker			srcs: ["c.java"],
220*333d2b36SAndroid Build Coastguard Worker			sdk_version: "system_current",
221*333d2b36SAndroid Build Coastguard Worker			soc_specific: true,
222*333d2b36SAndroid Build Coastguard Worker			libs: ["sysprop-platform", "sysprop-vendor"],
223*333d2b36SAndroid Build Coastguard Worker		}
224*333d2b36SAndroid Build Coastguard Worker
225*333d2b36SAndroid Build Coastguard Worker		cc_library {
226*333d2b36SAndroid Build Coastguard Worker			name: "cc-client-platform",
227*333d2b36SAndroid Build Coastguard Worker			srcs: ["d.cpp"],
228*333d2b36SAndroid Build Coastguard Worker			static_libs: ["libsysprop-platform"],
229*333d2b36SAndroid Build Coastguard Worker		}
230*333d2b36SAndroid Build Coastguard Worker
231*333d2b36SAndroid Build Coastguard Worker		cc_library_static {
232*333d2b36SAndroid Build Coastguard Worker			name: "cc-client-platform-static",
233*333d2b36SAndroid Build Coastguard Worker			srcs: ["d.cpp"],
234*333d2b36SAndroid Build Coastguard Worker			whole_static_libs: ["libsysprop-platform"],
235*333d2b36SAndroid Build Coastguard Worker		}
236*333d2b36SAndroid Build Coastguard Worker
237*333d2b36SAndroid Build Coastguard Worker		cc_library {
238*333d2b36SAndroid Build Coastguard Worker			name: "cc-client-product",
239*333d2b36SAndroid Build Coastguard Worker			srcs: ["d.cpp"],
240*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
241*333d2b36SAndroid Build Coastguard Worker			static_libs: ["libsysprop-platform-on-product", "libsysprop-vendor-on-product"],
242*333d2b36SAndroid Build Coastguard Worker		}
243*333d2b36SAndroid Build Coastguard Worker
244*333d2b36SAndroid Build Coastguard Worker		cc_library {
245*333d2b36SAndroid Build Coastguard Worker			name: "cc-client-vendor",
246*333d2b36SAndroid Build Coastguard Worker			srcs: ["d.cpp"],
247*333d2b36SAndroid Build Coastguard Worker			soc_specific: true,
248*333d2b36SAndroid Build Coastguard Worker			static_libs: ["libsysprop-platform", "libsysprop-vendor"],
249*333d2b36SAndroid Build Coastguard Worker		}
250*333d2b36SAndroid Build Coastguard Worker
251*333d2b36SAndroid Build Coastguard Worker		cc_binary_host {
252*333d2b36SAndroid Build Coastguard Worker			name: "hostbin",
253*333d2b36SAndroid Build Coastguard Worker			static_libs: ["libsysprop-platform"],
254*333d2b36SAndroid Build Coastguard Worker		}
255*333d2b36SAndroid Build Coastguard Worker	`)
256*333d2b36SAndroid Build Coastguard Worker
257*333d2b36SAndroid Build Coastguard Worker	// Check for generated cc_library
258*333d2b36SAndroid Build Coastguard Worker	for _, variant := range []string{
259*333d2b36SAndroid Build Coastguard Worker		"android_vendor_arm_armv7-a-neon_shared",
260*333d2b36SAndroid Build Coastguard Worker		"android_vendor_arm_armv7-a-neon_static",
261*333d2b36SAndroid Build Coastguard Worker		"android_vendor_arm64_armv8-a_shared",
262*333d2b36SAndroid Build Coastguard Worker		"android_vendor_arm64_armv8-a_static",
263*333d2b36SAndroid Build Coastguard Worker	} {
264*333d2b36SAndroid Build Coastguard Worker		result.ModuleForTests("libsysprop-platform", variant)
265*333d2b36SAndroid Build Coastguard Worker		result.ModuleForTests("libsysprop-vendor", variant)
266*333d2b36SAndroid Build Coastguard Worker		result.ModuleForTests("libsysprop-odm", variant)
267*333d2b36SAndroid Build Coastguard Worker	}
268*333d2b36SAndroid Build Coastguard Worker
269*333d2b36SAndroid Build Coastguard Worker	// product variant of vendor-owned sysprop_library
270*333d2b36SAndroid Build Coastguard Worker	for _, variant := range []string{
271*333d2b36SAndroid Build Coastguard Worker		"android_product_arm_armv7-a-neon_shared",
272*333d2b36SAndroid Build Coastguard Worker		"android_product_arm_armv7-a-neon_static",
273*333d2b36SAndroid Build Coastguard Worker		"android_product_arm64_armv8-a_shared",
274*333d2b36SAndroid Build Coastguard Worker		"android_product_arm64_armv8-a_static",
275*333d2b36SAndroid Build Coastguard Worker	} {
276*333d2b36SAndroid Build Coastguard Worker		result.ModuleForTests("libsysprop-vendor-on-product", variant)
277*333d2b36SAndroid Build Coastguard Worker	}
278*333d2b36SAndroid Build Coastguard Worker
279*333d2b36SAndroid Build Coastguard Worker	for _, variant := range []string{
280*333d2b36SAndroid Build Coastguard Worker		"android_arm_armv7-a-neon_shared",
281*333d2b36SAndroid Build Coastguard Worker		"android_arm_armv7-a-neon_static",
282*333d2b36SAndroid Build Coastguard Worker		"android_arm64_armv8-a_shared",
283*333d2b36SAndroid Build Coastguard Worker		"android_arm64_armv8-a_static",
284*333d2b36SAndroid Build Coastguard Worker	} {
285*333d2b36SAndroid Build Coastguard Worker		library := result.ModuleForTests("libsysprop-platform", variant).Module().(*cc.Module)
286*333d2b36SAndroid Build Coastguard Worker		expectedApexAvailableOnLibrary := []string{"//apex_available:platform"}
287*333d2b36SAndroid Build Coastguard Worker		android.AssertDeepEquals(t, "apex available property on libsysprop-platform", expectedApexAvailableOnLibrary, library.ApexProperties.Apex_available)
288*333d2b36SAndroid Build Coastguard Worker	}
289*333d2b36SAndroid Build Coastguard Worker
290*333d2b36SAndroid Build Coastguard Worker	result.ModuleForTests("sysprop-platform", "android_common")
291*333d2b36SAndroid Build Coastguard Worker	result.ModuleForTests("sysprop-platform_public", "android_common")
292*333d2b36SAndroid Build Coastguard Worker	result.ModuleForTests("sysprop-vendor", "android_common")
293*333d2b36SAndroid Build Coastguard Worker	result.ModuleForTests("sysprop-vendor-on-product", "android_common")
294*333d2b36SAndroid Build Coastguard Worker
295*333d2b36SAndroid Build Coastguard Worker	// Check for exported includes
296*333d2b36SAndroid Build Coastguard Worker	coreVariant := "android_arm64_armv8-a_static"
297*333d2b36SAndroid Build Coastguard Worker	vendorVariant := "android_vendor_arm64_armv8-a_static"
298*333d2b36SAndroid Build Coastguard Worker	productVariant := "android_product_arm64_armv8-a_static"
299*333d2b36SAndroid Build Coastguard Worker
300*333d2b36SAndroid Build Coastguard Worker	platformInternalPath := "libsysprop-platform/android_arm64_armv8-a_static/gen/sysprop/include"
301*333d2b36SAndroid Build Coastguard Worker	platformPublicVendorPath := "libsysprop-platform/android_vendor_arm64_armv8-a_static/gen/sysprop/public/include"
302*333d2b36SAndroid Build Coastguard Worker
303*333d2b36SAndroid Build Coastguard Worker	platformOnProductPath := "libsysprop-platform-on-product/android_product_arm64_armv8-a_static/gen/sysprop/public/include"
304*333d2b36SAndroid Build Coastguard Worker
305*333d2b36SAndroid Build Coastguard Worker	vendorInternalPath := "libsysprop-vendor/android_vendor_arm64_armv8-a_static/gen/sysprop/include"
306*333d2b36SAndroid Build Coastguard Worker	vendorOnProductPath := "libsysprop-vendor-on-product/android_product_arm64_armv8-a_static/gen/sysprop/public/include"
307*333d2b36SAndroid Build Coastguard Worker
308*333d2b36SAndroid Build Coastguard Worker	platformClient := result.ModuleForTests("cc-client-platform", coreVariant)
309*333d2b36SAndroid Build Coastguard Worker	platformFlags := platformClient.Rule("cc").Args["cFlags"]
310*333d2b36SAndroid Build Coastguard Worker
311*333d2b36SAndroid Build Coastguard Worker	// platform should use platform's internal header
312*333d2b36SAndroid Build Coastguard Worker	android.AssertStringDoesContain(t, "flags for platform", platformFlags, platformInternalPath)
313*333d2b36SAndroid Build Coastguard Worker
314*333d2b36SAndroid Build Coastguard Worker	platformStaticClient := result.ModuleForTests("cc-client-platform-static", coreVariant)
315*333d2b36SAndroid Build Coastguard Worker	platformStaticFlags := platformStaticClient.Rule("cc").Args["cFlags"]
316*333d2b36SAndroid Build Coastguard Worker
317*333d2b36SAndroid Build Coastguard Worker	// platform-static should use platform's internal header
318*333d2b36SAndroid Build Coastguard Worker	android.AssertStringDoesContain(t, "flags for platform-static", platformStaticFlags, platformInternalPath)
319*333d2b36SAndroid Build Coastguard Worker
320*333d2b36SAndroid Build Coastguard Worker	productClient := result.ModuleForTests("cc-client-product", productVariant)
321*333d2b36SAndroid Build Coastguard Worker	productFlags := productClient.Rule("cc").Args["cFlags"]
322*333d2b36SAndroid Build Coastguard Worker
323*333d2b36SAndroid Build Coastguard Worker	// Product should use platform's and vendor's public headers
324*333d2b36SAndroid Build Coastguard Worker	if !strings.Contains(productFlags, platformOnProductPath) ||
325*333d2b36SAndroid Build Coastguard Worker		!strings.Contains(productFlags, vendorOnProductPath) {
326*333d2b36SAndroid Build Coastguard Worker		t.Errorf("flags for product must contain %#v and %#v, but was %#v.",
327*333d2b36SAndroid Build Coastguard Worker			platformOnProductPath, vendorOnProductPath, productFlags)
328*333d2b36SAndroid Build Coastguard Worker	}
329*333d2b36SAndroid Build Coastguard Worker
330*333d2b36SAndroid Build Coastguard Worker	vendorClient := result.ModuleForTests("cc-client-vendor", vendorVariant)
331*333d2b36SAndroid Build Coastguard Worker	vendorFlags := vendorClient.Rule("cc").Args["cFlags"]
332*333d2b36SAndroid Build Coastguard Worker
333*333d2b36SAndroid Build Coastguard Worker	// Vendor should use platform's public header and vendor's internal header
334*333d2b36SAndroid Build Coastguard Worker	if !strings.Contains(vendorFlags, platformPublicVendorPath) ||
335*333d2b36SAndroid Build Coastguard Worker		!strings.Contains(vendorFlags, vendorInternalPath) {
336*333d2b36SAndroid Build Coastguard Worker		t.Errorf("flags for vendor must contain %#v and %#v, but was %#v.",
337*333d2b36SAndroid Build Coastguard Worker			platformPublicVendorPath, vendorInternalPath, vendorFlags)
338*333d2b36SAndroid Build Coastguard Worker	}
339*333d2b36SAndroid Build Coastguard Worker
340*333d2b36SAndroid Build Coastguard Worker	// Java modules linking against system API should use public stub
341*333d2b36SAndroid Build Coastguard Worker	javaSystemApiClient := result.ModuleForTests("java-platform", "android_common").Rule("javac")
342*333d2b36SAndroid Build Coastguard Worker	syspropPlatformPublic := result.ModuleForTests("sysprop-platform_public", "android_common").Description("for turbine")
343*333d2b36SAndroid Build Coastguard Worker	if g, w := javaSystemApiClient.Implicits.Strings(), syspropPlatformPublic.Output.String(); !android.InList(w, g) {
344*333d2b36SAndroid Build Coastguard Worker		t.Errorf("system api client should use public stub %q, got %q", w, g)
345*333d2b36SAndroid Build Coastguard Worker	}
346*333d2b36SAndroid Build Coastguard Worker}
347*333d2b36SAndroid Build Coastguard Worker
348*333d2b36SAndroid Build Coastguard Workerfunc TestApexAvailabilityIsForwarded(t *testing.T) {
349*333d2b36SAndroid Build Coastguard Worker	result := test(t, `
350*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
351*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-platform",
352*333d2b36SAndroid Build Coastguard Worker			apex_available: ["//apex_available:platform"],
353*333d2b36SAndroid Build Coastguard Worker			srcs: ["android/sysprop/PlatformProperties.sysprop"],
354*333d2b36SAndroid Build Coastguard Worker			api_packages: ["android.sysprop"],
355*333d2b36SAndroid Build Coastguard Worker			property_owner: "Platform",
356*333d2b36SAndroid Build Coastguard Worker		}
357*333d2b36SAndroid Build Coastguard Worker	`)
358*333d2b36SAndroid Build Coastguard Worker
359*333d2b36SAndroid Build Coastguard Worker	expected := []string{"//apex_available:platform"}
360*333d2b36SAndroid Build Coastguard Worker
361*333d2b36SAndroid Build Coastguard Worker	ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
362*333d2b36SAndroid Build Coastguard Worker	propFromCc := ccModule.ApexProperties.Apex_available
363*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "apex_available forwarding to cc module", expected, propFromCc)
364*333d2b36SAndroid Build Coastguard Worker
365*333d2b36SAndroid Build Coastguard Worker	javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
366*333d2b36SAndroid Build Coastguard Worker	propFromJava := javaModule.ApexProperties.Apex_available
367*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "apex_available forwarding to java module", expected, propFromJava)
368*333d2b36SAndroid Build Coastguard Worker
369*333d2b36SAndroid Build Coastguard Worker	rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module)
370*333d2b36SAndroid Build Coastguard Worker	propFromRust := rustModule.ApexProperties.Apex_available
371*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "apex_available forwarding to rust module", expected, propFromRust)
372*333d2b36SAndroid Build Coastguard Worker}
373*333d2b36SAndroid Build Coastguard Worker
374*333d2b36SAndroid Build Coastguard Workerfunc TestMinSdkVersionIsForwarded(t *testing.T) {
375*333d2b36SAndroid Build Coastguard Worker	result := test(t, `
376*333d2b36SAndroid Build Coastguard Worker		sysprop_library {
377*333d2b36SAndroid Build Coastguard Worker			name: "sysprop-platform",
378*333d2b36SAndroid Build Coastguard Worker			srcs: ["android/sysprop/PlatformProperties.sysprop"],
379*333d2b36SAndroid Build Coastguard Worker			api_packages: ["android.sysprop"],
380*333d2b36SAndroid Build Coastguard Worker			property_owner: "Platform",
381*333d2b36SAndroid Build Coastguard Worker			cpp: {
382*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "29",
383*333d2b36SAndroid Build Coastguard Worker			},
384*333d2b36SAndroid Build Coastguard Worker			java: {
385*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "30",
386*333d2b36SAndroid Build Coastguard Worker			},
387*333d2b36SAndroid Build Coastguard Worker			rust: {
388*333d2b36SAndroid Build Coastguard Worker				min_sdk_version: "29",
389*333d2b36SAndroid Build Coastguard Worker			}
390*333d2b36SAndroid Build Coastguard Worker		}
391*333d2b36SAndroid Build Coastguard Worker	`)
392*333d2b36SAndroid Build Coastguard Worker
393*333d2b36SAndroid Build Coastguard Worker	ccModule := result.ModuleForTests("libsysprop-platform", "android_arm64_armv8-a_shared").Module().(*cc.Module)
394*333d2b36SAndroid Build Coastguard Worker	propFromCc := proptools.String(ccModule.Properties.Min_sdk_version)
395*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "min_sdk_version forwarding to cc module", "29", propFromCc)
396*333d2b36SAndroid Build Coastguard Worker
397*333d2b36SAndroid Build Coastguard Worker	javaModule := result.ModuleForTests("sysprop-platform", "android_common").Module().(*java.Library)
398*333d2b36SAndroid Build Coastguard Worker	propFromJava := javaModule.MinSdkVersionString()
399*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "min_sdk_version forwarding to java module", "30", propFromJava)
400*333d2b36SAndroid Build Coastguard Worker
401*333d2b36SAndroid Build Coastguard Worker	rustModule := result.ModuleForTests("libsysprop_platform_rust", "android_arm64_armv8-a_rlib_rlib-std").Module().(*rust.Module)
402*333d2b36SAndroid Build Coastguard Worker	propFromRust := proptools.String(rustModule.Properties.Min_sdk_version)
403*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "min_sdk_version forwarding to rust module", "29", propFromRust)
404*333d2b36SAndroid Build Coastguard Worker}
405