blob: 28275672b3b0af734edcbf9a27c93184243ec6cc [file] [log] [blame]
Paul Duffinf7f65da2021-03-10 15:00:46 +00001// Copyright (C) 2021 The Android Open Source Project
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 sdk
16
Paul Duffin4a1d4512021-03-18 10:12:26 +000017import (
18 "testing"
19
20 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010021 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000022)
Paul Duffinf7f65da2021-03-10 15:00:46 +000023
Paul Duffina57835e2021-04-19 13:23:06 +010024func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
25 result := android.GroupFixturePreparers(
26 prepareForSdkTestWithJava,
Paul Duffin023dba02021-04-22 01:45:29 +010027 java.PrepareForTestWithJavaDefaultModules,
Paul Duffina57835e2021-04-19 13:23:06 +010028 prepareForSdkTestWithApex,
29
30 // Some additional files needed for the art apex.
31 android.FixtureMergeMockFs(android.MockFS{
32 "com.android.art.avbpubkey": nil,
33 "com.android.art.pem": nil,
34 "system/sepolicy/apex/com.android.art-file_contexts": nil,
35 }),
Paul Duffin023dba02021-04-22 01:45:29 +010036
37 // platform_bootclasspath that depends on the fragment.
38 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", `
39 platform_bootclasspath {
40 name: "platform-bootclasspath",
41 fragments: [
42 {
43 apex: "com.android.art",
44 module: "mybootclasspathfragment",
45 },
46 ],
47 }
48 `),
Paul Duffin2ac45f02021-04-26 17:08:38 +010049 // Needed for platform_bootclasspath
50 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Paul Duffin023dba02021-04-22 01:45:29 +010051
Paul Duffina57835e2021-04-19 13:23:06 +010052 java.FixtureConfigureBootJars("com.android.art:mybootlib"),
53 android.FixtureWithRootAndroidBp(`
54 sdk {
55 name: "mysdk",
56 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010057 }
58
59 apex {
60 name: "com.android.art",
61 key: "com.android.art.key",
62 bootclasspath_fragments: [
63 "mybootclasspathfragment",
64 ],
65 updatable: false,
66 }
67
68 bootclasspath_fragment {
69 name: "mybootclasspathfragment",
70 image_name: "art",
71 apex_available: ["com.android.art"],
72 }
73
74 apex_key {
75 name: "com.android.art.key",
76 public_key: "com.android.art.avbpubkey",
77 private_key: "com.android.art.pem",
78 }
79
80 java_library {
81 name: "mybootlib",
82 srcs: ["Test.java"],
83 system_modules: "none",
84 sdk_version: "none",
85 compile_dex: true,
86 apex_available: ["com.android.art"],
87 }
88 `),
89 ).RunTest(t)
90
Paul Duffin023dba02021-04-22 01:45:29 +010091 // A preparer to add a prebuilt apex to the test fixture.
92 prepareWithPrebuiltApex := android.GroupFixturePreparers(
93 android.FixtureAddTextFile("prebuilts/apex/Android.bp", `
94 prebuilt_apex {
95 name: "com.android.art",
96 src: "art.apex",
97 exported_java_libs: [
98 "mybootlib",
99 ],
100 exported_bootclasspath_fragments: [
101 "mybootclasspathfragment",
102 ],
103 }
104 `),
105 android.FixtureAddFile("prebuilts/apex/art.apex", nil),
106 )
107
Paul Duffina57835e2021-04-19 13:23:06 +0100108 CheckSnapshot(t, result, "mysdk", "",
109 checkUnversionedAndroidBpContents(`
110// This is auto-generated. DO NOT EDIT.
111
112prebuilt_bootclasspath_fragment {
113 name: "mybootclasspathfragment",
114 prefer: false,
115 visibility: ["//visibility:public"],
116 apex_available: ["com.android.art"],
117 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100118 contents: ["mybootlib"],
Paul Duffina57835e2021-04-19 13:23:06 +0100119}
120
121java_import {
122 name: "mybootlib",
123 prefer: false,
124 visibility: ["//visibility:public"],
125 apex_available: ["com.android.art"],
126 jars: ["java/mybootlib.jar"],
127}
128`),
129 checkVersionedAndroidBpContents(`
130// This is auto-generated. DO NOT EDIT.
131
132prebuilt_bootclasspath_fragment {
133 name: "mysdk_mybootclasspathfragment@current",
134 sdk_member_name: "mybootclasspathfragment",
135 visibility: ["//visibility:public"],
136 apex_available: ["com.android.art"],
137 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100138 contents: ["mysdk_mybootlib@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100139}
140
141java_import {
142 name: "mysdk_mybootlib@current",
143 sdk_member_name: "mybootlib",
144 visibility: ["//visibility:public"],
145 apex_available: ["com.android.art"],
146 jars: ["java/mybootlib.jar"],
147}
148
149sdk_snapshot {
150 name: "mysdk@current",
151 visibility: ["//visibility:public"],
152 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
153 java_boot_libs: ["mysdk_mybootlib@current"],
154}
155`),
156 checkAllCopyRules(`
157.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
158`),
Paul Duffin023dba02021-04-22 01:45:29 +0100159 snapshotTestPreparer(checkSnapshotWithoutSource, prepareWithPrebuiltApex),
160 snapshotTestPreparer(checkSnapshotWithSourcePreferred, prepareWithPrebuiltApex),
161 snapshotTestPreparer(checkSnapshotPreferredWithSource, prepareWithPrebuiltApex),
Paul Duffina57835e2021-04-19 13:23:06 +0100162 )
163}
164
165func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000166 result := android.GroupFixturePreparers(
167 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100168 java.PrepareForTestWithJavaDefaultModules,
169 java.PrepareForTestWithJavaSdkLibraryFiles,
170 java.FixtureWithLastReleaseApis("mysdklibrary", "mycoreplatform"),
Paul Duffin4a1d4512021-03-18 10:12:26 +0000171 android.FixtureWithRootAndroidBp(`
172 sdk {
173 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100174 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin895c7142021-04-25 13:40:15 +0100175 java_sdk_libs: ["mysdklibrary", "mycoreplatform"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000176 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000177
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100178 bootclasspath_fragment {
179 name: "mybootclasspathfragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100180 contents: ["mybootlib"],
Paul Duffin895c7142021-04-25 13:40:15 +0100181 api: {
182 stub_libs: ["mysdklibrary"],
183 },
184 core_platform_api: {
185 stub_libs: ["mycoreplatform"],
186 },
Paul Duffina57835e2021-04-19 13:23:06 +0100187 }
188
189 java_library {
190 name: "mybootlib",
191 srcs: ["Test.java"],
192 system_modules: "none",
193 sdk_version: "none",
194 compile_dex: true,
Paul Duffin4a1d4512021-03-18 10:12:26 +0000195 }
Paul Duffin895c7142021-04-25 13:40:15 +0100196
197 java_sdk_library {
198 name: "mysdklibrary",
199 srcs: ["Test.java"],
200 compile_dex: true,
201 public: {enabled: true},
202 }
203
204 java_sdk_library {
205 name: "mycoreplatform",
206 srcs: ["Test.java"],
207 compile_dex: true,
208 public: {enabled: true},
209 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000210 `),
211 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000212
Paul Duffin36474d32021-03-12 12:19:43 +0000213 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000214 checkUnversionedAndroidBpContents(`
215// This is auto-generated. DO NOT EDIT.
216
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100217prebuilt_bootclasspath_fragment {
218 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000219 prefer: false,
220 visibility: ["//visibility:public"],
221 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100222 contents: ["mybootlib"],
Paul Duffin895c7142021-04-25 13:40:15 +0100223 api: {
224 stub_libs: ["mysdklibrary"],
225 },
226 core_platform_api: {
227 stub_libs: ["mycoreplatform"],
228 },
Paul Duffina57835e2021-04-19 13:23:06 +0100229}
230
231java_import {
232 name: "mybootlib",
233 prefer: false,
234 visibility: ["//visibility:public"],
235 apex_available: ["//apex_available:platform"],
236 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000237}
Paul Duffin895c7142021-04-25 13:40:15 +0100238
239java_sdk_library_import {
240 name: "mysdklibrary",
241 prefer: false,
242 visibility: ["//visibility:public"],
243 apex_available: ["//apex_available:platform"],
244 shared_library: true,
245 compile_dex: true,
246 public: {
247 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
248 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
249 current_api: "sdk_library/public/mysdklibrary.txt",
250 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
251 sdk_version: "current",
252 },
253}
254
255java_sdk_library_import {
256 name: "mycoreplatform",
257 prefer: false,
258 visibility: ["//visibility:public"],
259 apex_available: ["//apex_available:platform"],
260 shared_library: true,
261 compile_dex: true,
262 public: {
263 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
264 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
265 current_api: "sdk_library/public/mycoreplatform.txt",
266 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
267 sdk_version: "current",
268 },
269}
Paul Duffinf7f65da2021-03-10 15:00:46 +0000270`),
271 checkVersionedAndroidBpContents(`
272// This is auto-generated. DO NOT EDIT.
273
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100274prebuilt_bootclasspath_fragment {
275 name: "mysdk_mybootclasspathfragment@current",
276 sdk_member_name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000277 visibility: ["//visibility:public"],
278 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100279 contents: ["mysdk_mybootlib@current"],
Paul Duffin895c7142021-04-25 13:40:15 +0100280 api: {
281 stub_libs: ["mysdk_mysdklibrary@current"],
282 },
283 core_platform_api: {
284 stub_libs: ["mysdk_mycoreplatform@current"],
285 },
Paul Duffina57835e2021-04-19 13:23:06 +0100286}
287
288java_import {
289 name: "mysdk_mybootlib@current",
290 sdk_member_name: "mybootlib",
291 visibility: ["//visibility:public"],
292 apex_available: ["//apex_available:platform"],
293 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000294}
295
Paul Duffin895c7142021-04-25 13:40:15 +0100296java_sdk_library_import {
297 name: "mysdk_mysdklibrary@current",
298 sdk_member_name: "mysdklibrary",
299 visibility: ["//visibility:public"],
300 apex_available: ["//apex_available:platform"],
301 shared_library: true,
302 compile_dex: true,
303 public: {
304 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
305 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
306 current_api: "sdk_library/public/mysdklibrary.txt",
307 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
308 sdk_version: "current",
309 },
310}
311
312java_sdk_library_import {
313 name: "mysdk_mycoreplatform@current",
314 sdk_member_name: "mycoreplatform",
315 visibility: ["//visibility:public"],
316 apex_available: ["//apex_available:platform"],
317 shared_library: true,
318 compile_dex: true,
319 public: {
320 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
321 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
322 current_api: "sdk_library/public/mycoreplatform.txt",
323 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
324 sdk_version: "current",
325 },
326}
327
Paul Duffinf7f65da2021-03-10 15:00:46 +0000328sdk_snapshot {
329 name: "mysdk@current",
330 visibility: ["//visibility:public"],
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100331 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100332 java_boot_libs: ["mysdk_mybootlib@current"],
Paul Duffin895c7142021-04-25 13:40:15 +0100333 java_sdk_libs: [
334 "mysdk_mysdklibrary@current",
335 "mysdk_mycoreplatform@current",
336 ],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000337}
338`),
Paul Duffina57835e2021-04-19 13:23:06 +0100339 checkAllCopyRules(`
340.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
Paul Duffin895c7142021-04-25 13:40:15 +0100341.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
342.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
343.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
344.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
345.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
346.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffina57835e2021-04-19 13:23:06 +0100347`))
Paul Duffinf7f65da2021-03-10 15:00:46 +0000348}
Paul Duffin04b4a192021-03-18 11:05:31 +0000349
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100350// Test that bootclasspath_fragment works with sdk.
351func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000352 android.GroupFixturePreparers(
353 prepareForSdkTestWithApex,
354 prepareForSdkTestWithJava,
355 android.FixtureWithRootAndroidBp(`
356 sdk {
357 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100358 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000359 }
360
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100361 bootclasspath_fragment {
362 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000363 image_name: "art",
364 apex_available: ["myapex"],
365 }
366
367 sdk_snapshot {
368 name: "mysdk@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100369 bootclasspath_fragments: ["mybootclasspathfragment_mysdk_1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000370 }
371
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100372 prebuilt_bootclasspath_fragment {
373 name: "mybootclasspathfragment_mysdk_1",
374 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000375 prefer: false,
376 visibility: ["//visibility:public"],
377 apex_available: [
378 "myapex",
379 ],
380 image_name: "art",
381 }
382 `),
383 ).RunTest(t)
384}
Paul Duffin7c955552021-04-19 13:23:53 +0100385
386func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
387 result := android.GroupFixturePreparers(
388 prepareForSdkTestWithJava,
389 android.MockFS{
390 "my-blocked.txt": nil,
391 "my-max-target-o-low-priority.txt": nil,
392 "my-max-target-p.txt": nil,
393 "my-max-target-q.txt": nil,
394 "my-max-target-r-low-priority.txt": nil,
395 "my-removed.txt": nil,
396 "my-unsupported-packages.txt": nil,
397 "my-unsupported.txt": nil,
398 }.AddToFixture(),
399 android.FixtureWithRootAndroidBp(`
400 sdk {
401 name: "mysdk",
402 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100403 }
404
405 bootclasspath_fragment {
406 name: "mybootclasspathfragment",
407 contents: ["mybootlib"],
408 hidden_api: {
409 unsupported: [
410 "my-unsupported.txt",
411 ],
412 removed: [
413 "my-removed.txt",
414 ],
415 max_target_r_low_priority: [
416 "my-max-target-r-low-priority.txt",
417 ],
418 max_target_q: [
419 "my-max-target-q.txt",
420 ],
421 max_target_p: [
422 "my-max-target-p.txt",
423 ],
424 max_target_o_low_priority: [
425 "my-max-target-o-low-priority.txt",
426 ],
427 blocked: [
428 "my-blocked.txt",
429 ],
430 unsupported_packages: [
431 "my-unsupported-packages.txt",
432 ],
433 },
434 }
435
436 java_library {
437 name: "mybootlib",
438 srcs: ["Test.java"],
439 system_modules: "none",
440 sdk_version: "none",
441 compile_dex: true,
442 }
443 `),
444 ).RunTest(t)
445
446 CheckSnapshot(t, result, "mysdk", "",
447 checkUnversionedAndroidBpContents(`
448// This is auto-generated. DO NOT EDIT.
449
450prebuilt_bootclasspath_fragment {
451 name: "mybootclasspathfragment",
452 prefer: false,
453 visibility: ["//visibility:public"],
454 apex_available: ["//apex_available:platform"],
455 contents: ["mybootlib"],
456 hidden_api: {
457 unsupported: ["hiddenapi/my-unsupported.txt"],
458 removed: ["hiddenapi/my-removed.txt"],
459 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
460 max_target_q: ["hiddenapi/my-max-target-q.txt"],
461 max_target_p: ["hiddenapi/my-max-target-p.txt"],
462 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
463 blocked: ["hiddenapi/my-blocked.txt"],
464 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
465 },
466}
467
468java_import {
469 name: "mybootlib",
470 prefer: false,
471 visibility: ["//visibility:public"],
472 apex_available: ["//apex_available:platform"],
473 jars: ["java/mybootlib.jar"],
474}
475`),
476 checkAllCopyRules(`
477my-unsupported.txt -> hiddenapi/my-unsupported.txt
478my-removed.txt -> hiddenapi/my-removed.txt
479my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
480my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
481my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
482my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
483my-blocked.txt -> hiddenapi/my-blocked.txt
484my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
485.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
486`),
487 )
488}