blob: 5658f16e31d9f7c28aca4e4def333d6ba8dc411e [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,
168 android.FixtureWithRootAndroidBp(`
169 sdk {
170 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100171 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000172 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000173
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100174 bootclasspath_fragment {
175 name: "mybootclasspathfragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100176 contents: ["mybootlib"],
177 }
178
179 java_library {
180 name: "mybootlib",
181 srcs: ["Test.java"],
182 system_modules: "none",
183 sdk_version: "none",
184 compile_dex: true,
Paul Duffin4a1d4512021-03-18 10:12:26 +0000185 }
186 `),
187 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000188
Paul Duffin36474d32021-03-12 12:19:43 +0000189 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000190 checkUnversionedAndroidBpContents(`
191// This is auto-generated. DO NOT EDIT.
192
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100193prebuilt_bootclasspath_fragment {
194 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000195 prefer: false,
196 visibility: ["//visibility:public"],
197 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100198 contents: ["mybootlib"],
199}
200
201java_import {
202 name: "mybootlib",
203 prefer: false,
204 visibility: ["//visibility:public"],
205 apex_available: ["//apex_available:platform"],
206 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000207}
208`),
209 checkVersionedAndroidBpContents(`
210// This is auto-generated. DO NOT EDIT.
211
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100212prebuilt_bootclasspath_fragment {
213 name: "mysdk_mybootclasspathfragment@current",
214 sdk_member_name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000215 visibility: ["//visibility:public"],
216 apex_available: ["//apex_available:platform"],
Paul Duffina57835e2021-04-19 13:23:06 +0100217 contents: ["mysdk_mybootlib@current"],
218}
219
220java_import {
221 name: "mysdk_mybootlib@current",
222 sdk_member_name: "mybootlib",
223 visibility: ["//visibility:public"],
224 apex_available: ["//apex_available:platform"],
225 jars: ["java/mybootlib.jar"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000226}
227
228sdk_snapshot {
229 name: "mysdk@current",
230 visibility: ["//visibility:public"],
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100231 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
Paul Duffina57835e2021-04-19 13:23:06 +0100232 java_boot_libs: ["mysdk_mybootlib@current"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000233}
234`),
Paul Duffina57835e2021-04-19 13:23:06 +0100235 checkAllCopyRules(`
236.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
237`))
Paul Duffinf7f65da2021-03-10 15:00:46 +0000238}
Paul Duffin04b4a192021-03-18 11:05:31 +0000239
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100240// Test that bootclasspath_fragment works with sdk.
241func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000242 android.GroupFixturePreparers(
243 prepareForSdkTestWithApex,
244 prepareForSdkTestWithJava,
245 android.FixtureWithRootAndroidBp(`
246 sdk {
247 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100248 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000249 }
250
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100251 bootclasspath_fragment {
252 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000253 image_name: "art",
254 apex_available: ["myapex"],
255 }
256
257 sdk_snapshot {
258 name: "mysdk@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100259 bootclasspath_fragments: ["mybootclasspathfragment_mysdk_1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000260 }
261
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100262 prebuilt_bootclasspath_fragment {
263 name: "mybootclasspathfragment_mysdk_1",
264 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000265 prefer: false,
266 visibility: ["//visibility:public"],
267 apex_available: [
268 "myapex",
269 ],
270 image_name: "art",
271 }
272 `),
273 ).RunTest(t)
274}
Paul Duffin7c955552021-04-19 13:23:53 +0100275
276func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
277 result := android.GroupFixturePreparers(
278 prepareForSdkTestWithJava,
279 android.MockFS{
280 "my-blocked.txt": nil,
281 "my-max-target-o-low-priority.txt": nil,
282 "my-max-target-p.txt": nil,
283 "my-max-target-q.txt": nil,
284 "my-max-target-r-low-priority.txt": nil,
285 "my-removed.txt": nil,
286 "my-unsupported-packages.txt": nil,
287 "my-unsupported.txt": nil,
288 }.AddToFixture(),
289 android.FixtureWithRootAndroidBp(`
290 sdk {
291 name: "mysdk",
292 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100293 }
294
295 bootclasspath_fragment {
296 name: "mybootclasspathfragment",
297 contents: ["mybootlib"],
298 hidden_api: {
299 unsupported: [
300 "my-unsupported.txt",
301 ],
302 removed: [
303 "my-removed.txt",
304 ],
305 max_target_r_low_priority: [
306 "my-max-target-r-low-priority.txt",
307 ],
308 max_target_q: [
309 "my-max-target-q.txt",
310 ],
311 max_target_p: [
312 "my-max-target-p.txt",
313 ],
314 max_target_o_low_priority: [
315 "my-max-target-o-low-priority.txt",
316 ],
317 blocked: [
318 "my-blocked.txt",
319 ],
320 unsupported_packages: [
321 "my-unsupported-packages.txt",
322 ],
323 },
324 }
325
326 java_library {
327 name: "mybootlib",
328 srcs: ["Test.java"],
329 system_modules: "none",
330 sdk_version: "none",
331 compile_dex: true,
332 }
333 `),
334 ).RunTest(t)
335
336 CheckSnapshot(t, result, "mysdk", "",
337 checkUnversionedAndroidBpContents(`
338// This is auto-generated. DO NOT EDIT.
339
340prebuilt_bootclasspath_fragment {
341 name: "mybootclasspathfragment",
342 prefer: false,
343 visibility: ["//visibility:public"],
344 apex_available: ["//apex_available:platform"],
345 contents: ["mybootlib"],
346 hidden_api: {
347 unsupported: ["hiddenapi/my-unsupported.txt"],
348 removed: ["hiddenapi/my-removed.txt"],
349 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
350 max_target_q: ["hiddenapi/my-max-target-q.txt"],
351 max_target_p: ["hiddenapi/my-max-target-p.txt"],
352 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
353 blocked: ["hiddenapi/my-blocked.txt"],
354 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
355 },
356}
357
358java_import {
359 name: "mybootlib",
360 prefer: false,
361 visibility: ["//visibility:public"],
362 apex_available: ["//apex_available:platform"],
363 jars: ["java/mybootlib.jar"],
364}
365`),
366 checkAllCopyRules(`
367my-unsupported.txt -> hiddenapi/my-unsupported.txt
368my-removed.txt -> hiddenapi/my-removed.txt
369my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
370my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
371my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
372my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
373my-blocked.txt -> hiddenapi/my-blocked.txt
374my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
375.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
376`),
377 )
378}