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