blob: ef4d7cd4515e88380216c7d03cabe22508b06ba1 [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"],
55 java_boot_libs: ["mybootlib"],
56 }
57
58 apex {
59 name: "com.android.art",
60 key: "com.android.art.key",
61 bootclasspath_fragments: [
62 "mybootclasspathfragment",
63 ],
64 updatable: false,
65 }
66
67 bootclasspath_fragment {
68 name: "mybootclasspathfragment",
69 image_name: "art",
70 apex_available: ["com.android.art"],
71 }
72
73 apex_key {
74 name: "com.android.art.key",
75 public_key: "com.android.art.avbpubkey",
76 private_key: "com.android.art.pem",
77 }
78
79 java_library {
80 name: "mybootlib",
81 srcs: ["Test.java"],
82 system_modules: "none",
83 sdk_version: "none",
84 compile_dex: true,
85 apex_available: ["com.android.art"],
86 }
87 `),
88 ).RunTest(t)
89
Paul Duffin023dba02021-04-22 01:45:29 +010090 // A preparer to add a prebuilt apex to the test fixture.
91 prepareWithPrebuiltApex := android.GroupFixturePreparers(
92 android.FixtureAddTextFile("prebuilts/apex/Android.bp", `
93 prebuilt_apex {
94 name: "com.android.art",
95 src: "art.apex",
96 exported_java_libs: [
97 "mybootlib",
98 ],
99 exported_bootclasspath_fragments: [
100 "mybootclasspathfragment",
101 ],
102 }
103 `),
104 android.FixtureAddFile("prebuilts/apex/art.apex", nil),
105 )
106
Paul Duffina57835e2021-04-19 13:23:06 +0100107 CheckSnapshot(t, result, "mysdk", "",
108 checkUnversionedAndroidBpContents(`
109// This is auto-generated. DO NOT EDIT.
110
111prebuilt_bootclasspath_fragment {
112 name: "mybootclasspathfragment",
113 prefer: false,
114 visibility: ["//visibility:public"],
115 apex_available: ["com.android.art"],
116 image_name: "art",
117}
118
119java_import {
120 name: "mybootlib",
121 prefer: false,
122 visibility: ["//visibility:public"],
123 apex_available: ["com.android.art"],
124 jars: ["java/mybootlib.jar"],
125}
126`),
127 checkVersionedAndroidBpContents(`
128// This is auto-generated. DO NOT EDIT.
129
130prebuilt_bootclasspath_fragment {
131 name: "mysdk_mybootclasspathfragment@current",
132 sdk_member_name: "mybootclasspathfragment",
133 visibility: ["//visibility:public"],
134 apex_available: ["com.android.art"],
135 image_name: "art",
136}
137
138java_import {
139 name: "mysdk_mybootlib@current",
140 sdk_member_name: "mybootlib",
141 visibility: ["//visibility:public"],
142 apex_available: ["com.android.art"],
143 jars: ["java/mybootlib.jar"],
144}
145
146sdk_snapshot {
147 name: "mysdk@current",
148 visibility: ["//visibility:public"],
149 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
150 java_boot_libs: ["mysdk_mybootlib@current"],
151}
152`),
153 checkAllCopyRules(`
154.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
155`),
Paul Duffin023dba02021-04-22 01:45:29 +0100156 snapshotTestPreparer(checkSnapshotWithoutSource, prepareWithPrebuiltApex),
157 snapshotTestPreparer(checkSnapshotWithSourcePreferred, prepareWithPrebuiltApex),
158 snapshotTestPreparer(checkSnapshotPreferredWithSource, prepareWithPrebuiltApex),
Paul Duffina57835e2021-04-19 13:23:06 +0100159 )
160}
161
162func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000163 result := android.GroupFixturePreparers(
164 prepareForSdkTestWithJava,
165 android.FixtureWithRootAndroidBp(`
166 sdk {
167 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100168 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +0100169 java_boot_libs: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000170 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000171
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100172 bootclasspath_fragment {
173 name: "mybootclasspathfragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100174 contents: ["mybootlib"],
175 }
176
177 java_library {
178 name: "mybootlib",
179 srcs: ["Test.java"],
180 system_modules: "none",
181 sdk_version: "none",
182 compile_dex: true,
Paul Duffin4a1d4512021-03-18 10:12:26 +0000183 }
184 `),
185 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000186
Paul Duffin36474d32021-03-12 12:19:43 +0000187 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000188 checkUnversionedAndroidBpContents(`
189// This is auto-generated. DO NOT EDIT.
190
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100191prebuilt_bootclasspath_fragment {
192 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000193 prefer: false,
194 visibility: ["//visibility:public"],
195 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100196 contents: ["mybootlib"],
197}
198
199java_import {
200 name: "mybootlib",
201 prefer: false,
202 visibility: ["//visibility:public"],
203 apex_available: ["//apex_available:platform"],
204 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000205}
206`),
207 checkVersionedAndroidBpContents(`
208// This is auto-generated. DO NOT EDIT.
209
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100210prebuilt_bootclasspath_fragment {
211 name: "mysdk_mybootclasspathfragment@current",
212 sdk_member_name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000213 visibility: ["//visibility:public"],
214 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100215 contents: ["mysdk_mybootlib@current"],
216}
217
218java_import {
219 name: "mysdk_mybootlib@current",
220 sdk_member_name: "mybootlib",
221 visibility: ["//visibility:public"],
222 apex_available: ["//apex_available:platform"],
223 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000224}
225
226sdk_snapshot {
227 name: "mysdk@current",
228 visibility: ["//visibility:public"],
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100229 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100230 java_boot_libs: ["mysdk_mybootlib@current"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000231}
232`),
Paul Duffina57835e2021-04-19 13:23:06 +0100233 checkAllCopyRules(`
234.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
235`))
Paul Duffinf7f65da2021-03-10 15:00:46 +0000236}
Paul Duffin04b4a192021-03-18 11:05:31 +0000237
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100238// Test that bootclasspath_fragment works with sdk.
239func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000240 android.GroupFixturePreparers(
241 prepareForSdkTestWithApex,
242 prepareForSdkTestWithJava,
243 android.FixtureWithRootAndroidBp(`
244 sdk {
245 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100246 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000247 }
248
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100249 bootclasspath_fragment {
250 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000251 image_name: "art",
252 apex_available: ["myapex"],
253 }
254
255 sdk_snapshot {
256 name: "mysdk@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100257 bootclasspath_fragments: ["mybootclasspathfragment_mysdk_1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000258 }
259
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100260 prebuilt_bootclasspath_fragment {
261 name: "mybootclasspathfragment_mysdk_1",
262 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000263 prefer: false,
264 visibility: ["//visibility:public"],
265 apex_available: [
266 "myapex",
267 ],
268 image_name: "art",
269 }
270 `),
271 ).RunTest(t)
272}
Paul Duffin7c955552021-04-19 13:23:53 +0100273
274func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
275 result := android.GroupFixturePreparers(
276 prepareForSdkTestWithJava,
277 android.MockFS{
278 "my-blocked.txt": nil,
279 "my-max-target-o-low-priority.txt": nil,
280 "my-max-target-p.txt": nil,
281 "my-max-target-q.txt": nil,
282 "my-max-target-r-low-priority.txt": nil,
283 "my-removed.txt": nil,
284 "my-unsupported-packages.txt": nil,
285 "my-unsupported.txt": nil,
286 }.AddToFixture(),
287 android.FixtureWithRootAndroidBp(`
288 sdk {
289 name: "mysdk",
290 bootclasspath_fragments: ["mybootclasspathfragment"],
291 java_boot_libs: ["mybootlib"],
292 }
293
294 bootclasspath_fragment {
295 name: "mybootclasspathfragment",
296 contents: ["mybootlib"],
297 hidden_api: {
298 unsupported: [
299 "my-unsupported.txt",
300 ],
301 removed: [
302 "my-removed.txt",
303 ],
304 max_target_r_low_priority: [
305 "my-max-target-r-low-priority.txt",
306 ],
307 max_target_q: [
308 "my-max-target-q.txt",
309 ],
310 max_target_p: [
311 "my-max-target-p.txt",
312 ],
313 max_target_o_low_priority: [
314 "my-max-target-o-low-priority.txt",
315 ],
316 blocked: [
317 "my-blocked.txt",
318 ],
319 unsupported_packages: [
320 "my-unsupported-packages.txt",
321 ],
322 },
323 }
324
325 java_library {
326 name: "mybootlib",
327 srcs: ["Test.java"],
328 system_modules: "none",
329 sdk_version: "none",
330 compile_dex: true,
331 }
332 `),
333 ).RunTest(t)
334
335 CheckSnapshot(t, result, "mysdk", "",
336 checkUnversionedAndroidBpContents(`
337// This is auto-generated. DO NOT EDIT.
338
339prebuilt_bootclasspath_fragment {
340 name: "mybootclasspathfragment",
341 prefer: false,
342 visibility: ["//visibility:public"],
343 apex_available: ["//apex_available:platform"],
344 contents: ["mybootlib"],
345 hidden_api: {
346 unsupported: ["hiddenapi/my-unsupported.txt"],
347 removed: ["hiddenapi/my-removed.txt"],
348 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
349 max_target_q: ["hiddenapi/my-max-target-q.txt"],
350 max_target_p: ["hiddenapi/my-max-target-p.txt"],
351 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
352 blocked: ["hiddenapi/my-blocked.txt"],
353 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
354 },
355}
356
357java_import {
358 name: "mybootlib",
359 prefer: false,
360 visibility: ["//visibility:public"],
361 apex_available: ["//apex_available:platform"],
362 jars: ["java/mybootlib.jar"],
363}
364`),
365 checkAllCopyRules(`
366my-unsupported.txt -> hiddenapi/my-unsupported.txt
367my-removed.txt -> hiddenapi/my-removed.txt
368my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
369my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
370my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
371my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
372my-blocked.txt -> hiddenapi/my-blocked.txt
373my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
374.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
375`),
376 )
377}