blob: a60039ac6eb0dfa00f86e3ab18361afcf866fdf0 [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 (
Paul Duffin7c475152021-06-09 16:17:58 +010018 "fmt"
19 "path/filepath"
Paul Duffin4a1d4512021-03-18 10:12:26 +000020 "testing"
21
22 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010023 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000024)
Paul Duffinf7f65da2021-03-10 15:00:46 +000025
Paul Duffin7c475152021-06-09 16:17:58 +010026// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
27// references the bootclasspath fragment.
28func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
29 return android.GroupFixturePreparers(
30 // Add a platform_bootclasspath module.
31 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
32 platform_bootclasspath {
33 name: "platform-bootclasspath",
34 fragments: [
35 {
36 apex: "%s",
37 module: "%s",
38 },
39 ],
40 }
41 `, apex, fragment)),
42 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000043 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010044 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010045 )
46}
47
48// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
49func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
50 apexFile := fmt.Sprintf("%s.apex", apex)
51 dir := "prebuilts/apex"
52 return android.GroupFixturePreparers(
53 // A preparer to add a prebuilt apex to the test fixture.
54 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
55 prebuilt_apex {
56 name: "%s",
57 src: "%s",
58 exported_bootclasspath_fragments: [
59 "%s",
60 ],
61 }
62 `, apex, apexFile, fragment)),
63 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
64 )
65}
66
Paul Duffina57835e2021-04-19 13:23:06 +010067func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
68 result := android.GroupFixturePreparers(
69 prepareForSdkTestWithJava,
Paul Duffin023dba02021-04-22 01:45:29 +010070 java.PrepareForTestWithJavaDefaultModules,
Paul Duffina57835e2021-04-19 13:23:06 +010071 prepareForSdkTestWithApex,
72
73 // Some additional files needed for the art apex.
74 android.FixtureMergeMockFs(android.MockFS{
75 "com.android.art.avbpubkey": nil,
76 "com.android.art.pem": nil,
77 "system/sepolicy/apex/com.android.art-file_contexts": nil,
78 }),
Paul Duffin023dba02021-04-22 01:45:29 +010079
Paul Duffin7c475152021-06-09 16:17:58 +010080 // Add a platform_bootclasspath that depends on the fragment.
81 fixtureAddPlatformBootclasspathForBootclasspathFragment("com.android.art", "mybootclasspathfragment"),
Paul Duffin023dba02021-04-22 01:45:29 +010082
Paul Duffina57835e2021-04-19 13:23:06 +010083 java.FixtureConfigureBootJars("com.android.art:mybootlib"),
84 android.FixtureWithRootAndroidBp(`
85 sdk {
86 name: "mysdk",
87 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010088 }
89
90 apex {
91 name: "com.android.art",
92 key: "com.android.art.key",
93 bootclasspath_fragments: [
94 "mybootclasspathfragment",
95 ],
96 updatable: false,
97 }
98
99 bootclasspath_fragment {
100 name: "mybootclasspathfragment",
101 image_name: "art",
Paul Duffinf23bc472021-04-27 12:42:20 +0100102 contents: ["mybootlib"],
Paul Duffina57835e2021-04-19 13:23:06 +0100103 apex_available: ["com.android.art"],
104 }
105
106 apex_key {
107 name: "com.android.art.key",
108 public_key: "com.android.art.avbpubkey",
109 private_key: "com.android.art.pem",
110 }
111
112 java_library {
113 name: "mybootlib",
114 srcs: ["Test.java"],
115 system_modules: "none",
116 sdk_version: "none",
117 compile_dex: true,
118 apex_available: ["com.android.art"],
119 }
120 `),
121 ).RunTest(t)
122
Paul Duffin7c475152021-06-09 16:17:58 +0100123 // A preparer to update the test fixture used when processing an unpackage snapshot.
124 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "mybootclasspathfragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100125
Paul Duffina57835e2021-04-19 13:23:06 +0100126 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000127 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100128// This is auto-generated. DO NOT EDIT.
129
130prebuilt_bootclasspath_fragment {
131 name: "mybootclasspathfragment",
132 prefer: false,
133 visibility: ["//visibility:public"],
134 apex_available: ["com.android.art"],
135 image_name: "art",
Paul Duffin2dc665b2021-04-23 16:58:51 +0100136 contents: ["mybootlib"],
Paul Duffinda286f42021-06-29 11:59:23 +0100137 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100138 annotation_flags: "hiddenapi/annotation-flags.csv",
139 metadata: "hiddenapi/metadata.csv",
140 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100141 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100142 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
143 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100144 },
Paul Duffina57835e2021-04-19 13:23:06 +0100145}
146
147java_import {
148 name: "mybootlib",
149 prefer: false,
150 visibility: ["//visibility:public"],
151 apex_available: ["com.android.art"],
Paul Duffin5c211452021-07-15 12:42:44 +0100152 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100153}
154`),
Paul Duffina57835e2021-04-19 13:23:06 +0100155 checkAllCopyRules(`
Paul Duffinda286f42021-06-29 11:59:23 +0100156.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
157.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
158.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100159.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100160.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
161.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100162.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100163 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100164 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100165
166 // Check the behavior of the snapshot without the source.
167 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
168 // Make sure that the boot jars package check rule includes the dex jar retrieved from the prebuilt apex.
169 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/mybootlib.jar")
170 }),
171
Paul Duffin7c475152021-06-09 16:17:58 +0100172 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
173 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffina57835e2021-04-19 13:23:06 +0100174 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100175
176 // Make sure that the boot jars package check rule includes the dex jar created from the source.
177 checkBootJarsPackageCheckRule(t, result, "out/soong/.intermediates/mybootlib/android_common_apex10000/aligned/mybootlib.jar")
178}
179
180// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
181// package check rule.
182func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModule string) {
183 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
184 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
185 command := bootJarsCheckRule.RuleParams.Command
186 expectedCommandArgs := " out/soong/host/linux-x86/bin/dexdump build/soong/scripts/check_boot_jars/package_allowed_list.txt " + expectedModule + " &&"
187 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100188}
189
190func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000191 result := android.GroupFixturePreparers(
192 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100193 java.PrepareForTestWithJavaDefaultModules,
194 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100195 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100196 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100197 prepareForSdkTestWithApex,
198
199 // Add a platform_bootclasspath that depends on the fragment.
200 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
201
Paul Duffin4a1d4512021-03-18 10:12:26 +0000202 android.FixtureWithRootAndroidBp(`
203 sdk {
204 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100205 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100206 java_sdk_libs: [
207 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
208 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
209 // api.stub_libs property. However, it is specified here to ensure that duplicates are
210 // correctly deduped.
211 "mysdklibrary",
212 ],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000213 }
Paul Duffinf7f65da2021-03-10 15:00:46 +0000214
Paul Duffin7c475152021-06-09 16:17:58 +0100215 apex {
216 name: "myapex",
217 key: "myapex.key",
218 min_sdk_version: "2",
219 bootclasspath_fragments: ["mybootclasspathfragment"],
220 }
221
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100222 bootclasspath_fragment {
223 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100224 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100225 contents: [
226 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
227 "mybootlib",
228 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
229 "myothersdklibrary",
230 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100231 api: {
232 stub_libs: ["mysdklibrary"],
233 },
234 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100235 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100236 stub_libs: ["mycoreplatform"],
237 },
Paul Duffina57835e2021-04-19 13:23:06 +0100238 }
239
240 java_library {
241 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100242 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100243 srcs: ["Test.java"],
244 system_modules: "none",
245 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100246 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100247 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100248 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000249 }
Paul Duffin895c7142021-04-25 13:40:15 +0100250
251 java_sdk_library {
252 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100253 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100254 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100255 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100256 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100257 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100258 }
259
260 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100261 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100262 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100263 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100264 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100265 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100266 min_sdk_version: "2",
267 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100268 }
269
270 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100271 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100272 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100273 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100274 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100275 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100276 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100277 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000278 `),
279 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000280
Paul Duffin7c475152021-06-09 16:17:58 +0100281 // A preparer to update the test fixture used when processing an unpackage snapshot.
282 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
283
Paul Duffin36474d32021-03-12 12:19:43 +0000284 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000285 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000286// This is auto-generated. DO NOT EDIT.
287
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100288prebuilt_bootclasspath_fragment {
289 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000290 prefer: false,
291 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100292 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100293 contents: [
294 "mybootlib",
295 "myothersdklibrary",
296 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100297 api: {
298 stub_libs: ["mysdklibrary"],
299 },
300 core_platform_api: {
301 stub_libs: ["mycoreplatform"],
302 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100303 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100304 annotation_flags: "hiddenapi/annotation-flags.csv",
305 metadata: "hiddenapi/metadata.csv",
306 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100307 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100308 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
309 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100310 },
Paul Duffina57835e2021-04-19 13:23:06 +0100311}
312
313java_import {
314 name: "mybootlib",
315 prefer: false,
316 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100317 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100318 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100319 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000320}
Paul Duffin895c7142021-04-25 13:40:15 +0100321
322java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100323 name: "myothersdklibrary",
324 prefer: false,
325 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100326 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100327 shared_library: true,
328 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100329 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100330 public: {
331 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
332 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
333 current_api: "sdk_library/public/myothersdklibrary.txt",
334 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
335 sdk_version: "current",
336 },
337}
338
339java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100340 name: "mysdklibrary",
341 prefer: false,
342 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100343 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100344 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100345 public: {
346 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
347 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
348 current_api: "sdk_library/public/mysdklibrary.txt",
349 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
350 sdk_version: "current",
351 },
352}
353
354java_sdk_library_import {
355 name: "mycoreplatform",
356 prefer: false,
357 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100358 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100359 shared_library: true,
360 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100361 public: {
362 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
363 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
364 current_api: "sdk_library/public/mycoreplatform.txt",
365 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
366 sdk_version: "current",
367 },
368}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100369 `),
Paul Duffina57835e2021-04-19 13:23:06 +0100370 checkAllCopyRules(`
Paul Duffin2fef1362021-04-15 13:32:00 +0100371.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
372.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
373.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100374.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100375.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
376.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100377.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffina10bd3c2021-05-12 13:46:54 +0100378.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
379.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
380.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
Paul Duffin895c7142021-04-25 13:40:15 +0100381.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
382.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
383.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
384.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
385.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
386.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin7c475152021-06-09 16:17:58 +0100387`),
388 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100389 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
390 module := result.ModuleForTests("platform-bootclasspath", "android_common")
391 var rule android.TestingBuildParams
392 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
393 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
394 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
395 out/soong/hiddenapi/hiddenapi-stub-flags.txt
396 snapshot/hiddenapi/annotation-flags.csv
397 `, rule)
398
399 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
400 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
401 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
402 snapshot/hiddenapi/metadata.csv
403 `, rule)
404
405 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
406 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
407 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
408 snapshot/hiddenapi/index.csv
409 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100410
Paul Duffin8d007e92021-07-22 12:00:49 +0100411 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100412 android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " snapshot/hiddenapi/filtered-flags.csv:snapshot/hiddenapi/signature-patterns.csv ")
Paul Duffind061d402021-06-07 21:36:01 +0100413 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100414 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100415 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
416 module := result.ModuleForTests("platform-bootclasspath", "android_common")
417 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100418 android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv:out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv ")
Paul Duffin8d007e92021-07-22 12:00:49 +0100419 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100420 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
421 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000422}
Paul Duffin04b4a192021-03-18 11:05:31 +0000423
Paul Duffin51227d82021-05-18 12:54:27 +0100424// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
425// bootclasspath_fragment is correctly output to the sdk snapshot.
426func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
427 result := android.GroupFixturePreparers(
428 prepareForSdkTestWithJava,
429 java.PrepareForTestWithJavaDefaultModules,
430 java.PrepareForTestWithJavaSdkLibraryFiles,
431 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100432 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100433 prepareForSdkTestWithApex,
434
435 // Some additional files needed for the myotherapex.
436 android.FixtureMergeMockFs(android.MockFS{
437 "system/sepolicy/apex/myotherapex-file_contexts": nil,
438 "myotherapex/apex_manifest.json": nil,
439 "myotherapex/Test.java": nil,
440 }),
441
442 android.FixtureAddTextFile("myotherapex/Android.bp", `
443 apex {
444 name: "myotherapex",
445 key: "myapex.key",
446 min_sdk_version: "2",
447 bootclasspath_fragments: ["myotherbootclasspathfragment"],
448 }
449
450 bootclasspath_fragment {
451 name: "myotherbootclasspathfragment",
452 apex_available: ["myotherapex"],
453 contents: [
454 "myotherlib",
455 ],
456 }
457
458 java_library {
459 name: "myotherlib",
460 apex_available: ["myotherapex"],
461 srcs: ["Test.java"],
462 min_sdk_version: "2",
463 permitted_packages: ["myothersdklibrary"],
464 compile_dex: true,
465 }
466 `),
467
468 android.FixtureWithRootAndroidBp(`
469 sdk {
470 name: "mysdk",
471 bootclasspath_fragments: ["mybootclasspathfragment"],
472 }
473
474 bootclasspath_fragment {
475 name: "mybootclasspathfragment",
476 contents: [
477 "mysdklibrary",
478 ],
479 fragments: [
480 {
481 apex: "myotherapex",
482 module: "myotherbootclasspathfragment"
483 },
484 ],
485 }
486
487 java_sdk_library {
488 name: "mysdklibrary",
489 srcs: ["Test.java"],
490 shared_library: false,
491 public: {enabled: true},
492 min_sdk_version: "2",
493 }
494 `),
495 ).RunTest(t)
496
497 // A preparer to update the test fixture used when processing an unpackage snapshot.
498 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
499
500 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000501 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100502// This is auto-generated. DO NOT EDIT.
503
504prebuilt_bootclasspath_fragment {
505 name: "mybootclasspathfragment",
506 prefer: false,
507 visibility: ["//visibility:public"],
508 apex_available: ["//apex_available:platform"],
509 contents: ["mysdklibrary"],
510 fragments: [
511 {
512 apex: "myotherapex",
513 module: "myotherbootclasspathfragment",
514 },
515 ],
516 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100517 annotation_flags: "hiddenapi/annotation-flags.csv",
518 metadata: "hiddenapi/metadata.csv",
519 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100520 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100521 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
522 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100523 },
524}
525
526java_sdk_library_import {
527 name: "mysdklibrary",
528 prefer: false,
529 visibility: ["//visibility:public"],
530 apex_available: ["//apex_available:platform"],
531 shared_library: false,
532 public: {
533 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
534 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
535 current_api: "sdk_library/public/mysdklibrary.txt",
536 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
537 sdk_version: "current",
538 },
539}
540 `),
541 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
542 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
543 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
544 )
545}
546
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100547// Test that bootclasspath_fragment works with sdk.
548func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000549 android.GroupFixturePreparers(
550 prepareForSdkTestWithApex,
551 prepareForSdkTestWithJava,
Paul Duffin8018e502021-05-21 19:28:09 +0100552 android.FixtureAddFile("java/mybootlib.jar", nil),
Paul Duffin04b4a192021-03-18 11:05:31 +0000553 android.FixtureWithRootAndroidBp(`
554 sdk {
555 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100556 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000557 }
558
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100559 bootclasspath_fragment {
560 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000561 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100562 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000563 apex_available: ["myapex"],
564 }
565
Paul Duffin8018e502021-05-21 19:28:09 +0100566 java_library {
567 name: "mybootlib",
568 apex_available: ["myapex"],
569 srcs: ["Test.java"],
570 system_modules: "none",
571 sdk_version: "none",
572 min_sdk_version: "1",
573 compile_dex: true,
574 }
575
Paul Duffin04b4a192021-03-18 11:05:31 +0000576 sdk_snapshot {
577 name: "mysdk@1",
Paul Duffin8018e502021-05-21 19:28:09 +0100578 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000579 }
580
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100581 prebuilt_bootclasspath_fragment {
Paul Duffin8018e502021-05-21 19:28:09 +0100582 name: "mysdk_mybootclasspathfragment@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100583 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000584 prefer: false,
585 visibility: ["//visibility:public"],
586 apex_available: [
587 "myapex",
588 ],
589 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100590 contents: ["mysdk_mybootlib@1"],
591 }
592
593 java_import {
594 name: "mysdk_mybootlib@1",
595 sdk_member_name: "mybootlib",
596 visibility: ["//visibility:public"],
597 apex_available: ["com.android.art"],
598 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000599 }
600 `),
601 ).RunTest(t)
602}
Paul Duffin7c955552021-04-19 13:23:53 +0100603
604func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
605 result := android.GroupFixturePreparers(
606 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100607 java.PrepareForTestWithJavaDefaultModules,
608 java.PrepareForTestWithJavaSdkLibraryFiles,
609 java.FixtureWithLastReleaseApis("mysdklibrary"),
satayevd604b212021-07-21 14:23:52 +0100610 java.FixtureConfigureApexBootJars("myapex:mybootlib"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100611 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100612
613 // Add a platform_bootclasspath that depends on the fragment.
614 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
615
Paul Duffin7c955552021-04-19 13:23:53 +0100616 android.MockFS{
617 "my-blocked.txt": nil,
618 "my-max-target-o-low-priority.txt": nil,
619 "my-max-target-p.txt": nil,
620 "my-max-target-q.txt": nil,
621 "my-max-target-r-low-priority.txt": nil,
622 "my-removed.txt": nil,
623 "my-unsupported-packages.txt": nil,
624 "my-unsupported.txt": nil,
625 }.AddToFixture(),
626 android.FixtureWithRootAndroidBp(`
627 sdk {
628 name: "mysdk",
629 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100630 }
631
Paul Duffin475daaf2021-05-13 00:57:55 +0100632 apex {
633 name: "myapex",
634 key: "myapex.key",
635 min_sdk_version: "1",
636 bootclasspath_fragments: ["mybootclasspathfragment"],
637 }
638
Paul Duffin7c955552021-04-19 13:23:53 +0100639 bootclasspath_fragment {
640 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100641 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100642 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100643 api: {
644 stub_libs: ["mysdklibrary"],
645 },
Paul Duffin7c955552021-04-19 13:23:53 +0100646 hidden_api: {
647 unsupported: [
648 "my-unsupported.txt",
649 ],
650 removed: [
651 "my-removed.txt",
652 ],
653 max_target_r_low_priority: [
654 "my-max-target-r-low-priority.txt",
655 ],
656 max_target_q: [
657 "my-max-target-q.txt",
658 ],
659 max_target_p: [
660 "my-max-target-p.txt",
661 ],
662 max_target_o_low_priority: [
663 "my-max-target-o-low-priority.txt",
664 ],
665 blocked: [
666 "my-blocked.txt",
667 ],
668 unsupported_packages: [
669 "my-unsupported-packages.txt",
670 ],
671 },
672 }
673
674 java_library {
675 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100676 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100677 srcs: ["Test.java"],
678 system_modules: "none",
679 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100680 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100681 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100682 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100683 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100684
685 java_sdk_library {
686 name: "mysdklibrary",
687 srcs: ["Test.java"],
688 compile_dex: true,
689 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100690 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100691 }
Paul Duffin7c955552021-04-19 13:23:53 +0100692 `),
693 ).RunTest(t)
694
Paul Duffin7c475152021-06-09 16:17:58 +0100695 // A preparer to update the test fixture used when processing an unpackage snapshot.
696 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
697
Paul Duffin7c955552021-04-19 13:23:53 +0100698 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000699 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100700// This is auto-generated. DO NOT EDIT.
701
702prebuilt_bootclasspath_fragment {
703 name: "mybootclasspathfragment",
704 prefer: false,
705 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100706 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100707 contents: ["mybootlib"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100708 api: {
709 stub_libs: ["mysdklibrary"],
710 },
Paul Duffin7c955552021-04-19 13:23:53 +0100711 hidden_api: {
712 unsupported: ["hiddenapi/my-unsupported.txt"],
713 removed: ["hiddenapi/my-removed.txt"],
714 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
715 max_target_q: ["hiddenapi/my-max-target-q.txt"],
716 max_target_p: ["hiddenapi/my-max-target-p.txt"],
717 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
718 blocked: ["hiddenapi/my-blocked.txt"],
719 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100720 annotation_flags: "hiddenapi/annotation-flags.csv",
721 metadata: "hiddenapi/metadata.csv",
722 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100723 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100724 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
725 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100726 },
727}
728
729java_import {
730 name: "mybootlib",
731 prefer: false,
732 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100733 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100734 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100735 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100736}
Paul Duffin475daaf2021-05-13 00:57:55 +0100737
738java_sdk_library_import {
739 name: "mysdklibrary",
740 prefer: false,
741 visibility: ["//visibility:public"],
742 apex_available: ["//apex_available:platform"],
743 shared_library: true,
744 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100745 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100746 public: {
747 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
748 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
749 current_api: "sdk_library/public/mysdklibrary.txt",
750 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
751 sdk_version: "current",
752 },
753}
Paul Duffin7c955552021-04-19 13:23:53 +0100754`),
755 checkAllCopyRules(`
756my-unsupported.txt -> hiddenapi/my-unsupported.txt
757my-removed.txt -> hiddenapi/my-removed.txt
758my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
759my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
760my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
761my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
762my-blocked.txt -> hiddenapi/my-blocked.txt
763my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100764.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
765.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
766.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100767.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100768.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
769.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100770.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffin475daaf2021-05-13 00:57:55 +0100771.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
772.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
773.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100774`),
Paul Duffin7c475152021-06-09 16:17:58 +0100775 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
776 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
777 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100778 )
779}