blob: 62e4ad0fc5fdf3259cbf19e153c2016fa38ffea1 [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 {
Jiakai Zhangb8796202023-03-06 19:16:48 +000030 return fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, "")
31}
32
33// fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra is the same as above, but also adds extra fragments.
34func fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, extraFragments string) android.FixturePreparer {
Paul Duffin7c475152021-06-09 16:17:58 +010035 return android.GroupFixturePreparers(
36 // Add a platform_bootclasspath module.
37 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
38 platform_bootclasspath {
39 name: "platform-bootclasspath",
40 fragments: [
41 {
42 apex: "%s",
43 module: "%s",
44 },
Jiakai Zhangb8796202023-03-06 19:16:48 +000045 %s
Paul Duffin7c475152021-06-09 16:17:58 +010046 ],
47 }
Jiakai Zhangb8796202023-03-06 19:16:48 +000048 `, apex, fragment, extraFragments)),
Paul Duffin7c475152021-06-09 16:17:58 +010049 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000050 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010051 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010052 )
53}
54
55// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
56func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
57 apexFile := fmt.Sprintf("%s.apex", apex)
58 dir := "prebuilts/apex"
59 return android.GroupFixturePreparers(
60 // A preparer to add a prebuilt apex to the test fixture.
61 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
62 prebuilt_apex {
63 name: "%s",
64 src: "%s",
65 exported_bootclasspath_fragments: [
66 "%s",
67 ],
68 }
69 `, apex, apexFile, fragment)),
70 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
71 )
72}
73
Paul Duffina57835e2021-04-19 13:23:06 +010074func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
75 result := android.GroupFixturePreparers(
76 prepareForSdkTestWithJava,
Jiakai Zhangb95998b2023-05-11 16:39:27 +010077 java.PrepareForTestWithDexpreopt,
Paul Duffina57835e2021-04-19 13:23:06 +010078 prepareForSdkTestWithApex,
79
80 // Some additional files needed for the art apex.
81 android.FixtureMergeMockFs(android.MockFS{
82 "com.android.art.avbpubkey": nil,
83 "com.android.art.pem": nil,
84 "system/sepolicy/apex/com.android.art-file_contexts": nil,
85 }),
Paul Duffin023dba02021-04-22 01:45:29 +010086
Paul Duffin7c475152021-06-09 16:17:58 +010087 // Add a platform_bootclasspath that depends on the fragment.
Jiakai Zhangb8796202023-03-06 19:16:48 +000088 fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
Jiakai Zhangb69e8952023-07-11 14:31:22 +010089 "com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
Paul Duffin023dba02021-04-22 01:45:29 +010090
Paul Duffin8eb45732022-10-04 19:03:31 +010091 java.PrepareForBootImageConfigTest,
Jiakai Zhangb8796202023-03-06 19:16:48 +000092 java.PrepareApexBootJarConfigsAndModules,
Paul Duffina57835e2021-04-19 13:23:06 +010093 android.FixtureWithRootAndroidBp(`
94 sdk {
95 name: "mysdk",
Jiakai Zhangb69e8952023-07-11 14:31:22 +010096 bootclasspath_fragments: ["art-bootclasspath-fragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010097 }
98
99 apex {
100 name: "com.android.art",
101 key: "com.android.art.key",
102 bootclasspath_fragments: [
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100103 "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100104 ],
105 updatable: false,
106 }
107
108 bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100109 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100110 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100111 contents: ["core1", "core2"],
Paul Duffina57835e2021-04-19 13:23:06 +0100112 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100113 hidden_api: {
114 split_packages: ["*"],
115 },
Paul Duffina57835e2021-04-19 13:23:06 +0100116 }
117
118 apex_key {
119 name: "com.android.art.key",
120 public_key: "com.android.art.avbpubkey",
121 private_key: "com.android.art.pem",
122 }
123
124 java_library {
Paul Duffin8eb45732022-10-04 19:03:31 +0100125 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100126 srcs: ["Test.java"],
127 system_modules: "none",
128 sdk_version: "none",
129 compile_dex: true,
130 apex_available: ["com.android.art"],
131 }
Paul Duffin8eb45732022-10-04 19:03:31 +0100132
133 java_library {
134 name: "core2",
135 srcs: ["Test.java"],
136 system_modules: "none",
137 sdk_version: "none",
138 compile_dex: true,
139 apex_available: ["com.android.art"],
140 }
141`),
Paul Duffina57835e2021-04-19 13:23:06 +0100142 ).RunTest(t)
143
Paul Duffin7c475152021-06-09 16:17:58 +0100144 // A preparer to update the test fixture used when processing an unpackage snapshot.
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100145 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100146
Paul Duffin8eb45732022-10-04 19:03:31 +0100147 // Check that source on its own configures the bootImageConfig correctly.
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100148 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
149 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100150
Paul Duffina57835e2021-04-19 13:23:06 +0100151 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000152 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100153// This is auto-generated. DO NOT EDIT.
154
155prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100156 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100157 prefer: false,
158 visibility: ["//visibility:public"],
159 apex_available: ["com.android.art"],
160 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100161 contents: [
162 "core1",
163 "core2",
164 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100165 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100166 annotation_flags: "hiddenapi/annotation-flags.csv",
167 metadata: "hiddenapi/metadata.csv",
168 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100169 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100170 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
171 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100172 },
Paul Duffina57835e2021-04-19 13:23:06 +0100173}
174
175java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100176 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100177 prefer: false,
178 visibility: ["//visibility:public"],
179 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000180 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100181}
182
183java_import {
184 name: "core2",
185 prefer: false,
186 visibility: ["//visibility:public"],
187 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000188 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100189}
190`),
Paul Duffina57835e2021-04-19 13:23:06 +0100191 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100192.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
193.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
194.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
195.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
196.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
197.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000198.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
199.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100200 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100201 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100202
203 // Check the behavior of the snapshot without the source.
204 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100205 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
206 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000207 append(
208 []string{
209 "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
210 "out/soong/.intermediates/prebuilts/apex/com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
211 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
212 },
213 java.ApexBootJarDexJarPaths...,
214 )...,
215 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100216 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
217 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100218 }),
219
Paul Duffin7c475152021-06-09 16:17:58 +0100220 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100221
222 // Check the behavior of the snapshot when the source is preferred.
223 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100224 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
225 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100226 }),
227
Paul Duffin7c475152021-06-09 16:17:58 +0100228 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100229
230 // Check the behavior of the snapshot when it is preferred.
231 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100232 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
233 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100234 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100235 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100236
Paul Duffin8eb45732022-10-04 19:03:31 +0100237 // Make sure that the boot jars package check rule includes the dex jars created from the source.
238 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000239 append(
240 []string{
241 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
242 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
243 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
244 },
245 java.ApexBootJarDexJarPaths...,
246 )...,
247 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100248}
249
250// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
251// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100252func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
253 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100254 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
255 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
256 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100257 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100258 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100259}
260
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000261func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000262 result := android.GroupFixturePreparers(
263 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100264 java.PrepareForTestWithJavaDefaultModules,
265 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100266 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100267 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100268 prepareForSdkTestWithApex,
269
270 // Add a platform_bootclasspath that depends on the fragment.
271 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
272
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000273 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100274 apex {
275 name: "myapex",
276 key: "myapex.key",
277 min_sdk_version: "2",
278 bootclasspath_fragments: ["mybootclasspathfragment"],
279 }
280
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100281 bootclasspath_fragment {
282 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100283 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100284 contents: [
285 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
286 "mybootlib",
287 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
288 "myothersdklibrary",
289 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100290 api: {
291 stub_libs: ["mysdklibrary"],
292 },
293 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100294 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100295 stub_libs: ["mycoreplatform"],
296 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100297 hidden_api: {
298 split_packages: ["*"],
299 },
Paul Duffina57835e2021-04-19 13:23:06 +0100300 }
301
302 java_library {
303 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100304 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100305 srcs: ["Test.java"],
306 system_modules: "none",
307 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100308 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100309 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100310 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000311 }
Paul Duffin895c7142021-04-25 13:40:15 +0100312
313 java_sdk_library {
314 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100315 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100316 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100317 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100318 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100319 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100320 }
321
322 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100323 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100324 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100325 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100326 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100327 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100328 min_sdk_version: "2",
329 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100330 }
331
332 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100333 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100334 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100335 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100336 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100337 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100338 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100339 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000340 `),
341 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000342
Paul Duffin7c475152021-06-09 16:17:58 +0100343 // A preparer to update the test fixture used when processing an unpackage snapshot.
344 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
345
Paul Duffin36474d32021-03-12 12:19:43 +0000346 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000347 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000348// This is auto-generated. DO NOT EDIT.
349
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100350prebuilt_bootclasspath_fragment {
351 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000352 prefer: false,
353 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100354 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100355 contents: [
356 "mybootlib",
357 "myothersdklibrary",
358 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100359 api: {
360 stub_libs: ["mysdklibrary"],
361 },
362 core_platform_api: {
363 stub_libs: ["mycoreplatform"],
364 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100365 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100366 annotation_flags: "hiddenapi/annotation-flags.csv",
367 metadata: "hiddenapi/metadata.csv",
368 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100369 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100370 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
371 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100372 },
Paul Duffina57835e2021-04-19 13:23:06 +0100373}
374
375java_import {
376 name: "mybootlib",
377 prefer: false,
378 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100379 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000380 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000381 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100382 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000383}
Paul Duffin895c7142021-04-25 13:40:15 +0100384
385java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100386 name: "myothersdklibrary",
387 prefer: false,
388 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100389 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100390 shared_library: true,
391 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100392 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100393 public: {
394 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
395 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
396 current_api: "sdk_library/public/myothersdklibrary.txt",
397 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
398 sdk_version: "current",
399 },
400}
401
402java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100403 name: "mysdklibrary",
404 prefer: false,
405 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100406 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100407 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100408 public: {
409 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
410 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
411 current_api: "sdk_library/public/mysdklibrary.txt",
412 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
413 sdk_version: "current",
414 },
415}
416
417java_sdk_library_import {
418 name: "mycoreplatform",
419 prefer: false,
420 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100421 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100422 shared_library: true,
423 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100424 public: {
425 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
426 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
427 current_api: "sdk_library/public/mycoreplatform.txt",
428 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
429 sdk_version: "current",
430 },
431}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100432 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000433 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100434 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100435 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
436 module := result.ModuleForTests("platform-bootclasspath", "android_common")
437 var rule android.TestingBuildParams
438 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
439 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
440 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
441 out/soong/hiddenapi/hiddenapi-stub-flags.txt
442 snapshot/hiddenapi/annotation-flags.csv
443 `, rule)
444
445 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
446 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
447 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
448 snapshot/hiddenapi/metadata.csv
449 `, rule)
450
451 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
452 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
453 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
454 snapshot/hiddenapi/index.csv
455 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100456
Paul Duffin8d007e92021-07-22 12:00:49 +0100457 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100458 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 +0100459 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100460 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100461 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
462 module := result.ModuleForTests("platform-bootclasspath", "android_common")
463 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100464 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 +0100465 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100466 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
467 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000468}
Paul Duffin04b4a192021-03-18 11:05:31 +0000469
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000470func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
471 t.Run("added-directly", func(t *testing.T) {
472 testSnapshotWithBootClasspathFragment_Contents(t, `
473 sdk {
474 name: "mysdk",
475 bootclasspath_fragments: ["mybootclasspathfragment"],
476 java_sdk_libs: [
477 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
478 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
479 // api.stub_libs property. However, it is specified here to ensure that duplicates are
480 // correctly deduped.
481 "mysdklibrary",
482 ],
483 }
484 `, `
485.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
486.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
487.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
488.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
489.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
490.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000491.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kang1147b312023-06-08 23:25:57 +0000492.intermediates/myothersdklibrary.stubs/android_common/combined/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000493.intermediates/myothersdklibrary.stubs.source/android_common/everything/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
494.intermediates/myothersdklibrary.stubs.source/android_common/everything/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +0000495.intermediates/mysdklibrary.stubs/android_common/combined/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000496.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
497.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +0000498.intermediates/mycoreplatform.stubs/android_common/combined/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000499.intermediates/mycoreplatform.stubs.source/android_common/everything/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
500.intermediates/mycoreplatform.stubs.source/android_common/everything/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000501`)
502 })
503
504 copyBootclasspathFragmentFromApexVariantRules := `
505.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
506.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
507.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
508.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
509.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
510.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000511.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kang1147b312023-06-08 23:25:57 +0000512.intermediates/myothersdklibrary.stubs/android_common/combined/myothersdklibrary.stubs.jar -> sdk_library/public/myothersdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000513.intermediates/myothersdklibrary.stubs.source/android_common/everything/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
514.intermediates/myothersdklibrary.stubs.source/android_common/everything/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +0000515.intermediates/mysdklibrary.stubs/android_common/combined/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000516.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
517.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +0000518.intermediates/mycoreplatform.stubs/android_common/combined/mycoreplatform.stubs.jar -> sdk_library/public/mycoreplatform-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000519.intermediates/mycoreplatform.stubs.source/android_common/everything/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
520.intermediates/mycoreplatform.stubs.source/android_common/everything/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000521`
522 t.Run("added-via-apex", func(t *testing.T) {
523 testSnapshotWithBootClasspathFragment_Contents(t, `
524 sdk {
525 name: "mysdk",
526 apexes: ["myapex"],
527 }
528 `, copyBootclasspathFragmentFromApexVariantRules)
529 })
530
531 t.Run("added-directly-and-indirectly", func(t *testing.T) {
532 testSnapshotWithBootClasspathFragment_Contents(t, `
533 sdk {
534 name: "mysdk",
535 apexes: ["myapex"],
536 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
537 // a bootclasspath_fragments module because it is used in the myapex's
538 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
539 // are correctly deduped.
540 bootclasspath_fragments: ["mybootclasspathfragment"],
541 java_sdk_libs: [
542 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
543 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
544 // api.stub_libs property. However, it is specified here to ensure that duplicates are
545 // correctly deduped.
546 "mysdklibrary",
547 ],
548 }
549 `, copyBootclasspathFragmentFromApexVariantRules)
550 })
551}
552
Paul Duffin51227d82021-05-18 12:54:27 +0100553// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
554// bootclasspath_fragment is correctly output to the sdk snapshot.
555func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
556 result := android.GroupFixturePreparers(
557 prepareForSdkTestWithJava,
558 java.PrepareForTestWithJavaDefaultModules,
559 java.PrepareForTestWithJavaSdkLibraryFiles,
560 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100561 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100562 prepareForSdkTestWithApex,
563
564 // Some additional files needed for the myotherapex.
565 android.FixtureMergeMockFs(android.MockFS{
566 "system/sepolicy/apex/myotherapex-file_contexts": nil,
567 "myotherapex/apex_manifest.json": nil,
568 "myotherapex/Test.java": nil,
569 }),
570
571 android.FixtureAddTextFile("myotherapex/Android.bp", `
572 apex {
573 name: "myotherapex",
574 key: "myapex.key",
575 min_sdk_version: "2",
576 bootclasspath_fragments: ["myotherbootclasspathfragment"],
577 }
578
579 bootclasspath_fragment {
580 name: "myotherbootclasspathfragment",
581 apex_available: ["myotherapex"],
582 contents: [
583 "myotherlib",
584 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100585 hidden_api: {
586 split_packages: ["*"],
587 },
Paul Duffin51227d82021-05-18 12:54:27 +0100588 }
589
590 java_library {
591 name: "myotherlib",
592 apex_available: ["myotherapex"],
593 srcs: ["Test.java"],
594 min_sdk_version: "2",
595 permitted_packages: ["myothersdklibrary"],
596 compile_dex: true,
597 }
598 `),
599
600 android.FixtureWithRootAndroidBp(`
601 sdk {
602 name: "mysdk",
603 bootclasspath_fragments: ["mybootclasspathfragment"],
604 }
605
606 bootclasspath_fragment {
607 name: "mybootclasspathfragment",
608 contents: [
609 "mysdklibrary",
610 ],
611 fragments: [
612 {
613 apex: "myotherapex",
614 module: "myotherbootclasspathfragment"
615 },
616 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100617 hidden_api: {
618 split_packages: ["*"],
619 },
Paul Duffin51227d82021-05-18 12:54:27 +0100620 }
621
622 java_sdk_library {
623 name: "mysdklibrary",
624 srcs: ["Test.java"],
625 shared_library: false,
626 public: {enabled: true},
627 min_sdk_version: "2",
628 }
629 `),
630 ).RunTest(t)
631
632 // A preparer to update the test fixture used when processing an unpackage snapshot.
633 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
634
635 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000636 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100637// This is auto-generated. DO NOT EDIT.
638
639prebuilt_bootclasspath_fragment {
640 name: "mybootclasspathfragment",
641 prefer: false,
642 visibility: ["//visibility:public"],
643 apex_available: ["//apex_available:platform"],
644 contents: ["mysdklibrary"],
645 fragments: [
646 {
647 apex: "myotherapex",
648 module: "myotherbootclasspathfragment",
649 },
650 ],
651 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100652 annotation_flags: "hiddenapi/annotation-flags.csv",
653 metadata: "hiddenapi/metadata.csv",
654 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100655 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100656 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
657 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100658 },
659}
660
661java_sdk_library_import {
662 name: "mysdklibrary",
663 prefer: false,
664 visibility: ["//visibility:public"],
665 apex_available: ["//apex_available:platform"],
666 shared_library: false,
667 public: {
668 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
669 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
670 current_api: "sdk_library/public/mysdklibrary.txt",
671 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
672 sdk_version: "current",
673 },
674}
675 `),
676 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
677 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
678 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
679 )
680}
681
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100682// Test that bootclasspath_fragment works with sdk.
683func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000684 android.GroupFixturePreparers(
685 prepareForSdkTestWithApex,
686 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000687 android.FixtureMergeMockFs(android.MockFS{
688 "java/mybootlib.jar": nil,
689 "hiddenapi/annotation-flags.csv": nil,
690 "hiddenapi/index.csv": nil,
691 "hiddenapi/metadata.csv": nil,
692 "hiddenapi/signature-patterns.csv": nil,
693 "hiddenapi/filtered-stub-flags.csv": nil,
694 "hiddenapi/filtered-flags.csv": nil,
695 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000696 android.FixtureWithRootAndroidBp(`
697 sdk {
698 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100699 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000700 }
701
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100702 bootclasspath_fragment {
703 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000704 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100705 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000706 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100707 hidden_api: {
708 split_packages: ["*"],
709 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000710 }
711
Paul Duffin8018e502021-05-21 19:28:09 +0100712 java_library {
713 name: "mybootlib",
714 apex_available: ["myapex"],
715 srcs: ["Test.java"],
716 system_modules: "none",
717 sdk_version: "none",
718 min_sdk_version: "1",
719 compile_dex: true,
720 }
721
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100722 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000723 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000724 prefer: false,
725 visibility: ["//visibility:public"],
726 apex_available: [
727 "myapex",
728 ],
729 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000730 contents: ["mybootlib"],
731 hidden_api: {
732 annotation_flags: "hiddenapi/annotation-flags.csv",
733 metadata: "hiddenapi/metadata.csv",
734 index: "hiddenapi/index.csv",
735 signature_patterns: "hiddenapi/signature-patterns.csv",
736 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
737 filtered_flags: "hiddenapi/filtered-flags.csv",
738 },
Paul Duffin8018e502021-05-21 19:28:09 +0100739 }
740
741 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000742 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100743 visibility: ["//visibility:public"],
744 apex_available: ["com.android.art"],
745 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000746 }
747 `),
748 ).RunTest(t)
749}
Paul Duffin7c955552021-04-19 13:23:53 +0100750
751func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
752 result := android.GroupFixturePreparers(
753 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100754 java.PrepareForTestWithJavaDefaultModules,
755 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000756 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
757 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100758 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100759
760 // Add a platform_bootclasspath that depends on the fragment.
761 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
762
Paul Duffin7c955552021-04-19 13:23:53 +0100763 android.MockFS{
764 "my-blocked.txt": nil,
765 "my-max-target-o-low-priority.txt": nil,
766 "my-max-target-p.txt": nil,
767 "my-max-target-q.txt": nil,
768 "my-max-target-r-low-priority.txt": nil,
769 "my-removed.txt": nil,
770 "my-unsupported-packages.txt": nil,
771 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000772 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100773 }.AddToFixture(),
774 android.FixtureWithRootAndroidBp(`
775 sdk {
776 name: "mysdk",
777 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100778 }
779
Paul Duffin475daaf2021-05-13 00:57:55 +0100780 apex {
781 name: "myapex",
782 key: "myapex.key",
783 min_sdk_version: "1",
784 bootclasspath_fragments: ["mybootclasspathfragment"],
785 }
786
Paul Duffin7c955552021-04-19 13:23:53 +0100787 bootclasspath_fragment {
788 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100789 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000790 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100791 api: {
792 stub_libs: ["mysdklibrary"],
793 },
Paul Duffin7c955552021-04-19 13:23:53 +0100794 hidden_api: {
795 unsupported: [
796 "my-unsupported.txt",
797 ],
798 removed: [
799 "my-removed.txt",
800 ],
801 max_target_r_low_priority: [
802 "my-max-target-r-low-priority.txt",
803 ],
804 max_target_q: [
805 "my-max-target-q.txt",
806 ],
807 max_target_p: [
808 "my-max-target-p.txt",
809 ],
810 max_target_o_low_priority: [
811 "my-max-target-o-low-priority.txt",
812 ],
813 blocked: [
814 "my-blocked.txt",
815 ],
816 unsupported_packages: [
817 "my-unsupported-packages.txt",
818 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000819 split_packages: ["sdklibrary"],
820 package_prefixes: ["sdklibrary.all.mine"],
821 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100822 },
823 }
824
825 java_library {
826 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100827 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100828 srcs: ["Test.java"],
829 system_modules: "none",
830 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100831 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100832 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100833 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100834 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100835
836 java_sdk_library {
837 name: "mysdklibrary",
838 srcs: ["Test.java"],
839 compile_dex: true,
840 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100841 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000842 min_sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100843 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000844
845 java_sdk_library {
846 name: "mynewlibrary",
847 apex_available: ["myapex"],
848 srcs: ["Test.java"],
849 min_sdk_version: "10",
850 compile_dex: true,
851 public: {enabled: true},
852 permitted_packages: ["mysdklibrary"],
853 hidden_api: {
854 max_target_q: [
855 "my-new-max-target-q.txt",
856 ],
857 split_packages: ["sdklibrary", "newlibrary"],
858 package_prefixes: ["newlibrary.all.mine"],
859 single_packages: ["newlibrary.mine"],
860 },
861 }
Paul Duffin7c955552021-04-19 13:23:53 +0100862 `),
863 ).RunTest(t)
864
Paul Duffin7c475152021-06-09 16:17:58 +0100865 // A preparer to update the test fixture used when processing an unpackage snapshot.
866 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
867
Paul Duffin7c955552021-04-19 13:23:53 +0100868 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000869 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100870// This is auto-generated. DO NOT EDIT.
871
872prebuilt_bootclasspath_fragment {
873 name: "mybootclasspathfragment",
874 prefer: false,
875 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100876 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000877 contents: [
878 "mybootlib",
879 "mynewlibrary",
880 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100881 api: {
882 stub_libs: ["mysdklibrary"],
883 },
Paul Duffin7c955552021-04-19 13:23:53 +0100884 hidden_api: {
885 unsupported: ["hiddenapi/my-unsupported.txt"],
886 removed: ["hiddenapi/my-removed.txt"],
887 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000888 max_target_q: [
889 "hiddenapi/my-max-target-q.txt",
890 "hiddenapi/my-new-max-target-q.txt",
891 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100892 max_target_p: ["hiddenapi/my-max-target-p.txt"],
893 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
894 blocked: ["hiddenapi/my-blocked.txt"],
895 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100896 annotation_flags: "hiddenapi/annotation-flags.csv",
897 metadata: "hiddenapi/metadata.csv",
898 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100899 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100900 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
901 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100902 },
903}
904
905java_import {
906 name: "mybootlib",
907 prefer: false,
908 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100909 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000910 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000911 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100912 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100913}
Paul Duffin475daaf2021-05-13 00:57:55 +0100914
915java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000916 name: "mynewlibrary",
917 prefer: false,
918 visibility: ["//visibility:public"],
919 apex_available: ["myapex"],
920 shared_library: true,
921 compile_dex: true,
922 permitted_packages: ["mysdklibrary"],
923 public: {
924 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
925 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
926 current_api: "sdk_library/public/mynewlibrary.txt",
927 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
928 sdk_version: "current",
929 },
930}
931
932java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100933 name: "mysdklibrary",
934 prefer: false,
935 visibility: ["//visibility:public"],
936 apex_available: ["//apex_available:platform"],
937 shared_library: true,
938 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100939 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100940 public: {
941 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
942 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
943 current_api: "sdk_library/public/mysdklibrary.txt",
944 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
945 sdk_version: "current",
946 },
947}
Paul Duffin7c955552021-04-19 13:23:53 +0100948`),
949 checkAllCopyRules(`
950my-unsupported.txt -> hiddenapi/my-unsupported.txt
951my-removed.txt -> hiddenapi/my-removed.txt
952my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
953my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000954my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100955my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
956my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
957my-blocked.txt -> hiddenapi/my-blocked.txt
958my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100959.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
960.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
961.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100962.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100963.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
964.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000965.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kang1147b312023-06-08 23:25:57 +0000966.intermediates/mynewlibrary.stubs/android_common/combined/mynewlibrary.stubs.jar -> sdk_library/public/mynewlibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000967.intermediates/mynewlibrary.stubs.source/android_common/everything/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
968.intermediates/mynewlibrary.stubs.source/android_common/everything/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +0000969.intermediates/mysdklibrary.stubs/android_common/combined/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +0000970.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
971.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100972`),
Paul Duffin7c475152021-06-09 16:17:58 +0100973 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
974 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
975 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100976 )
977}
Paul Duffin1938dba2022-07-26 23:53:00 +0000978
979func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
980 expectedSdkSnapshot string,
981 expectedCopyRules string,
982 expectedStubFlagsInputs []string,
983 suffix string) {
984
985 result := android.GroupFixturePreparers(
986 prepareForSdkTestWithJava,
987 java.PrepareForTestWithJavaDefaultModules,
988 java.PrepareForTestWithJavaSdkLibraryFiles,
989 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
990 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
991 prepareForSdkTestWithApex,
992
993 // Add a platform_bootclasspath that depends on the fragment.
994 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
995
996 android.FixtureMergeEnv(map[string]string{
997 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
998 }),
999
Jihoon Kangbd093452023-12-26 19:08:01 +00001000 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1001 variables.BuildFlags = map[string]string{
1002 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
1003 }
1004 }),
1005
Paul Duffin1938dba2022-07-26 23:53:00 +00001006 android.FixtureWithRootAndroidBp(`
1007 sdk {
1008 name: "mysdk",
1009 apexes: ["myapex"],
1010 }
1011
1012 apex {
1013 name: "myapex",
1014 key: "myapex.key",
1015 min_sdk_version: "S",
1016 bootclasspath_fragments: ["mybootclasspathfragment"],
1017 }
1018
1019 bootclasspath_fragment {
1020 name: "mybootclasspathfragment",
1021 apex_available: ["myapex"],
1022 contents: [
1023 "mysdklibrary",
1024 "mynewsdklibrary",
1025 ],
1026
1027 hidden_api: {
1028 split_packages: [],
1029 },
1030 }
1031
1032 java_sdk_library {
1033 name: "mysdklibrary",
1034 apex_available: ["myapex"],
1035 srcs: ["Test.java"],
1036 shared_library: false,
1037 public: {enabled: true},
1038 min_sdk_version: "S",
1039 }
1040
1041 java_sdk_library {
1042 name: "mynewsdklibrary",
1043 apex_available: ["myapex"],
1044 srcs: ["Test.java"],
1045 compile_dex: true,
1046 public: {enabled: true},
1047 min_sdk_version: "Tiramisu",
1048 permitted_packages: ["mynewsdklibrary"],
1049 }
1050 `),
1051 ).RunTest(t)
1052
1053 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1054 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
1055 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", expectedStubFlagsInputs, rule.Implicits)
1056
1057 CheckSnapshot(t, result, "mysdk", "",
1058 checkAndroidBpContents(expectedSdkSnapshot),
1059 checkAllCopyRules(expectedCopyRules),
1060 )
1061}
1062
1063func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1064 t.Run("target S build", func(t *testing.T) {
1065 expectedSnapshot := `
1066// This is auto-generated. DO NOT EDIT.
1067
1068prebuilt_bootclasspath_fragment {
1069 name: "mybootclasspathfragment",
1070 prefer: false,
1071 visibility: ["//visibility:public"],
1072 apex_available: ["myapex"],
1073 contents: ["mysdklibrary"],
1074 hidden_api: {
1075 annotation_flags: "hiddenapi/annotation-flags.csv",
1076 metadata: "hiddenapi/metadata.csv",
1077 index: "hiddenapi/index.csv",
1078 stub_flags: "hiddenapi/stub-flags.csv",
1079 all_flags: "hiddenapi/all-flags.csv",
1080 },
1081}
1082
1083java_sdk_library_import {
1084 name: "mysdklibrary",
1085 prefer: false,
1086 visibility: ["//visibility:public"],
1087 apex_available: ["myapex"],
1088 shared_library: false,
1089 public: {
1090 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1091 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1092 current_api: "sdk_library/public/mysdklibrary.txt",
1093 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1094 sdk_version: "current",
1095 },
1096}
1097`
1098 expectedCopyRules := `
1099.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1100.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1101.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1102.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1103.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kang1147b312023-06-08 23:25:57 +00001104.intermediates/mysdklibrary.stubs/android_common/combined/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +00001105.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1106.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001107`
1108
1109 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1110 // of the snapshot.
1111 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001112 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001113 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1114 }
1115
1116 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1117 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1118 })
1119
1120 t.Run("target-Tiramisu-build", func(t *testing.T) {
1121 expectedSnapshot := `
1122// This is auto-generated. DO NOT EDIT.
1123
1124prebuilt_bootclasspath_fragment {
1125 name: "mybootclasspathfragment",
1126 prefer: false,
1127 visibility: ["//visibility:public"],
1128 apex_available: ["myapex"],
1129 contents: [
1130 "mysdklibrary",
1131 "mynewsdklibrary",
1132 ],
1133 hidden_api: {
1134 annotation_flags: "hiddenapi/annotation-flags.csv",
1135 metadata: "hiddenapi/metadata.csv",
1136 index: "hiddenapi/index.csv",
1137 signature_patterns: "hiddenapi/signature-patterns.csv",
1138 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1139 filtered_flags: "hiddenapi/filtered-flags.csv",
1140 },
1141}
1142
1143java_sdk_library_import {
1144 name: "mysdklibrary",
1145 prefer: false,
1146 visibility: ["//visibility:public"],
1147 apex_available: ["myapex"],
1148 shared_library: false,
1149 public: {
1150 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1151 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1152 current_api: "sdk_library/public/mysdklibrary.txt",
1153 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1154 sdk_version: "current",
1155 },
1156}
1157
1158java_sdk_library_import {
1159 name: "mynewsdklibrary",
1160 prefer: false,
1161 visibility: ["//visibility:public"],
1162 apex_available: ["myapex"],
1163 shared_library: true,
1164 compile_dex: true,
1165 permitted_packages: ["mynewsdklibrary"],
1166 public: {
1167 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1168 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1169 current_api: "sdk_library/public/mynewsdklibrary.txt",
1170 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1171 sdk_version: "current",
1172 },
1173}
1174`
1175 expectedCopyRules := `
1176.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1177.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1178.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1179.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1180.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1181.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kang1147b312023-06-08 23:25:57 +00001182.intermediates/mysdklibrary.stubs/android_common/combined/mysdklibrary.stubs.jar -> sdk_library/public/mysdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +00001183.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1184.intermediates/mysdklibrary.stubs.source/android_common/everything/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Jihoon Kang1147b312023-06-08 23:25:57 +00001185.intermediates/mynewsdklibrary.stubs/android_common/combined/mynewsdklibrary.stubs.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
Jihoon Kang3c89f042023-12-19 02:40:22 +00001186.intermediates/mynewsdklibrary.stubs.source/android_common/everything/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1187.intermediates/mynewsdklibrary.stubs.source/android_common/everything/mynewsdklibrary.stubs.source_removed.txt -> sdk_library/public/mynewsdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001188`
1189
1190 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1191 // they are both part of the snapshot.
1192 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001193 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001194 "out/soong/.intermediates/mynewsdklibrary/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001195 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001196 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1197 }
1198
1199 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1200 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1201 })
1202}
Sam Delmerico35881362023-06-30 14:40:10 -04001203
1204func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1205 result := android.GroupFixturePreparers(
1206 prepareForSdkTestWithJava,
1207 java.PrepareForTestWithJavaDefaultModules,
1208 java.PrepareForTestWithJavaSdkLibraryFiles,
1209 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1210 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1211 prepareForSdkTestWithApex,
1212 // Add a platform_bootclasspath that depends on the fragment.
1213 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1214 android.FixtureMergeEnv(map[string]string{
1215 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1216 }),
1217 android.FixtureWithRootAndroidBp(`
1218 sdk {
1219 name: "mysdk",
1220 apexes: ["myapex"],
1221 }
1222 apex {
1223 name: "myapex",
1224 key: "myapex.key",
1225 min_sdk_version: "S",
1226 bootclasspath_fragments: ["mybootclasspathfragment"],
1227 }
1228 bootclasspath_fragment {
1229 name: "mybootclasspathfragment",
1230 apex_available: ["myapex"],
1231 contents: ["mysdklibrary", "mynewsdklibrary"],
1232 hidden_api: {
1233 split_packages: [],
1234 },
1235 }
1236 java_sdk_library {
1237 name: "mysdklibrary",
1238 apex_available: ["myapex"],
1239 srcs: ["Test.java"],
1240 shared_library: false,
1241 public: {enabled: true},
1242 min_sdk_version: "Tiramisu",
1243 }
1244 java_sdk_library {
1245 name: "mynewsdklibrary",
1246 apex_available: ["myapex"],
1247 srcs: ["Test.java"],
1248 compile_dex: true,
1249 public: {enabled: true},
1250 min_sdk_version: "Tiramisu",
1251 permitted_packages: ["mynewsdklibrary"],
1252 }
1253 `),
1254 ).RunTest(t)
1255
1256 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1257}