blob: 1b64130cef2eb475a732c30e05f0d60d80055edd [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 Duffin8eb45732022-10-04 19:03:31 +010020 "strings"
Paul Duffin4a1d4512021-03-18 10:12:26 +000021 "testing"
22
23 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010024 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000025)
Paul Duffinf7f65da2021-03-10 15:00:46 +000026
Paul Duffin7c475152021-06-09 16:17:58 +010027// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
28// references the bootclasspath fragment.
29func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
30 return android.GroupFixturePreparers(
31 // Add a platform_bootclasspath module.
32 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
33 platform_bootclasspath {
34 name: "platform-bootclasspath",
35 fragments: [
36 {
37 apex: "%s",
38 module: "%s",
39 },
40 ],
41 }
42 `, apex, fragment)),
43 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000044 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010045 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010046 )
47}
48
49// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
50func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
51 apexFile := fmt.Sprintf("%s.apex", apex)
52 dir := "prebuilts/apex"
53 return android.GroupFixturePreparers(
54 // A preparer to add a prebuilt apex to the test fixture.
55 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
56 prebuilt_apex {
57 name: "%s",
58 src: "%s",
59 exported_bootclasspath_fragments: [
60 "%s",
61 ],
62 }
63 `, apex, apexFile, fragment)),
64 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
65 )
66}
67
Paul Duffina57835e2021-04-19 13:23:06 +010068func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
69 result := android.GroupFixturePreparers(
70 prepareForSdkTestWithJava,
Paul Duffin023dba02021-04-22 01:45:29 +010071 java.PrepareForTestWithJavaDefaultModules,
Paul Duffina57835e2021-04-19 13:23:06 +010072 prepareForSdkTestWithApex,
73
74 // Some additional files needed for the art apex.
75 android.FixtureMergeMockFs(android.MockFS{
76 "com.android.art.avbpubkey": nil,
77 "com.android.art.pem": nil,
78 "system/sepolicy/apex/com.android.art-file_contexts": nil,
79 }),
Paul Duffin023dba02021-04-22 01:45:29 +010080
Paul Duffin7c475152021-06-09 16:17:58 +010081 // Add a platform_bootclasspath that depends on the fragment.
82 fixtureAddPlatformBootclasspathForBootclasspathFragment("com.android.art", "mybootclasspathfragment"),
Paul Duffin023dba02021-04-22 01:45:29 +010083
Paul Duffin8eb45732022-10-04 19:03:31 +010084 java.PrepareForBootImageConfigTest,
Paul Duffina57835e2021-04-19 13:23:06 +010085 android.FixtureWithRootAndroidBp(`
86 sdk {
87 name: "mysdk",
88 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010089 }
90
91 apex {
92 name: "com.android.art",
93 key: "com.android.art.key",
94 bootclasspath_fragments: [
95 "mybootclasspathfragment",
96 ],
97 updatable: false,
98 }
99
100 bootclasspath_fragment {
101 name: "mybootclasspathfragment",
102 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100103 contents: ["core1", "core2"],
Paul Duffina57835e2021-04-19 13:23:06 +0100104 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100105 hidden_api: {
106 split_packages: ["*"],
107 },
Paul Duffina57835e2021-04-19 13:23:06 +0100108 }
109
110 apex_key {
111 name: "com.android.art.key",
112 public_key: "com.android.art.avbpubkey",
113 private_key: "com.android.art.pem",
114 }
115
116 java_library {
Paul Duffin8eb45732022-10-04 19:03:31 +0100117 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100118 srcs: ["Test.java"],
119 system_modules: "none",
120 sdk_version: "none",
121 compile_dex: true,
122 apex_available: ["com.android.art"],
123 }
Paul Duffin8eb45732022-10-04 19:03:31 +0100124
125 java_library {
126 name: "core2",
127 srcs: ["Test.java"],
128 system_modules: "none",
129 sdk_version: "none",
130 compile_dex: true,
131 apex_available: ["com.android.art"],
132 }
133`),
Paul Duffina57835e2021-04-19 13:23:06 +0100134 ).RunTest(t)
135
Paul Duffin7c475152021-06-09 16:17:58 +0100136 // A preparer to update the test fixture used when processing an unpackage snapshot.
137 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "mybootclasspathfragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100138
Paul Duffin8eb45732022-10-04 19:03:31 +0100139 // Check that source on its own configures the bootImageConfig correctly.
140 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/meta_lic")
141 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
142
Paul Duffina57835e2021-04-19 13:23:06 +0100143 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000144 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100145// This is auto-generated. DO NOT EDIT.
146
147prebuilt_bootclasspath_fragment {
148 name: "mybootclasspathfragment",
149 prefer: false,
150 visibility: ["//visibility:public"],
151 apex_available: ["com.android.art"],
152 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100153 contents: [
154 "core1",
155 "core2",
156 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100157 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100158 annotation_flags: "hiddenapi/annotation-flags.csv",
159 metadata: "hiddenapi/metadata.csv",
160 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100161 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100162 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
163 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100164 },
Paul Duffina57835e2021-04-19 13:23:06 +0100165}
166
167java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100168 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100169 prefer: false,
170 visibility: ["//visibility:public"],
171 apex_available: ["com.android.art"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100172 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
173}
174
175java_import {
176 name: "core2",
177 prefer: false,
178 visibility: ["//visibility:public"],
179 apex_available: ["com.android.art"],
180 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100181}
182`),
Paul Duffina57835e2021-04-19 13:23:06 +0100183 checkAllCopyRules(`
Paul Duffinda286f42021-06-29 11:59:23 +0100184.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
185.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
186.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100187.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100188.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
189.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin8eb45732022-10-04 19:03:31 +0100190.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
191.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100192 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100193 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100194
195 // Check the behavior of the snapshot without the source.
196 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100197 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
198 checkBootJarsPackageCheckRule(t, result,
199 "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
200 "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
201 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar")
202 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/mybootclasspathfragment/android_common_com.android.art/meta_lic")
203 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100204 }),
205
Paul Duffin7c475152021-06-09 16:17:58 +0100206 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100207
208 // Check the behavior of the snapshot when the source is preferred.
209 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
210 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/meta_lic")
211 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
212 }),
213
Paul Duffin7c475152021-06-09 16:17:58 +0100214 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100215
216 // Check the behavior of the snapshot when it is preferred.
217 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin20d90e32022-10-04 20:01:04 +0100218 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/snapshot/prebuilt_mybootclasspathfragment/android_common_com.android.art/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100219 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic")
220 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100221 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100222
Paul Duffin8eb45732022-10-04 19:03:31 +0100223 // Make sure that the boot jars package check rule includes the dex jars created from the source.
224 checkBootJarsPackageCheckRule(t, result,
225 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
226 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
227 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar")
Paul Duffinc8ead412021-06-07 19:28:15 +0100228}
229
230// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
231// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100232func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
233 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100234 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
235 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
236 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100237 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100238 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100239}
240
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000241func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000242 result := android.GroupFixturePreparers(
243 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100244 java.PrepareForTestWithJavaDefaultModules,
245 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100246 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100247 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100248 prepareForSdkTestWithApex,
249
250 // Add a platform_bootclasspath that depends on the fragment.
251 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
252
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000253 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100254 apex {
255 name: "myapex",
256 key: "myapex.key",
257 min_sdk_version: "2",
258 bootclasspath_fragments: ["mybootclasspathfragment"],
259 }
260
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100261 bootclasspath_fragment {
262 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100263 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100264 contents: [
265 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
266 "mybootlib",
267 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
268 "myothersdklibrary",
269 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100270 api: {
271 stub_libs: ["mysdklibrary"],
272 },
273 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100274 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100275 stub_libs: ["mycoreplatform"],
276 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100277 hidden_api: {
278 split_packages: ["*"],
279 },
Paul Duffina57835e2021-04-19 13:23:06 +0100280 }
281
282 java_library {
283 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100284 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100285 srcs: ["Test.java"],
286 system_modules: "none",
287 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100288 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100289 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100290 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000291 }
Paul Duffin895c7142021-04-25 13:40:15 +0100292
293 java_sdk_library {
294 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100295 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100296 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100297 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100298 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100299 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100300 }
301
302 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100303 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100304 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100305 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100306 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100307 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100308 min_sdk_version: "2",
309 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100310 }
311
312 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100313 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100314 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100315 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100316 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100317 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100318 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100319 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000320 `),
321 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000322
Paul Duffin7c475152021-06-09 16:17:58 +0100323 // A preparer to update the test fixture used when processing an unpackage snapshot.
324 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
325
Paul Duffin36474d32021-03-12 12:19:43 +0000326 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000327 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000328// This is auto-generated. DO NOT EDIT.
329
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100330prebuilt_bootclasspath_fragment {
331 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000332 prefer: false,
333 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100334 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100335 contents: [
336 "mybootlib",
337 "myothersdklibrary",
338 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100339 api: {
340 stub_libs: ["mysdklibrary"],
341 },
342 core_platform_api: {
343 stub_libs: ["mycoreplatform"],
344 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100345 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100346 annotation_flags: "hiddenapi/annotation-flags.csv",
347 metadata: "hiddenapi/metadata.csv",
348 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100349 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100350 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
351 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100352 },
Paul Duffina57835e2021-04-19 13:23:06 +0100353}
354
355java_import {
356 name: "mybootlib",
357 prefer: false,
358 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100359 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100360 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100361 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000362}
Paul Duffin895c7142021-04-25 13:40:15 +0100363
364java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100365 name: "myothersdklibrary",
366 prefer: false,
367 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100368 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100369 shared_library: true,
370 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100371 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100372 public: {
373 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
374 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
375 current_api: "sdk_library/public/myothersdklibrary.txt",
376 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
377 sdk_version: "current",
378 },
379}
380
381java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100382 name: "mysdklibrary",
383 prefer: false,
384 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100385 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100386 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100387 public: {
388 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
389 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
390 current_api: "sdk_library/public/mysdklibrary.txt",
391 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
392 sdk_version: "current",
393 },
394}
395
396java_sdk_library_import {
397 name: "mycoreplatform",
398 prefer: false,
399 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100400 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100401 shared_library: true,
402 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100403 public: {
404 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
405 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
406 current_api: "sdk_library/public/mycoreplatform.txt",
407 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
408 sdk_version: "current",
409 },
410}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100411 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000412 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100413 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100414 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
415 module := result.ModuleForTests("platform-bootclasspath", "android_common")
416 var rule android.TestingBuildParams
417 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
418 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
419 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
420 out/soong/hiddenapi/hiddenapi-stub-flags.txt
421 snapshot/hiddenapi/annotation-flags.csv
422 `, rule)
423
424 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
425 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
426 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
427 snapshot/hiddenapi/metadata.csv
428 `, rule)
429
430 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
431 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
432 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
433 snapshot/hiddenapi/index.csv
434 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100435
Paul Duffin8d007e92021-07-22 12:00:49 +0100436 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100437 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 +0100438 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100439 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100440 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
441 module := result.ModuleForTests("platform-bootclasspath", "android_common")
442 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100443 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 +0100444 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100445 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
446 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000447}
Paul Duffin04b4a192021-03-18 11:05:31 +0000448
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000449func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
450 t.Run("added-directly", func(t *testing.T) {
451 testSnapshotWithBootClasspathFragment_Contents(t, `
452 sdk {
453 name: "mysdk",
454 bootclasspath_fragments: ["mybootclasspathfragment"],
455 java_sdk_libs: [
456 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
457 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
458 // api.stub_libs property. However, it is specified here to ensure that duplicates are
459 // correctly deduped.
460 "mysdklibrary",
461 ],
462 }
463 `, `
464.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
465.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
466.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
467.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
468.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
469.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
470.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
471.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
472.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
473.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
474.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
475.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
476.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
477.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
478.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
479.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
480`)
481 })
482
483 copyBootclasspathFragmentFromApexVariantRules := `
484.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
485.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
486.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
487.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
488.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
489.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
490.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
491.intermediates/myothersdklibrary.stubs/android_common/javac/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
492.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
493.intermediates/myothersdklibrary.stubs.source/android_common/metalava/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
494.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
495.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
496.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
497.intermediates/mycoreplatform.stubs/android_common/javac/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
498.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
499.intermediates/mycoreplatform.stubs.source/android_common/metalava/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
500`
501 t.Run("added-via-apex", func(t *testing.T) {
502 testSnapshotWithBootClasspathFragment_Contents(t, `
503 sdk {
504 name: "mysdk",
505 apexes: ["myapex"],
506 }
507 `, copyBootclasspathFragmentFromApexVariantRules)
508 })
509
510 t.Run("added-directly-and-indirectly", func(t *testing.T) {
511 testSnapshotWithBootClasspathFragment_Contents(t, `
512 sdk {
513 name: "mysdk",
514 apexes: ["myapex"],
515 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
516 // a bootclasspath_fragments module because it is used in the myapex's
517 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
518 // are correctly deduped.
519 bootclasspath_fragments: ["mybootclasspathfragment"],
520 java_sdk_libs: [
521 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
522 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
523 // api.stub_libs property. However, it is specified here to ensure that duplicates are
524 // correctly deduped.
525 "mysdklibrary",
526 ],
527 }
528 `, copyBootclasspathFragmentFromApexVariantRules)
529 })
530}
531
Paul Duffin51227d82021-05-18 12:54:27 +0100532// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
533// bootclasspath_fragment is correctly output to the sdk snapshot.
534func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
535 result := android.GroupFixturePreparers(
536 prepareForSdkTestWithJava,
537 java.PrepareForTestWithJavaDefaultModules,
538 java.PrepareForTestWithJavaSdkLibraryFiles,
539 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100540 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100541 prepareForSdkTestWithApex,
542
543 // Some additional files needed for the myotherapex.
544 android.FixtureMergeMockFs(android.MockFS{
545 "system/sepolicy/apex/myotherapex-file_contexts": nil,
546 "myotherapex/apex_manifest.json": nil,
547 "myotherapex/Test.java": nil,
548 }),
549
550 android.FixtureAddTextFile("myotherapex/Android.bp", `
551 apex {
552 name: "myotherapex",
553 key: "myapex.key",
554 min_sdk_version: "2",
555 bootclasspath_fragments: ["myotherbootclasspathfragment"],
556 }
557
558 bootclasspath_fragment {
559 name: "myotherbootclasspathfragment",
560 apex_available: ["myotherapex"],
561 contents: [
562 "myotherlib",
563 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100564 hidden_api: {
565 split_packages: ["*"],
566 },
Paul Duffin51227d82021-05-18 12:54:27 +0100567 }
568
569 java_library {
570 name: "myotherlib",
571 apex_available: ["myotherapex"],
572 srcs: ["Test.java"],
573 min_sdk_version: "2",
574 permitted_packages: ["myothersdklibrary"],
575 compile_dex: true,
576 }
577 `),
578
579 android.FixtureWithRootAndroidBp(`
580 sdk {
581 name: "mysdk",
582 bootclasspath_fragments: ["mybootclasspathfragment"],
583 }
584
585 bootclasspath_fragment {
586 name: "mybootclasspathfragment",
587 contents: [
588 "mysdklibrary",
589 ],
590 fragments: [
591 {
592 apex: "myotherapex",
593 module: "myotherbootclasspathfragment"
594 },
595 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100596 hidden_api: {
597 split_packages: ["*"],
598 },
Paul Duffin51227d82021-05-18 12:54:27 +0100599 }
600
601 java_sdk_library {
602 name: "mysdklibrary",
603 srcs: ["Test.java"],
604 shared_library: false,
605 public: {enabled: true},
606 min_sdk_version: "2",
607 }
608 `),
609 ).RunTest(t)
610
611 // A preparer to update the test fixture used when processing an unpackage snapshot.
612 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
613
614 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000615 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100616// This is auto-generated. DO NOT EDIT.
617
618prebuilt_bootclasspath_fragment {
619 name: "mybootclasspathfragment",
620 prefer: false,
621 visibility: ["//visibility:public"],
622 apex_available: ["//apex_available:platform"],
623 contents: ["mysdklibrary"],
624 fragments: [
625 {
626 apex: "myotherapex",
627 module: "myotherbootclasspathfragment",
628 },
629 ],
630 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100631 annotation_flags: "hiddenapi/annotation-flags.csv",
632 metadata: "hiddenapi/metadata.csv",
633 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100634 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100635 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
636 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100637 },
638}
639
640java_sdk_library_import {
641 name: "mysdklibrary",
642 prefer: false,
643 visibility: ["//visibility:public"],
644 apex_available: ["//apex_available:platform"],
645 shared_library: false,
646 public: {
647 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
648 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
649 current_api: "sdk_library/public/mysdklibrary.txt",
650 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
651 sdk_version: "current",
652 },
653}
654 `),
655 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
656 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
657 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
658 )
659}
660
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100661// Test that bootclasspath_fragment works with sdk.
662func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000663 android.GroupFixturePreparers(
664 prepareForSdkTestWithApex,
665 prepareForSdkTestWithJava,
Paul Duffin8018e502021-05-21 19:28:09 +0100666 android.FixtureAddFile("java/mybootlib.jar", nil),
Paul Duffin04b4a192021-03-18 11:05:31 +0000667 android.FixtureWithRootAndroidBp(`
668 sdk {
669 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100670 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000671 }
672
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100673 bootclasspath_fragment {
674 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000675 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100676 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000677 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100678 hidden_api: {
679 split_packages: ["*"],
680 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000681 }
682
Paul Duffin8018e502021-05-21 19:28:09 +0100683 java_library {
684 name: "mybootlib",
685 apex_available: ["myapex"],
686 srcs: ["Test.java"],
687 system_modules: "none",
688 sdk_version: "none",
689 min_sdk_version: "1",
690 compile_dex: true,
691 }
692
Paul Duffin04b4a192021-03-18 11:05:31 +0000693 sdk_snapshot {
694 name: "mysdk@1",
Paul Duffin8018e502021-05-21 19:28:09 +0100695 bootclasspath_fragments: ["mysdk_mybootclasspathfragment@1"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000696 }
697
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100698 prebuilt_bootclasspath_fragment {
Paul Duffin8018e502021-05-21 19:28:09 +0100699 name: "mysdk_mybootclasspathfragment@1",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100700 sdk_member_name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000701 prefer: false,
702 visibility: ["//visibility:public"],
703 apex_available: [
704 "myapex",
705 ],
706 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100707 contents: ["mysdk_mybootlib@1"],
708 }
709
710 java_import {
711 name: "mysdk_mybootlib@1",
712 sdk_member_name: "mybootlib",
713 visibility: ["//visibility:public"],
714 apex_available: ["com.android.art"],
715 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000716 }
717 `),
718 ).RunTest(t)
719}
Paul Duffin7c955552021-04-19 13:23:53 +0100720
721func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
722 result := android.GroupFixturePreparers(
723 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100724 java.PrepareForTestWithJavaDefaultModules,
725 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000726 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
727 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100728 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100729
730 // Add a platform_bootclasspath that depends on the fragment.
731 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
732
Paul Duffin7c955552021-04-19 13:23:53 +0100733 android.MockFS{
734 "my-blocked.txt": nil,
735 "my-max-target-o-low-priority.txt": nil,
736 "my-max-target-p.txt": nil,
737 "my-max-target-q.txt": nil,
738 "my-max-target-r-low-priority.txt": nil,
739 "my-removed.txt": nil,
740 "my-unsupported-packages.txt": nil,
741 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000742 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100743 }.AddToFixture(),
744 android.FixtureWithRootAndroidBp(`
745 sdk {
746 name: "mysdk",
747 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100748 }
749
Paul Duffin475daaf2021-05-13 00:57:55 +0100750 apex {
751 name: "myapex",
752 key: "myapex.key",
753 min_sdk_version: "1",
754 bootclasspath_fragments: ["mybootclasspathfragment"],
755 }
756
Paul Duffin7c955552021-04-19 13:23:53 +0100757 bootclasspath_fragment {
758 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100759 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000760 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100761 api: {
762 stub_libs: ["mysdklibrary"],
763 },
Paul Duffin7c955552021-04-19 13:23:53 +0100764 hidden_api: {
765 unsupported: [
766 "my-unsupported.txt",
767 ],
768 removed: [
769 "my-removed.txt",
770 ],
771 max_target_r_low_priority: [
772 "my-max-target-r-low-priority.txt",
773 ],
774 max_target_q: [
775 "my-max-target-q.txt",
776 ],
777 max_target_p: [
778 "my-max-target-p.txt",
779 ],
780 max_target_o_low_priority: [
781 "my-max-target-o-low-priority.txt",
782 ],
783 blocked: [
784 "my-blocked.txt",
785 ],
786 unsupported_packages: [
787 "my-unsupported-packages.txt",
788 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000789 split_packages: ["sdklibrary"],
790 package_prefixes: ["sdklibrary.all.mine"],
791 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100792 },
793 }
794
795 java_library {
796 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100797 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100798 srcs: ["Test.java"],
799 system_modules: "none",
800 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100801 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100802 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100803 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100804 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100805
806 java_sdk_library {
807 name: "mysdklibrary",
808 srcs: ["Test.java"],
809 compile_dex: true,
810 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100811 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100812 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000813
814 java_sdk_library {
815 name: "mynewlibrary",
816 apex_available: ["myapex"],
817 srcs: ["Test.java"],
818 min_sdk_version: "10",
819 compile_dex: true,
820 public: {enabled: true},
821 permitted_packages: ["mysdklibrary"],
822 hidden_api: {
823 max_target_q: [
824 "my-new-max-target-q.txt",
825 ],
826 split_packages: ["sdklibrary", "newlibrary"],
827 package_prefixes: ["newlibrary.all.mine"],
828 single_packages: ["newlibrary.mine"],
829 },
830 }
Paul Duffin7c955552021-04-19 13:23:53 +0100831 `),
832 ).RunTest(t)
833
Paul Duffin7c475152021-06-09 16:17:58 +0100834 // A preparer to update the test fixture used when processing an unpackage snapshot.
835 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
836
Paul Duffin7c955552021-04-19 13:23:53 +0100837 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000838 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100839// This is auto-generated. DO NOT EDIT.
840
841prebuilt_bootclasspath_fragment {
842 name: "mybootclasspathfragment",
843 prefer: false,
844 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100845 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000846 contents: [
847 "mybootlib",
848 "mynewlibrary",
849 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100850 api: {
851 stub_libs: ["mysdklibrary"],
852 },
Paul Duffin7c955552021-04-19 13:23:53 +0100853 hidden_api: {
854 unsupported: ["hiddenapi/my-unsupported.txt"],
855 removed: ["hiddenapi/my-removed.txt"],
856 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000857 max_target_q: [
858 "hiddenapi/my-max-target-q.txt",
859 "hiddenapi/my-new-max-target-q.txt",
860 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100861 max_target_p: ["hiddenapi/my-max-target-p.txt"],
862 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
863 blocked: ["hiddenapi/my-blocked.txt"],
864 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100865 annotation_flags: "hiddenapi/annotation-flags.csv",
866 metadata: "hiddenapi/metadata.csv",
867 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100868 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100869 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
870 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100871 },
872}
873
874java_import {
875 name: "mybootlib",
876 prefer: false,
877 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100878 apex_available: ["myapex"],
Paul Duffin5c211452021-07-15 12:42:44 +0100879 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffin869de142021-07-15 14:14:41 +0100880 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100881}
Paul Duffin475daaf2021-05-13 00:57:55 +0100882
883java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000884 name: "mynewlibrary",
885 prefer: false,
886 visibility: ["//visibility:public"],
887 apex_available: ["myapex"],
888 shared_library: true,
889 compile_dex: true,
890 permitted_packages: ["mysdklibrary"],
891 public: {
892 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
893 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
894 current_api: "sdk_library/public/mynewlibrary.txt",
895 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
896 sdk_version: "current",
897 },
898}
899
900java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100901 name: "mysdklibrary",
902 prefer: false,
903 visibility: ["//visibility:public"],
904 apex_available: ["//apex_available:platform"],
905 shared_library: true,
906 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100907 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100908 public: {
909 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
910 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
911 current_api: "sdk_library/public/mysdklibrary.txt",
912 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
913 sdk_version: "current",
914 },
915}
Paul Duffin7c955552021-04-19 13:23:53 +0100916`),
917 checkAllCopyRules(`
918my-unsupported.txt -> hiddenapi/my-unsupported.txt
919my-removed.txt -> hiddenapi/my-removed.txt
920my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
921my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000922my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100923my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
924my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
925my-blocked.txt -> hiddenapi/my-blocked.txt
926my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100927.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
928.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
929.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100930.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100931.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
932.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin5c211452021-07-15 12:42:44 +0100933.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000934.intermediates/mynewlibrary.stubs/android_common/javac/mynewlibrary.stubs.jar -> sdk_library/public/mynewlibrary-stubs.jar
935.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
936.intermediates/mynewlibrary.stubs.source/android_common/metalava/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
Paul Duffin475daaf2021-05-13 00:57:55 +0100937.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
938.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
939.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 +0100940`),
Paul Duffin7c475152021-06-09 16:17:58 +0100941 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
942 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
943 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100944 )
945}
Paul Duffin1938dba2022-07-26 23:53:00 +0000946
947func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
948 expectedSdkSnapshot string,
949 expectedCopyRules string,
950 expectedStubFlagsInputs []string,
951 suffix string) {
952
953 result := android.GroupFixturePreparers(
954 prepareForSdkTestWithJava,
955 java.PrepareForTestWithJavaDefaultModules,
956 java.PrepareForTestWithJavaSdkLibraryFiles,
957 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
958 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
959 prepareForSdkTestWithApex,
960
961 // Add a platform_bootclasspath that depends on the fragment.
962 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
963
964 android.FixtureMergeEnv(map[string]string{
965 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
966 }),
967
968 android.FixtureWithRootAndroidBp(`
969 sdk {
970 name: "mysdk",
971 apexes: ["myapex"],
972 }
973
974 apex {
975 name: "myapex",
976 key: "myapex.key",
977 min_sdk_version: "S",
978 bootclasspath_fragments: ["mybootclasspathfragment"],
979 }
980
981 bootclasspath_fragment {
982 name: "mybootclasspathfragment",
983 apex_available: ["myapex"],
984 contents: [
985 "mysdklibrary",
986 "mynewsdklibrary",
987 ],
988
989 hidden_api: {
990 split_packages: [],
991 },
992 }
993
994 java_sdk_library {
995 name: "mysdklibrary",
996 apex_available: ["myapex"],
997 srcs: ["Test.java"],
998 shared_library: false,
999 public: {enabled: true},
1000 min_sdk_version: "S",
1001 }
1002
1003 java_sdk_library {
1004 name: "mynewsdklibrary",
1005 apex_available: ["myapex"],
1006 srcs: ["Test.java"],
1007 compile_dex: true,
1008 public: {enabled: true},
1009 min_sdk_version: "Tiramisu",
1010 permitted_packages: ["mynewsdklibrary"],
1011 }
1012 `),
1013 ).RunTest(t)
1014
1015 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1016 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
1017 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", expectedStubFlagsInputs, rule.Implicits)
1018
1019 CheckSnapshot(t, result, "mysdk", "",
1020 checkAndroidBpContents(expectedSdkSnapshot),
1021 checkAllCopyRules(expectedCopyRules),
1022 )
1023}
1024
1025func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1026 t.Run("target S build", func(t *testing.T) {
1027 expectedSnapshot := `
1028// This is auto-generated. DO NOT EDIT.
1029
1030prebuilt_bootclasspath_fragment {
1031 name: "mybootclasspathfragment",
1032 prefer: false,
1033 visibility: ["//visibility:public"],
1034 apex_available: ["myapex"],
1035 contents: ["mysdklibrary"],
1036 hidden_api: {
1037 annotation_flags: "hiddenapi/annotation-flags.csv",
1038 metadata: "hiddenapi/metadata.csv",
1039 index: "hiddenapi/index.csv",
1040 stub_flags: "hiddenapi/stub-flags.csv",
1041 all_flags: "hiddenapi/all-flags.csv",
1042 },
1043}
1044
1045java_sdk_library_import {
1046 name: "mysdklibrary",
1047 prefer: false,
1048 visibility: ["//visibility:public"],
1049 apex_available: ["myapex"],
1050 shared_library: false,
1051 public: {
1052 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1053 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1054 current_api: "sdk_library/public/mysdklibrary.txt",
1055 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1056 sdk_version: "current",
1057 },
1058}
1059`
1060 expectedCopyRules := `
1061.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1062.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1063.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1064.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1065.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
1066.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
1067.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1068.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1069`
1070
1071 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1072 // of the snapshot.
1073 expectedStubFlagsInputs := []string{
1074 "out/soong/.intermediates/mysdklibrary.stubs/android_common/dex/mysdklibrary.stubs.jar",
1075 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1076 }
1077
1078 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1079 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1080 })
1081
1082 t.Run("target-Tiramisu-build", func(t *testing.T) {
1083 expectedSnapshot := `
1084// This is auto-generated. DO NOT EDIT.
1085
1086prebuilt_bootclasspath_fragment {
1087 name: "mybootclasspathfragment",
1088 prefer: false,
1089 visibility: ["//visibility:public"],
1090 apex_available: ["myapex"],
1091 contents: [
1092 "mysdklibrary",
1093 "mynewsdklibrary",
1094 ],
1095 hidden_api: {
1096 annotation_flags: "hiddenapi/annotation-flags.csv",
1097 metadata: "hiddenapi/metadata.csv",
1098 index: "hiddenapi/index.csv",
1099 signature_patterns: "hiddenapi/signature-patterns.csv",
1100 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1101 filtered_flags: "hiddenapi/filtered-flags.csv",
1102 },
1103}
1104
1105java_sdk_library_import {
1106 name: "mysdklibrary",
1107 prefer: false,
1108 visibility: ["//visibility:public"],
1109 apex_available: ["myapex"],
1110 shared_library: false,
1111 public: {
1112 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1113 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1114 current_api: "sdk_library/public/mysdklibrary.txt",
1115 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1116 sdk_version: "current",
1117 },
1118}
1119
1120java_sdk_library_import {
1121 name: "mynewsdklibrary",
1122 prefer: false,
1123 visibility: ["//visibility:public"],
1124 apex_available: ["myapex"],
1125 shared_library: true,
1126 compile_dex: true,
1127 permitted_packages: ["mynewsdklibrary"],
1128 public: {
1129 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1130 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1131 current_api: "sdk_library/public/mynewsdklibrary.txt",
1132 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1133 sdk_version: "current",
1134 },
1135}
1136`
1137 expectedCopyRules := `
1138.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1139.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1140.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1141.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1142.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1143.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
1144.intermediates/mysdklibrary.stubs/android_common/javac/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
1145.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1146.intermediates/mysdklibrary.stubs.source/android_common/metalava/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1147.intermediates/mynewsdklibrary.stubs/android_common/javac/mynewsdklibrary.stubs.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1148.intermediates/mynewsdklibrary.stubs.source/android_common/metalava/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1149.intermediates/mynewsdklibrary.stubs.source/android_common/metalava/mynewsdklibrary.stubs.source_removed.txt -> sdk_library/public/mynewsdklibrary-removed.txt
1150`
1151
1152 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1153 // they are both part of the snapshot.
1154 expectedStubFlagsInputs := []string{
1155 "out/soong/.intermediates/mynewsdklibrary.stubs/android_common/dex/mynewsdklibrary.stubs.jar",
1156 "out/soong/.intermediates/mynewsdklibrary/android_common/aligned/mynewsdklibrary.jar",
1157 "out/soong/.intermediates/mysdklibrary.stubs/android_common/dex/mysdklibrary.stubs.jar",
1158 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1159 }
1160
1161 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1162 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1163 })
1164}