xref: /aosp_15_r20/build/soong/apex/aconfig_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 Google Inc. All rights reserved.
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 apex
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"testing"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"android/soong/aconfig/codegen"
21*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/cc"
23*333d2b36SAndroid Build Coastguard Worker	"android/soong/genrule"
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 Workervar withAconfigValidationError = android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
31*333d2b36SAndroid Build Coastguard Worker	variables.AconfigContainerValidation = "error"
32*333d2b36SAndroid Build Coastguard Worker	variables.BuildId = proptools.StringPtr("TEST.BUILD_ID")
33*333d2b36SAndroid Build Coastguard Worker})
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Workerfunc TestValidationAcrossContainersExportedPass(t *testing.T) {
36*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
37*333d2b36SAndroid Build Coastguard Worker	testCases := []struct {
38*333d2b36SAndroid Build Coastguard Worker		name string
39*333d2b36SAndroid Build Coastguard Worker		bp   string
40*333d2b36SAndroid Build Coastguard Worker	}{
41*333d2b36SAndroid Build Coastguard Worker		{
42*333d2b36SAndroid Build Coastguard Worker			name: "Java lib passes for exported containers cross",
43*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
44*333d2b36SAndroid Build Coastguard Worker				apex {
45*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
46*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
47*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
48*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
49*333d2b36SAndroid Build Coastguard Worker					java_libs: [
50*333d2b36SAndroid Build Coastguard Worker						"my_java_library_foo",
51*333d2b36SAndroid Build Coastguard Worker					],
52*333d2b36SAndroid Build Coastguard Worker					updatable: false,
53*333d2b36SAndroid Build Coastguard Worker				}
54*333d2b36SAndroid Build Coastguard Worker				java_library {
55*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_foo",
56*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
57*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
58*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
59*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_aconfig_library_foo"],
60*333d2b36SAndroid Build Coastguard Worker					apex_available: [
61*333d2b36SAndroid Build Coastguard Worker						"myapex",
62*333d2b36SAndroid Build Coastguard Worker					],
63*333d2b36SAndroid Build Coastguard Worker					compile_dex: true,
64*333d2b36SAndroid Build Coastguard Worker				}
65*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
66*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
67*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
68*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
69*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo.aconfig"],
70*333d2b36SAndroid Build Coastguard Worker					exportable: true,
71*333d2b36SAndroid Build Coastguard Worker				}
72*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
73*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_foo",
74*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
75*333d2b36SAndroid Build Coastguard Worker					mode: "exported",
76*333d2b36SAndroid Build Coastguard Worker					apex_available: [
77*333d2b36SAndroid Build Coastguard Worker						"myapex",
78*333d2b36SAndroid Build Coastguard Worker					],
79*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
80*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
81*333d2b36SAndroid Build Coastguard Worker				}`,
82*333d2b36SAndroid Build Coastguard Worker		},
83*333d2b36SAndroid Build Coastguard Worker		{
84*333d2b36SAndroid Build Coastguard Worker			name: "Android app passes for exported containers cross",
85*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
86*333d2b36SAndroid Build Coastguard Worker				apex {
87*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
88*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
89*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
90*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
91*333d2b36SAndroid Build Coastguard Worker					apps: [
92*333d2b36SAndroid Build Coastguard Worker						"my_android_app_foo",
93*333d2b36SAndroid Build Coastguard Worker					],
94*333d2b36SAndroid Build Coastguard Worker					updatable: false,
95*333d2b36SAndroid Build Coastguard Worker				}
96*333d2b36SAndroid Build Coastguard Worker				android_app {
97*333d2b36SAndroid Build Coastguard Worker					name: "my_android_app_foo",
98*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/MyClass.java"],
99*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
100*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
101*333d2b36SAndroid Build Coastguard Worker					stl: "none",
102*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_library_bar"],
103*333d2b36SAndroid Build Coastguard Worker					apex_available: [ "myapex" ],
104*333d2b36SAndroid Build Coastguard Worker				}
105*333d2b36SAndroid Build Coastguard Worker				java_library {
106*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_bar",
107*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
108*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
109*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
110*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_aconfig_library_bar"],
111*333d2b36SAndroid Build Coastguard Worker					apex_available: [
112*333d2b36SAndroid Build Coastguard Worker						"myapex",
113*333d2b36SAndroid Build Coastguard Worker					],
114*333d2b36SAndroid Build Coastguard Worker				}
115*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
116*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_bar",
117*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
118*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
119*333d2b36SAndroid Build Coastguard Worker					srcs: ["bar.aconfig"],
120*333d2b36SAndroid Build Coastguard Worker					exportable: true,
121*333d2b36SAndroid Build Coastguard Worker				}
122*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
123*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_bar",
124*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_bar",
125*333d2b36SAndroid Build Coastguard Worker					mode: "exported",
126*333d2b36SAndroid Build Coastguard Worker					apex_available: [
127*333d2b36SAndroid Build Coastguard Worker						"myapex",
128*333d2b36SAndroid Build Coastguard Worker					],
129*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
130*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
131*333d2b36SAndroid Build Coastguard Worker				}`,
132*333d2b36SAndroid Build Coastguard Worker		},
133*333d2b36SAndroid Build Coastguard Worker		{
134*333d2b36SAndroid Build Coastguard Worker			name: "Cc lib passes for exported containers cross",
135*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
136*333d2b36SAndroid Build Coastguard Worker				apex {
137*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
138*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
139*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
140*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
141*333d2b36SAndroid Build Coastguard Worker					native_shared_libs: [
142*333d2b36SAndroid Build Coastguard Worker						"my_cc_library_bar",
143*333d2b36SAndroid Build Coastguard Worker					],
144*333d2b36SAndroid Build Coastguard Worker					binaries: [
145*333d2b36SAndroid Build Coastguard Worker						"my_cc_binary_baz",
146*333d2b36SAndroid Build Coastguard Worker					],
147*333d2b36SAndroid Build Coastguard Worker					updatable: false,
148*333d2b36SAndroid Build Coastguard Worker				}
149*333d2b36SAndroid Build Coastguard Worker				cc_library {
150*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_library_bar",
151*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.cc"],
152*333d2b36SAndroid Build Coastguard Worker					static_libs: [
153*333d2b36SAndroid Build Coastguard Worker						"my_cc_aconfig_library_bar",
154*333d2b36SAndroid Build Coastguard Worker						"my_cc_aconfig_library_baz",
155*333d2b36SAndroid Build Coastguard Worker					],
156*333d2b36SAndroid Build Coastguard Worker					apex_available: [
157*333d2b36SAndroid Build Coastguard Worker						"myapex",
158*333d2b36SAndroid Build Coastguard Worker					],
159*333d2b36SAndroid Build Coastguard Worker				}
160*333d2b36SAndroid Build Coastguard Worker				cc_binary {
161*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_binary_baz",
162*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.cc"],
163*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_cc_aconfig_library_baz"],
164*333d2b36SAndroid Build Coastguard Worker					apex_available: [
165*333d2b36SAndroid Build Coastguard Worker						"myapex",
166*333d2b36SAndroid Build Coastguard Worker					],
167*333d2b36SAndroid Build Coastguard Worker				}
168*333d2b36SAndroid Build Coastguard Worker				cc_library {
169*333d2b36SAndroid Build Coastguard Worker					name: "server_configurable_flags",
170*333d2b36SAndroid Build Coastguard Worker					srcs: ["server_configurable_flags.cc"],
171*333d2b36SAndroid Build Coastguard Worker				}
172*333d2b36SAndroid Build Coastguard Worker				cc_library {
173*333d2b36SAndroid Build Coastguard Worker					name: "libbase",
174*333d2b36SAndroid Build Coastguard Worker					srcs: ["libbase.cc"],
175*333d2b36SAndroid Build Coastguard Worker			                apex_available: [
176*333d2b36SAndroid Build Coastguard Worker				            "myapex",
177*333d2b36SAndroid Build Coastguard Worker			                ],
178*333d2b36SAndroid Build Coastguard Worker				}
179*333d2b36SAndroid Build Coastguard Worker				cc_library {
180*333d2b36SAndroid Build Coastguard Worker					name: "libaconfig_storage_read_api_cc",
181*333d2b36SAndroid Build Coastguard Worker					srcs: ["libaconfig_storage_read_api_cc.cc"],
182*333d2b36SAndroid Build Coastguard Worker				}
183*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
184*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_bar",
185*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
186*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
187*333d2b36SAndroid Build Coastguard Worker					srcs: ["bar.aconfig"],
188*333d2b36SAndroid Build Coastguard Worker					exportable: true,
189*333d2b36SAndroid Build Coastguard Worker				}
190*333d2b36SAndroid Build Coastguard Worker				cc_aconfig_library {
191*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_aconfig_library_bar",
192*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_bar",
193*333d2b36SAndroid Build Coastguard Worker					apex_available: [
194*333d2b36SAndroid Build Coastguard Worker						"myapex",
195*333d2b36SAndroid Build Coastguard Worker					],
196*333d2b36SAndroid Build Coastguard Worker					mode: "exported",
197*333d2b36SAndroid Build Coastguard Worker				}
198*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
199*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_baz",
200*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
201*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
202*333d2b36SAndroid Build Coastguard Worker					srcs: ["baz.aconfig"],
203*333d2b36SAndroid Build Coastguard Worker					exportable: true,
204*333d2b36SAndroid Build Coastguard Worker				}
205*333d2b36SAndroid Build Coastguard Worker				cc_aconfig_library {
206*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_aconfig_library_baz",
207*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_baz",
208*333d2b36SAndroid Build Coastguard Worker					apex_available: [
209*333d2b36SAndroid Build Coastguard Worker						"myapex",
210*333d2b36SAndroid Build Coastguard Worker					],
211*333d2b36SAndroid Build Coastguard Worker					mode: "exported",
212*333d2b36SAndroid Build Coastguard Worker				}`,
213*333d2b36SAndroid Build Coastguard Worker		},
214*333d2b36SAndroid Build Coastguard Worker		{
215*333d2b36SAndroid Build Coastguard Worker			name: "Rust lib passes for exported containers cross",
216*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
217*333d2b36SAndroid Build Coastguard Worker			apex {
218*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
219*333d2b36SAndroid Build Coastguard Worker				manifest: ":myapex.manifest",
220*333d2b36SAndroid Build Coastguard Worker				androidManifest: ":myapex.androidmanifest",
221*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
222*333d2b36SAndroid Build Coastguard Worker				native_shared_libs: ["libmy_rust_library"],
223*333d2b36SAndroid Build Coastguard Worker				binaries: ["my_rust_binary"],
224*333d2b36SAndroid Build Coastguard Worker				updatable: false,
225*333d2b36SAndroid Build Coastguard Worker			}
226*333d2b36SAndroid Build Coastguard Worker			rust_library {
227*333d2b36SAndroid Build Coastguard Worker				name: "libflags_rust", // test mock
228*333d2b36SAndroid Build Coastguard Worker				crate_name: "flags_rust",
229*333d2b36SAndroid Build Coastguard Worker				srcs: ["lib.rs"],
230*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
231*333d2b36SAndroid Build Coastguard Worker			}
232*333d2b36SAndroid Build Coastguard Worker			rust_library {
233*333d2b36SAndroid Build Coastguard Worker				name: "liblazy_static", // test mock
234*333d2b36SAndroid Build Coastguard Worker				crate_name: "lazy_static",
235*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
236*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
237*333d2b36SAndroid Build Coastguard Worker			}
238*333d2b36SAndroid Build Coastguard Worker			rust_library {
239*333d2b36SAndroid Build Coastguard Worker				name: "libaconfig_storage_read_api", // test mock
240*333d2b36SAndroid Build Coastguard Worker				crate_name: "aconfig_storage_read_api",
241*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
242*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
243*333d2b36SAndroid Build Coastguard Worker			}
244*333d2b36SAndroid Build Coastguard Worker			rust_library {
245*333d2b36SAndroid Build Coastguard Worker				name: "liblogger", // test mock
246*333d2b36SAndroid Build Coastguard Worker				crate_name: "logger",
247*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
248*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
249*333d2b36SAndroid Build Coastguard Worker			}
250*333d2b36SAndroid Build Coastguard Worker			rust_library {
251*333d2b36SAndroid Build Coastguard Worker				name: "liblog_rust", // test mock
252*333d2b36SAndroid Build Coastguard Worker				crate_name: "log_rust",
253*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
254*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
255*333d2b36SAndroid Build Coastguard Worker                        }
256*333d2b36SAndroid Build Coastguard Worker			rust_ffi_shared {
257*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_library",
258*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
259*333d2b36SAndroid Build Coastguard Worker				rustlibs: ["libmy_rust_aconfig_library_foo"],
260*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_library",
261*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
262*333d2b36SAndroid Build Coastguard Worker			}
263*333d2b36SAndroid Build Coastguard Worker			rust_binary {
264*333d2b36SAndroid Build Coastguard Worker				name: "my_rust_binary",
265*333d2b36SAndroid Build Coastguard Worker				srcs: ["foo/bar/MyClass.rs"],
266*333d2b36SAndroid Build Coastguard Worker				rustlibs: ["libmy_rust_aconfig_library_bar"],
267*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
268*333d2b36SAndroid Build Coastguard Worker			}
269*333d2b36SAndroid Build Coastguard Worker			aconfig_declarations {
270*333d2b36SAndroid Build Coastguard Worker				name: "my_aconfig_declarations_foo",
271*333d2b36SAndroid Build Coastguard Worker				package: "com.example.package",
272*333d2b36SAndroid Build Coastguard Worker				container: "otherapex",
273*333d2b36SAndroid Build Coastguard Worker				srcs: ["foo.aconfig"],
274*333d2b36SAndroid Build Coastguard Worker			}
275*333d2b36SAndroid Build Coastguard Worker			aconfig_declarations {
276*333d2b36SAndroid Build Coastguard Worker				name: "my_aconfig_declarations_bar",
277*333d2b36SAndroid Build Coastguard Worker				package: "com.example.package",
278*333d2b36SAndroid Build Coastguard Worker				container: "otherapex",
279*333d2b36SAndroid Build Coastguard Worker				srcs: ["bar.aconfig"],
280*333d2b36SAndroid Build Coastguard Worker			}
281*333d2b36SAndroid Build Coastguard Worker			rust_aconfig_library {
282*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_aconfig_library_foo",
283*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations: "my_aconfig_declarations_foo",
284*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_aconfig_library_foo",
285*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
286*333d2b36SAndroid Build Coastguard Worker				mode: "exported",
287*333d2b36SAndroid Build Coastguard Worker			}
288*333d2b36SAndroid Build Coastguard Worker			rust_aconfig_library {
289*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_aconfig_library_bar",
290*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations: "my_aconfig_declarations_bar",
291*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_aconfig_library_bar",
292*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
293*333d2b36SAndroid Build Coastguard Worker				mode: "exported",
294*333d2b36SAndroid Build Coastguard Worker			}`,
295*333d2b36SAndroid Build Coastguard Worker		},
296*333d2b36SAndroid Build Coastguard Worker	}
297*333d2b36SAndroid Build Coastguard Worker	for _, test := range testCases {
298*333d2b36SAndroid Build Coastguard Worker		t.Run(test.name, func(t *testing.T) {
299*333d2b36SAndroid Build Coastguard Worker			t.Parallel()
300*333d2b36SAndroid Build Coastguard Worker			android.GroupFixturePreparers(
301*333d2b36SAndroid Build Coastguard Worker				java.PrepareForTestWithJavaDefaultModules,
302*333d2b36SAndroid Build Coastguard Worker				cc.PrepareForTestWithCcBuildComponents,
303*333d2b36SAndroid Build Coastguard Worker				rust.PrepareForTestWithRustDefaultModules,
304*333d2b36SAndroid Build Coastguard Worker				codegen.PrepareForTestWithAconfigBuildComponents,
305*333d2b36SAndroid Build Coastguard Worker				PrepareForTestWithApexBuildComponents,
306*333d2b36SAndroid Build Coastguard Worker				prepareForTestWithMyapex,
307*333d2b36SAndroid Build Coastguard Worker				withAconfigValidationError,
308*333d2b36SAndroid Build Coastguard Worker			).
309*333d2b36SAndroid Build Coastguard Worker				RunTestWithBp(t, test.bp)
310*333d2b36SAndroid Build Coastguard Worker		})
311*333d2b36SAndroid Build Coastguard Worker	}
312*333d2b36SAndroid Build Coastguard Worker}
313*333d2b36SAndroid Build Coastguard Worker
314*333d2b36SAndroid Build Coastguard Workerfunc TestValidationAcrossContainersNotExportedFail(t *testing.T) {
315*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
316*333d2b36SAndroid Build Coastguard Worker	testCases := []struct {
317*333d2b36SAndroid Build Coastguard Worker		name          string
318*333d2b36SAndroid Build Coastguard Worker		expectedError string
319*333d2b36SAndroid Build Coastguard Worker		bp            string
320*333d2b36SAndroid Build Coastguard Worker	}{
321*333d2b36SAndroid Build Coastguard Worker		{
322*333d2b36SAndroid Build Coastguard Worker			name: "Java lib fails for non-exported containers cross",
323*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
324*333d2b36SAndroid Build Coastguard Worker				apex {
325*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
326*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
327*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
328*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
329*333d2b36SAndroid Build Coastguard Worker					java_libs: [
330*333d2b36SAndroid Build Coastguard Worker						"my_java_library_foo",
331*333d2b36SAndroid Build Coastguard Worker					],
332*333d2b36SAndroid Build Coastguard Worker					updatable: false,
333*333d2b36SAndroid Build Coastguard Worker				}
334*333d2b36SAndroid Build Coastguard Worker				java_library {
335*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_foo",
336*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
337*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
338*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
339*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_aconfig_library_foo"],
340*333d2b36SAndroid Build Coastguard Worker					apex_available: [
341*333d2b36SAndroid Build Coastguard Worker						"myapex",
342*333d2b36SAndroid Build Coastguard Worker					],
343*333d2b36SAndroid Build Coastguard Worker					compile_dex: true,
344*333d2b36SAndroid Build Coastguard Worker				}
345*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
346*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
347*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
348*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
349*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo.aconfig"],
350*333d2b36SAndroid Build Coastguard Worker				}
351*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
352*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_foo",
353*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
354*333d2b36SAndroid Build Coastguard Worker					apex_available: [
355*333d2b36SAndroid Build Coastguard Worker						"myapex",
356*333d2b36SAndroid Build Coastguard Worker					],
357*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
358*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
359*333d2b36SAndroid Build Coastguard Worker				}`,
360*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*my_java_library_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
361*333d2b36SAndroid Build Coastguard Worker		},
362*333d2b36SAndroid Build Coastguard Worker		{
363*333d2b36SAndroid Build Coastguard Worker			name: "Android app fails for non-exported containers cross",
364*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
365*333d2b36SAndroid Build Coastguard Worker				apex {
366*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
367*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
368*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
369*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
370*333d2b36SAndroid Build Coastguard Worker					apps: [
371*333d2b36SAndroid Build Coastguard Worker						"my_android_app_foo",
372*333d2b36SAndroid Build Coastguard Worker					],
373*333d2b36SAndroid Build Coastguard Worker					updatable: false,
374*333d2b36SAndroid Build Coastguard Worker				}
375*333d2b36SAndroid Build Coastguard Worker				android_app {
376*333d2b36SAndroid Build Coastguard Worker					name: "my_android_app_foo",
377*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/MyClass.java"],
378*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
379*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
380*333d2b36SAndroid Build Coastguard Worker					stl: "none",
381*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_library_foo"],
382*333d2b36SAndroid Build Coastguard Worker					apex_available: [ "myapex" ],
383*333d2b36SAndroid Build Coastguard Worker				}
384*333d2b36SAndroid Build Coastguard Worker				java_library {
385*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_foo",
386*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
387*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
388*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
389*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_aconfig_library_foo"],
390*333d2b36SAndroid Build Coastguard Worker					apex_available: [
391*333d2b36SAndroid Build Coastguard Worker						"myapex",
392*333d2b36SAndroid Build Coastguard Worker					],
393*333d2b36SAndroid Build Coastguard Worker				}
394*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
395*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
396*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
397*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
398*333d2b36SAndroid Build Coastguard Worker					srcs: ["bar.aconfig"],
399*333d2b36SAndroid Build Coastguard Worker				}
400*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
401*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_foo",
402*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
403*333d2b36SAndroid Build Coastguard Worker					apex_available: [
404*333d2b36SAndroid Build Coastguard Worker						"myapex",
405*333d2b36SAndroid Build Coastguard Worker					],
406*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
407*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
408*333d2b36SAndroid Build Coastguard Worker				}`,
409*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
410*333d2b36SAndroid Build Coastguard Worker		},
411*333d2b36SAndroid Build Coastguard Worker		{
412*333d2b36SAndroid Build Coastguard Worker			name: "Cc lib fails for non-exported containers cross",
413*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
414*333d2b36SAndroid Build Coastguard Worker				apex {
415*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
416*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
417*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
418*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
419*333d2b36SAndroid Build Coastguard Worker					native_shared_libs: [
420*333d2b36SAndroid Build Coastguard Worker						"my_cc_library_foo",
421*333d2b36SAndroid Build Coastguard Worker					],
422*333d2b36SAndroid Build Coastguard Worker					updatable: false,
423*333d2b36SAndroid Build Coastguard Worker				}
424*333d2b36SAndroid Build Coastguard Worker				cc_library {
425*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_library_foo",
426*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.cc"],
427*333d2b36SAndroid Build Coastguard Worker					shared_libs: [
428*333d2b36SAndroid Build Coastguard Worker						"my_cc_aconfig_library_foo",
429*333d2b36SAndroid Build Coastguard Worker					],
430*333d2b36SAndroid Build Coastguard Worker					apex_available: [
431*333d2b36SAndroid Build Coastguard Worker						"myapex",
432*333d2b36SAndroid Build Coastguard Worker					],
433*333d2b36SAndroid Build Coastguard Worker				}
434*333d2b36SAndroid Build Coastguard Worker				cc_library {
435*333d2b36SAndroid Build Coastguard Worker					name: "server_configurable_flags",
436*333d2b36SAndroid Build Coastguard Worker					srcs: ["server_configurable_flags.cc"],
437*333d2b36SAndroid Build Coastguard Worker				}
438*333d2b36SAndroid Build Coastguard Worker				cc_library {
439*333d2b36SAndroid Build Coastguard Worker					name: "libbase",
440*333d2b36SAndroid Build Coastguard Worker					srcs: ["libbase.cc"],
441*333d2b36SAndroid Build Coastguard Worker			                apex_available: [
442*333d2b36SAndroid Build Coastguard Worker				            "myapex",
443*333d2b36SAndroid Build Coastguard Worker			                ],
444*333d2b36SAndroid Build Coastguard Worker				}
445*333d2b36SAndroid Build Coastguard Worker				cc_library {
446*333d2b36SAndroid Build Coastguard Worker					name: "libaconfig_storage_read_api_cc",
447*333d2b36SAndroid Build Coastguard Worker					srcs: ["libaconfig_storage_read_api_cc.cc"],
448*333d2b36SAndroid Build Coastguard Worker				}
449*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
450*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
451*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
452*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
453*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo.aconfig"],
454*333d2b36SAndroid Build Coastguard Worker				}
455*333d2b36SAndroid Build Coastguard Worker				cc_aconfig_library {
456*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_aconfig_library_foo",
457*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
458*333d2b36SAndroid Build Coastguard Worker					apex_available: [
459*333d2b36SAndroid Build Coastguard Worker						"myapex",
460*333d2b36SAndroid Build Coastguard Worker					],
461*333d2b36SAndroid Build Coastguard Worker				}`,
462*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*my_cc_library_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`,
463*333d2b36SAndroid Build Coastguard Worker		},
464*333d2b36SAndroid Build Coastguard Worker		{
465*333d2b36SAndroid Build Coastguard Worker			name: "Cc binary fails for non-exported containers cross",
466*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
467*333d2b36SAndroid Build Coastguard Worker				apex {
468*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
469*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
470*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
471*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
472*333d2b36SAndroid Build Coastguard Worker					binaries: [
473*333d2b36SAndroid Build Coastguard Worker						"my_cc_binary_foo",
474*333d2b36SAndroid Build Coastguard Worker					],
475*333d2b36SAndroid Build Coastguard Worker					updatable: false,
476*333d2b36SAndroid Build Coastguard Worker				}
477*333d2b36SAndroid Build Coastguard Worker				cc_library {
478*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_library_foo",
479*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.cc"],
480*333d2b36SAndroid Build Coastguard Worker					static_libs: [
481*333d2b36SAndroid Build Coastguard Worker						"my_cc_aconfig_library_foo",
482*333d2b36SAndroid Build Coastguard Worker					],
483*333d2b36SAndroid Build Coastguard Worker					apex_available: [
484*333d2b36SAndroid Build Coastguard Worker						"myapex",
485*333d2b36SAndroid Build Coastguard Worker					],
486*333d2b36SAndroid Build Coastguard Worker				}
487*333d2b36SAndroid Build Coastguard Worker				cc_binary {
488*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_binary_foo",
489*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.cc"],
490*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_cc_library_foo"],
491*333d2b36SAndroid Build Coastguard Worker					apex_available: [
492*333d2b36SAndroid Build Coastguard Worker						"myapex",
493*333d2b36SAndroid Build Coastguard Worker					],
494*333d2b36SAndroid Build Coastguard Worker				}
495*333d2b36SAndroid Build Coastguard Worker				cc_library {
496*333d2b36SAndroid Build Coastguard Worker					name: "server_configurable_flags",
497*333d2b36SAndroid Build Coastguard Worker					srcs: ["server_configurable_flags.cc"],
498*333d2b36SAndroid Build Coastguard Worker				}
499*333d2b36SAndroid Build Coastguard Worker				cc_library {
500*333d2b36SAndroid Build Coastguard Worker					name: "libbase",
501*333d2b36SAndroid Build Coastguard Worker					srcs: ["libbase.cc"],
502*333d2b36SAndroid Build Coastguard Worker			                apex_available: [
503*333d2b36SAndroid Build Coastguard Worker				            "myapex",
504*333d2b36SAndroid Build Coastguard Worker			                ],
505*333d2b36SAndroid Build Coastguard Worker				}
506*333d2b36SAndroid Build Coastguard Worker				cc_library {
507*333d2b36SAndroid Build Coastguard Worker					name: "libaconfig_storage_read_api_cc",
508*333d2b36SAndroid Build Coastguard Worker					srcs: ["libaconfig_storage_read_api_cc.cc"],
509*333d2b36SAndroid Build Coastguard Worker				}
510*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
511*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
512*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
513*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
514*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo.aconfig"],
515*333d2b36SAndroid Build Coastguard Worker				}
516*333d2b36SAndroid Build Coastguard Worker				cc_aconfig_library {
517*333d2b36SAndroid Build Coastguard Worker					name: "my_cc_aconfig_library_foo",
518*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
519*333d2b36SAndroid Build Coastguard Worker					apex_available: [
520*333d2b36SAndroid Build Coastguard Worker						"myapex",
521*333d2b36SAndroid Build Coastguard Worker					],
522*333d2b36SAndroid Build Coastguard Worker				}`,
523*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*my_cc_binary_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`,
524*333d2b36SAndroid Build Coastguard Worker		},
525*333d2b36SAndroid Build Coastguard Worker		{
526*333d2b36SAndroid Build Coastguard Worker			name: "Rust lib fails for non-exported containers cross",
527*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
528*333d2b36SAndroid Build Coastguard Worker			apex {
529*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
530*333d2b36SAndroid Build Coastguard Worker				manifest: ":myapex.manifest",
531*333d2b36SAndroid Build Coastguard Worker				androidManifest: ":myapex.androidmanifest",
532*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
533*333d2b36SAndroid Build Coastguard Worker				native_shared_libs: ["libmy_rust_library"],
534*333d2b36SAndroid Build Coastguard Worker				updatable: false,
535*333d2b36SAndroid Build Coastguard Worker			}
536*333d2b36SAndroid Build Coastguard Worker			rust_library {
537*333d2b36SAndroid Build Coastguard Worker				name: "libflags_rust", // test mock
538*333d2b36SAndroid Build Coastguard Worker				crate_name: "flags_rust",
539*333d2b36SAndroid Build Coastguard Worker				srcs: ["lib.rs"],
540*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
541*333d2b36SAndroid Build Coastguard Worker			}
542*333d2b36SAndroid Build Coastguard Worker			rust_library {
543*333d2b36SAndroid Build Coastguard Worker				name: "liblazy_static", // test mock
544*333d2b36SAndroid Build Coastguard Worker				crate_name: "lazy_static",
545*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
546*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
547*333d2b36SAndroid Build Coastguard Worker			}
548*333d2b36SAndroid Build Coastguard Worker			rust_library {
549*333d2b36SAndroid Build Coastguard Worker				name: "libaconfig_storage_read_api", // test mock
550*333d2b36SAndroid Build Coastguard Worker				crate_name: "aconfig_storage_read_api",
551*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
552*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
553*333d2b36SAndroid Build Coastguard Worker			}
554*333d2b36SAndroid Build Coastguard Worker			rust_library {
555*333d2b36SAndroid Build Coastguard Worker				name: "liblogger", // test mock
556*333d2b36SAndroid Build Coastguard Worker				crate_name: "logger",
557*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
558*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
559*333d2b36SAndroid Build Coastguard Worker			}
560*333d2b36SAndroid Build Coastguard Worker			rust_library {
561*333d2b36SAndroid Build Coastguard Worker				name: "liblog_rust", // test mock
562*333d2b36SAndroid Build Coastguard Worker				crate_name: "log_rust",
563*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
564*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
565*333d2b36SAndroid Build Coastguard Worker			}
566*333d2b36SAndroid Build Coastguard Worker			rust_ffi_shared {
567*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_library",
568*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
569*333d2b36SAndroid Build Coastguard Worker				rustlibs: ["libmy_rust_aconfig_library_foo"],
570*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_library",
571*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
572*333d2b36SAndroid Build Coastguard Worker			}
573*333d2b36SAndroid Build Coastguard Worker			aconfig_declarations {
574*333d2b36SAndroid Build Coastguard Worker				name: "my_aconfig_declarations_foo",
575*333d2b36SAndroid Build Coastguard Worker				package: "com.example.package",
576*333d2b36SAndroid Build Coastguard Worker				container: "otherapex",
577*333d2b36SAndroid Build Coastguard Worker				srcs: ["foo.aconfig"],
578*333d2b36SAndroid Build Coastguard Worker			}
579*333d2b36SAndroid Build Coastguard Worker			rust_aconfig_library {
580*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_aconfig_library_foo",
581*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations: "my_aconfig_declarations_foo",
582*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_aconfig_library_foo",
583*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
584*333d2b36SAndroid Build Coastguard Worker			}`,
585*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*libmy_rust_aconfig_library_foo/myapex depends on libmy_rust_aconfig_library_foo/otherapex/production across containers`,
586*333d2b36SAndroid Build Coastguard Worker		},
587*333d2b36SAndroid Build Coastguard Worker		{
588*333d2b36SAndroid Build Coastguard Worker			name: "Rust binary fails for non-exported containers cross",
589*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
590*333d2b36SAndroid Build Coastguard Worker			apex {
591*333d2b36SAndroid Build Coastguard Worker				name: "myapex",
592*333d2b36SAndroid Build Coastguard Worker				manifest: ":myapex.manifest",
593*333d2b36SAndroid Build Coastguard Worker				androidManifest: ":myapex.androidmanifest",
594*333d2b36SAndroid Build Coastguard Worker				key: "myapex.key",
595*333d2b36SAndroid Build Coastguard Worker				binaries: ["my_rust_binary"],
596*333d2b36SAndroid Build Coastguard Worker				updatable: false,
597*333d2b36SAndroid Build Coastguard Worker			}
598*333d2b36SAndroid Build Coastguard Worker			rust_library {
599*333d2b36SAndroid Build Coastguard Worker				name: "libflags_rust", // test mock
600*333d2b36SAndroid Build Coastguard Worker				crate_name: "flags_rust",
601*333d2b36SAndroid Build Coastguard Worker				srcs: ["lib.rs"],
602*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
603*333d2b36SAndroid Build Coastguard Worker			}
604*333d2b36SAndroid Build Coastguard Worker			rust_library {
605*333d2b36SAndroid Build Coastguard Worker				name: "liblazy_static", // test mock
606*333d2b36SAndroid Build Coastguard Worker				crate_name: "lazy_static",
607*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
608*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
609*333d2b36SAndroid Build Coastguard Worker			}
610*333d2b36SAndroid Build Coastguard Worker			rust_library {
611*333d2b36SAndroid Build Coastguard Worker				name: "libaconfig_storage_read_api", // test mock
612*333d2b36SAndroid Build Coastguard Worker				crate_name: "aconfig_storage_read_api",
613*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
614*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
615*333d2b36SAndroid Build Coastguard Worker			}
616*333d2b36SAndroid Build Coastguard Worker			rust_library {
617*333d2b36SAndroid Build Coastguard Worker				name: "liblogger", // test mock
618*333d2b36SAndroid Build Coastguard Worker				crate_name: "logger",
619*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
620*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
621*333d2b36SAndroid Build Coastguard Worker			}
622*333d2b36SAndroid Build Coastguard Worker			rust_library {
623*333d2b36SAndroid Build Coastguard Worker				name: "liblog_rust", // test mock
624*333d2b36SAndroid Build Coastguard Worker				crate_name: "log_rust",
625*333d2b36SAndroid Build Coastguard Worker				srcs: ["src/lib.rs"],
626*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
627*333d2b36SAndroid Build Coastguard Worker			}
628*333d2b36SAndroid Build Coastguard Worker			rust_binary {
629*333d2b36SAndroid Build Coastguard Worker				name: "my_rust_binary",
630*333d2b36SAndroid Build Coastguard Worker				srcs: ["foo/bar/MyClass.rs"],
631*333d2b36SAndroid Build Coastguard Worker				rustlibs: ["libmy_rust_aconfig_library_bar"],
632*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
633*333d2b36SAndroid Build Coastguard Worker			}
634*333d2b36SAndroid Build Coastguard Worker			aconfig_declarations {
635*333d2b36SAndroid Build Coastguard Worker				name: "my_aconfig_declarations_bar",
636*333d2b36SAndroid Build Coastguard Worker				package: "com.example.package",
637*333d2b36SAndroid Build Coastguard Worker				container: "otherapex",
638*333d2b36SAndroid Build Coastguard Worker				srcs: ["bar.aconfig"],
639*333d2b36SAndroid Build Coastguard Worker			}
640*333d2b36SAndroid Build Coastguard Worker			rust_aconfig_library {
641*333d2b36SAndroid Build Coastguard Worker				name: "libmy_rust_aconfig_library_bar",
642*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations: "my_aconfig_declarations_bar",
643*333d2b36SAndroid Build Coastguard Worker				crate_name: "my_rust_aconfig_library_bar",
644*333d2b36SAndroid Build Coastguard Worker				apex_available: ["myapex"],
645*333d2b36SAndroid Build Coastguard Worker			}`,
646*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*libmy_rust_aconfig_library_bar/myapex depends on libmy_rust_aconfig_library_bar/otherapex/production across containers`,
647*333d2b36SAndroid Build Coastguard Worker		},
648*333d2b36SAndroid Build Coastguard Worker		{
649*333d2b36SAndroid Build Coastguard Worker			name: "Aconfig validation propagate along sourceOrOutputDependencyTag",
650*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
651*333d2b36SAndroid Build Coastguard Worker				apex {
652*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
653*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
654*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
655*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
656*333d2b36SAndroid Build Coastguard Worker					apps: [
657*333d2b36SAndroid Build Coastguard Worker						"my_android_app_foo",
658*333d2b36SAndroid Build Coastguard Worker					],
659*333d2b36SAndroid Build Coastguard Worker					updatable: false,
660*333d2b36SAndroid Build Coastguard Worker				}
661*333d2b36SAndroid Build Coastguard Worker				android_app {
662*333d2b36SAndroid Build Coastguard Worker					name: "my_android_app_foo",
663*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/MyClass.java"],
664*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
665*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
666*333d2b36SAndroid Build Coastguard Worker					stl: "none",
667*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_library_foo"],
668*333d2b36SAndroid Build Coastguard Worker					apex_available: [ "myapex" ],
669*333d2b36SAndroid Build Coastguard Worker				}
670*333d2b36SAndroid Build Coastguard Worker				java_library {
671*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_foo",
672*333d2b36SAndroid Build Coastguard Worker					srcs: [":my_genrule_foo"],
673*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
674*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
675*333d2b36SAndroid Build Coastguard Worker					apex_available: [
676*333d2b36SAndroid Build Coastguard Worker						"myapex",
677*333d2b36SAndroid Build Coastguard Worker					],
678*333d2b36SAndroid Build Coastguard Worker				}
679*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations_group {
680*333d2b36SAndroid Build Coastguard Worker						name: "my_aconfig_declarations_group_foo",
681*333d2b36SAndroid Build Coastguard Worker						java_aconfig_libraries: [
682*333d2b36SAndroid Build Coastguard Worker								"my_java_aconfig_library_foo",
683*333d2b36SAndroid Build Coastguard Worker						],
684*333d2b36SAndroid Build Coastguard Worker				}
685*333d2b36SAndroid Build Coastguard Worker				filegroup {
686*333d2b36SAndroid Build Coastguard Worker						name: "my_filegroup_foo_srcjars",
687*333d2b36SAndroid Build Coastguard Worker						device_common_srcs: [
688*333d2b36SAndroid Build Coastguard Worker								":my_aconfig_declarations_group_foo{.srcjars}",
689*333d2b36SAndroid Build Coastguard Worker						],
690*333d2b36SAndroid Build Coastguard Worker				}
691*333d2b36SAndroid Build Coastguard Worker				genrule {
692*333d2b36SAndroid Build Coastguard Worker						name: "my_genrule_foo",
693*333d2b36SAndroid Build Coastguard Worker						srcs: [":my_filegroup_foo_srcjars"],
694*333d2b36SAndroid Build Coastguard Worker						cmd: "cp $(in) $(out)",
695*333d2b36SAndroid Build Coastguard Worker						out: ["my_genrule_foo.srcjar"],
696*333d2b36SAndroid Build Coastguard Worker				}
697*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
698*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
699*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
700*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
701*333d2b36SAndroid Build Coastguard Worker					srcs: ["bar.aconfig"],
702*333d2b36SAndroid Build Coastguard Worker				}
703*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
704*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_foo",
705*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
706*333d2b36SAndroid Build Coastguard Worker					apex_available: [
707*333d2b36SAndroid Build Coastguard Worker						"myapex",
708*333d2b36SAndroid Build Coastguard Worker					],
709*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
710*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
711*333d2b36SAndroid Build Coastguard Worker				}`,
712*333d2b36SAndroid Build Coastguard Worker			expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
713*333d2b36SAndroid Build Coastguard Worker		},
714*333d2b36SAndroid Build Coastguard Worker	}
715*333d2b36SAndroid Build Coastguard Worker	for _, test := range testCases {
716*333d2b36SAndroid Build Coastguard Worker		t.Run(test.name, func(t *testing.T) {
717*333d2b36SAndroid Build Coastguard Worker			t.Parallel()
718*333d2b36SAndroid Build Coastguard Worker			errorHandler := android.FixtureExpectsNoErrors
719*333d2b36SAndroid Build Coastguard Worker			if test.expectedError != "" {
720*333d2b36SAndroid Build Coastguard Worker				errorHandler = android.FixtureExpectsAtLeastOneErrorMatchingPattern(test.expectedError)
721*333d2b36SAndroid Build Coastguard Worker			}
722*333d2b36SAndroid Build Coastguard Worker			android.GroupFixturePreparers(
723*333d2b36SAndroid Build Coastguard Worker				java.PrepareForTestWithJavaDefaultModules,
724*333d2b36SAndroid Build Coastguard Worker				cc.PrepareForTestWithCcBuildComponents,
725*333d2b36SAndroid Build Coastguard Worker				rust.PrepareForTestWithRustDefaultModules,
726*333d2b36SAndroid Build Coastguard Worker				codegen.PrepareForTestWithAconfigBuildComponents,
727*333d2b36SAndroid Build Coastguard Worker				genrule.PrepareForIntegrationTestWithGenrule,
728*333d2b36SAndroid Build Coastguard Worker				PrepareForTestWithApexBuildComponents,
729*333d2b36SAndroid Build Coastguard Worker				prepareForTestWithMyapex,
730*333d2b36SAndroid Build Coastguard Worker				withAconfigValidationError,
731*333d2b36SAndroid Build Coastguard Worker			).
732*333d2b36SAndroid Build Coastguard Worker				ExtendWithErrorHandler(errorHandler).
733*333d2b36SAndroid Build Coastguard Worker				RunTestWithBp(t, test.bp)
734*333d2b36SAndroid Build Coastguard Worker		})
735*333d2b36SAndroid Build Coastguard Worker	}
736*333d2b36SAndroid Build Coastguard Worker}
737*333d2b36SAndroid Build Coastguard Worker
738*333d2b36SAndroid Build Coastguard Workerfunc TestValidationNotPropagateAcrossShared(t *testing.T) {
739*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
740*333d2b36SAndroid Build Coastguard Worker	testCases := []struct {
741*333d2b36SAndroid Build Coastguard Worker		name string
742*333d2b36SAndroid Build Coastguard Worker		bp   string
743*333d2b36SAndroid Build Coastguard Worker	}{
744*333d2b36SAndroid Build Coastguard Worker		{
745*333d2b36SAndroid Build Coastguard Worker			name: "Java shared lib not propagate aconfig validation",
746*333d2b36SAndroid Build Coastguard Worker			bp: apex_default_bp + `
747*333d2b36SAndroid Build Coastguard Worker				apex {
748*333d2b36SAndroid Build Coastguard Worker					name: "myapex",
749*333d2b36SAndroid Build Coastguard Worker					manifest: ":myapex.manifest",
750*333d2b36SAndroid Build Coastguard Worker					androidManifest: ":myapex.androidmanifest",
751*333d2b36SAndroid Build Coastguard Worker					key: "myapex.key",
752*333d2b36SAndroid Build Coastguard Worker					java_libs: [
753*333d2b36SAndroid Build Coastguard Worker						"my_java_library_bar",
754*333d2b36SAndroid Build Coastguard Worker					],
755*333d2b36SAndroid Build Coastguard Worker					updatable: false,
756*333d2b36SAndroid Build Coastguard Worker				}
757*333d2b36SAndroid Build Coastguard Worker				java_library {
758*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_bar",
759*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
760*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
761*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
762*333d2b36SAndroid Build Coastguard Worker					libs: ["my_java_library_foo"],
763*333d2b36SAndroid Build Coastguard Worker					apex_available: [
764*333d2b36SAndroid Build Coastguard Worker						"myapex",
765*333d2b36SAndroid Build Coastguard Worker					],
766*333d2b36SAndroid Build Coastguard Worker					compile_dex: true,
767*333d2b36SAndroid Build Coastguard Worker				}
768*333d2b36SAndroid Build Coastguard Worker				java_library {
769*333d2b36SAndroid Build Coastguard Worker					name: "my_java_library_foo",
770*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo/bar/MyClass.java"],
771*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
772*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
773*333d2b36SAndroid Build Coastguard Worker					static_libs: ["my_java_aconfig_library_foo"],
774*333d2b36SAndroid Build Coastguard Worker					apex_available: [
775*333d2b36SAndroid Build Coastguard Worker						"myapex",
776*333d2b36SAndroid Build Coastguard Worker					],
777*333d2b36SAndroid Build Coastguard Worker				}
778*333d2b36SAndroid Build Coastguard Worker				aconfig_declarations {
779*333d2b36SAndroid Build Coastguard Worker					name: "my_aconfig_declarations_foo",
780*333d2b36SAndroid Build Coastguard Worker					package: "com.example.package",
781*333d2b36SAndroid Build Coastguard Worker					container: "otherapex",
782*333d2b36SAndroid Build Coastguard Worker					srcs: ["foo.aconfig"],
783*333d2b36SAndroid Build Coastguard Worker				}
784*333d2b36SAndroid Build Coastguard Worker				java_aconfig_library {
785*333d2b36SAndroid Build Coastguard Worker					name: "my_java_aconfig_library_foo",
786*333d2b36SAndroid Build Coastguard Worker					aconfig_declarations: "my_aconfig_declarations_foo",
787*333d2b36SAndroid Build Coastguard Worker					apex_available: [
788*333d2b36SAndroid Build Coastguard Worker						"myapex",
789*333d2b36SAndroid Build Coastguard Worker					],
790*333d2b36SAndroid Build Coastguard Worker					sdk_version: "none",
791*333d2b36SAndroid Build Coastguard Worker					system_modules: "none",
792*333d2b36SAndroid Build Coastguard Worker				}`,
793*333d2b36SAndroid Build Coastguard Worker		},
794*333d2b36SAndroid Build Coastguard Worker	}
795*333d2b36SAndroid Build Coastguard Worker	for _, test := range testCases {
796*333d2b36SAndroid Build Coastguard Worker		t.Run(test.name, func(t *testing.T) {
797*333d2b36SAndroid Build Coastguard Worker			t.Parallel()
798*333d2b36SAndroid Build Coastguard Worker			android.GroupFixturePreparers(
799*333d2b36SAndroid Build Coastguard Worker				java.PrepareForTestWithJavaDefaultModules,
800*333d2b36SAndroid Build Coastguard Worker				cc.PrepareForTestWithCcBuildComponents,
801*333d2b36SAndroid Build Coastguard Worker				rust.PrepareForTestWithRustDefaultModules,
802*333d2b36SAndroid Build Coastguard Worker				codegen.PrepareForTestWithAconfigBuildComponents,
803*333d2b36SAndroid Build Coastguard Worker				PrepareForTestWithApexBuildComponents,
804*333d2b36SAndroid Build Coastguard Worker				prepareForTestWithMyapex,
805*333d2b36SAndroid Build Coastguard Worker				withAconfigValidationError,
806*333d2b36SAndroid Build Coastguard Worker			).
807*333d2b36SAndroid Build Coastguard Worker				RunTestWithBp(t, test.bp)
808*333d2b36SAndroid Build Coastguard Worker		})
809*333d2b36SAndroid Build Coastguard Worker	}
810*333d2b36SAndroid Build Coastguard Worker}
811