blob: 6fb41411dff3d3e2bcc6500751f6bf00d8749229 [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 `),
49
Paul Duffina57835e2021-04-19 13:23:06 +010050 java.FixtureConfigureBootJars("com.android.art:mybootlib"),
51 android.FixtureWithRootAndroidBp(`
52 sdk {
53 name: "mysdk",
54 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010055 }
56
57 apex {
58 name: "com.android.art",
59 key: "com.android.art.key",
60 bootclasspath_fragments: [
61 "mybootclasspathfragment",
62 ],
63 updatable: false,
64 }
65
66 bootclasspath_fragment {
67 name: "mybootclasspathfragment",
68 image_name: "art",
69 apex_available: ["com.android.art"],
70 }
71
72 apex_key {
73 name: "com.android.art.key",
74 public_key: "com.android.art.avbpubkey",
75 private_key: "com.android.art.pem",
76 }
77
78 java_library {
79 name: "mybootlib",
80 srcs: ["Test.java"],
81 system_modules: "none",
82 sdk_version: "none",
83 compile_dex: true,
84 apex_available: ["com.android.art"],
85 }
86 `),
87 ).RunTest(t)
88
Paul Duffin023dba02021-04-22 01:45:29 +010089 // A preparer to add a prebuilt apex to the test fixture.
90 prepareWithPrebuiltApex := android.GroupFixturePreparers(
91 android.FixtureAddTextFile("prebuilts/apex/Android.bp", `
92 prebuilt_apex {
93 name: "com.android.art",
94 src: "art.apex",
95 exported_java_libs: [
96 "mybootlib",
97 ],
98 exported_bootclasspath_fragments: [
99 "mybootclasspathfragment",
100 ],
101 }
102 `),
103 android.FixtureAddFile("prebuilts/apex/art.apex", nil),
104 )
105
Paul Duffina57835e2021-04-19 13:23:06 +0100106 CheckSnapshot(t, result, "mysdk", "",
107 checkUnversionedAndroidBpContents(`
108// This is auto-generated. DO NOT EDIT.
109
110prebuilt_bootclasspath_fragment {
111 name: "mybootclasspathfragment",
112 prefer: false,
113 visibility: ["//visibility:public"],
114 apex_available: ["com.android.art"],
115 image_name: "art",
116}
117
118java_import {
119 name: "mybootlib",
120 prefer: false,
121 visibility: ["//visibility:public"],
122 apex_available: ["com.android.art"],
123 jars: ["java/mybootlib.jar"],
124}
125`),
126 checkVersionedAndroidBpContents(`
127// This is auto-generated. DO NOT EDIT.
128
129prebuilt_bootclasspath_fragment {
130 name: "mysdk_mybootclasspathfragment@current",
131 sdk_member_name: "mybootclasspathfragment",
132 visibility: ["//visibility:public"],
133 apex_available: ["com.android.art"],
134 image_name: "art",
135}
136
137java_import {
138 name: "mysdk_mybootlib@current",
139 sdk_member_name: "mybootlib",
140 visibility: ["//visibility:public"],
141 apex_available: ["com.android.art"],
142 jars: ["java/mybootlib.jar"],
143}
144
145sdk_snapshot {
146 name: "mysdk@current",
147 visibility: ["//visibility:public"],
148 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
149 java_boot_libs: ["mysdk_mybootlib@current"],
150}
151`),
152 checkAllCopyRules(`
153.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
154`),
Paul Duffin023dba02021-04-22 01:45:29 +0100155 snapshotTestPreparer(checkSnapshotWithoutSource, prepareWithPrebuiltApex),
156 snapshotTestPreparer(checkSnapshotWithSourcePreferred, prepareWithPrebuiltApex),
157 snapshotTestPreparer(checkSnapshotPreferredWithSource, prepareWithPrebuiltApex),
Paul Duffina57835e2021-04-19 13:23:06 +0100158 )
159}
160
161func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000162 result := android.GroupFixturePreparers(
163 prepareForSdkTestWithJava,
164 android.FixtureWithRootAndroidBp(`
165 sdk {
166 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100167 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000168 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000169
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100170 bootclasspath_fragment {
171 name: "mybootclasspathfragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100172 contents: ["mybootlib"],
173 }
174
175 java_library {
176 name: "mybootlib",
177 srcs: ["Test.java"],
178 system_modules: "none",
179 sdk_version: "none",
180 compile_dex: true,
Paul Duffin4a1d4512021-03-18 10:12:26 +0000181 }
182 `),
183 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000184
Paul Duffin36474d32021-03-12 12:19:43 +0000185 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000186 checkUnversionedAndroidBpContents(`
187// This is auto-generated. DO NOT EDIT.
188
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100189prebuilt_bootclasspath_fragment {
190 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000191 prefer: false,
192 visibility: ["//visibility:public"],
193 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100194 contents: ["mybootlib"],
195}
196
197java_import {
198 name: "mybootlib",
199 prefer: false,
200 visibility: ["//visibility:public"],
201 apex_available: ["//apex_available:platform"],
202 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000203}
204`),
205 checkVersionedAndroidBpContents(`
206// This is auto-generated. DO NOT EDIT.
207
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100208prebuilt_bootclasspath_fragment {
209 name: "mysdk_mybootclasspathfragment@current",
210 sdk_member_name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000211 visibility: ["//visibility:public"],
212 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100213 contents: ["mysdk_mybootlib@current"],
214}
215
216java_import {
217 name: "mysdk_mybootlib@current",
218 sdk_member_name: "mybootlib",
219 visibility: ["//visibility:public"],
220 apex_available: ["//apex_available:platform"],
221 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000222}
223
224sdk_snapshot {
225 name: "mysdk@current",
226 visibility: ["//visibility:public"],
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100227 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100228 java_boot_libs: ["mysdk_mybootlib@current"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000229}
230`),
Paul Duffina57835e2021-04-19 13:23:06 +0100231 checkAllCopyRules(`
232.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
233`))
Paul Duffinf7f65da2021-03-10 15:00:46 +0000234}
Paul Duffin04b4a192021-03-18 11:05:31 +0000235
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100236// Test that bootclasspath_fragment works with sdk.
237func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000238 android.GroupFixturePreparers(
239 prepareForSdkTestWithApex,
240 prepareForSdkTestWithJava,
241 android.FixtureWithRootAndroidBp(`
242 sdk {
243 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100244 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000245 }
246
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100247 bootclasspath_fragment {
248 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000249 image_name: "art",
250 apex_available: ["myapex"],
251 }
252
253 sdk_snapshot {
254 name: "mysdk@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100255 bootclasspath_fragments: ["mybootclasspathfragment_mysdk_1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000256 }
257
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100258 prebuilt_bootclasspath_fragment {
259 name: "mybootclasspathfragment_mysdk_1",
260 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000261 prefer: false,
262 visibility: ["//visibility:public"],
263 apex_available: [
264 "myapex",
265 ],
266 image_name: "art",
267 }
268 `),
269 ).RunTest(t)
270}
Paul Duffin7c955552021-04-19 13:23:53 +0100271
272func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
273 result := android.GroupFixturePreparers(
274 prepareForSdkTestWithJava,
275 android.MockFS{
276 "my-blocked.txt": nil,
277 "my-max-target-o-low-priority.txt": nil,
278 "my-max-target-p.txt": nil,
279 "my-max-target-q.txt": nil,
280 "my-max-target-r-low-priority.txt": nil,
281 "my-removed.txt": nil,
282 "my-unsupported-packages.txt": nil,
283 "my-unsupported.txt": nil,
284 }.AddToFixture(),
285 android.FixtureWithRootAndroidBp(`
286 sdk {
287 name: "mysdk",
288 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100289 }
290
291 bootclasspath_fragment {
292 name: "mybootclasspathfragment",
293 contents: ["mybootlib"],
294 hidden_api: {
295 unsupported: [
296 "my-unsupported.txt",
297 ],
298 removed: [
299 "my-removed.txt",
300 ],
301 max_target_r_low_priority: [
302 "my-max-target-r-low-priority.txt",
303 ],
304 max_target_q: [
305 "my-max-target-q.txt",
306 ],
307 max_target_p: [
308 "my-max-target-p.txt",
309 ],
310 max_target_o_low_priority: [
311 "my-max-target-o-low-priority.txt",
312 ],
313 blocked: [
314 "my-blocked.txt",
315 ],
316 unsupported_packages: [
317 "my-unsupported-packages.txt",
318 ],
319 },
320 }
321
322 java_library {
323 name: "mybootlib",
324 srcs: ["Test.java"],
325 system_modules: "none",
326 sdk_version: "none",
327 compile_dex: true,
328 }
329 `),
330 ).RunTest(t)
331
332 CheckSnapshot(t, result, "mysdk", "",
333 checkUnversionedAndroidBpContents(`
334// This is auto-generated. DO NOT EDIT.
335
336prebuilt_bootclasspath_fragment {
337 name: "mybootclasspathfragment",
338 prefer: false,
339 visibility: ["//visibility:public"],
340 apex_available: ["//apex_available:platform"],
341 contents: ["mybootlib"],
342 hidden_api: {
343 unsupported: ["hiddenapi/my-unsupported.txt"],
344 removed: ["hiddenapi/my-removed.txt"],
345 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
346 max_target_q: ["hiddenapi/my-max-target-q.txt"],
347 max_target_p: ["hiddenapi/my-max-target-p.txt"],
348 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
349 blocked: ["hiddenapi/my-blocked.txt"],
350 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
351 },
352}
353
354java_import {
355 name: "mybootlib",
356 prefer: false,
357 visibility: ["//visibility:public"],
358 apex_available: ["//apex_available:platform"],
359 jars: ["java/mybootlib.jar"],
360}
361`),
362 checkAllCopyRules(`
363my-unsupported.txt -> hiddenapi/my-unsupported.txt
364my-removed.txt -> hiddenapi/my-removed.txt
365my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
366my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
367my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
368my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
369my-blocked.txt -> hiddenapi/my-blocked.txt
370my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
371.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
372`),
373 )
374}