blob: 7ee548f34be65cea95055e85808539842da9082c [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
Spandan Dasa5e26d32024-03-06 14:04:36 +0000155apex_contributions_defaults {
156 name: "mysdk.contributions",
157 contents: [],
158}
159
Paul Duffina57835e2021-04-19 13:23:06 +0100160prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100161 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100162 prefer: false,
163 visibility: ["//visibility:public"],
164 apex_available: ["com.android.art"],
165 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100166 contents: [
167 "core1",
168 "core2",
169 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100170 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100171 annotation_flags: "hiddenapi/annotation-flags.csv",
172 metadata: "hiddenapi/metadata.csv",
173 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100174 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100175 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
176 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100177 },
Paul Duffina57835e2021-04-19 13:23:06 +0100178}
179
180java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100181 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100182 prefer: false,
183 visibility: ["//visibility:public"],
184 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000185 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100186}
187
188java_import {
189 name: "core2",
190 prefer: false,
191 visibility: ["//visibility:public"],
192 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000193 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100194}
Spandan Dasa5e26d32024-03-06 14:04:36 +0000195
Paul Duffina57835e2021-04-19 13:23:06 +0100196`),
Paul Duffina57835e2021-04-19 13:23:06 +0100197 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100198.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
199.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
200.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
201.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
202.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
203.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000204.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
205.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100206 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100207 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100208
209 // Check the behavior of the snapshot without the source.
210 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100211 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
212 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000213 append(
214 []string{
Spandan Das3576e762024-01-03 18:57:03 +0000215 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
216 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000217 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
218 },
219 java.ApexBootJarDexJarPaths...,
220 )...,
221 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100222 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
223 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100224 }),
225
Paul Duffin7c475152021-06-09 16:17:58 +0100226 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100227
228 // Check the behavior of the snapshot when the source is preferred.
229 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100230 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
231 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100232 }),
233
Paul Duffin7c475152021-06-09 16:17:58 +0100234 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100235
236 // Check the behavior of the snapshot when it is preferred.
237 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100238 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
239 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100240 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100241 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100242
Paul Duffin8eb45732022-10-04 19:03:31 +0100243 // Make sure that the boot jars package check rule includes the dex jars created from the source.
244 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000245 append(
246 []string{
247 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
248 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
249 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
250 },
251 java.ApexBootJarDexJarPaths...,
252 )...,
253 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100254}
255
256// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
257// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100258func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
259 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100260 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
261 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
262 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100263 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100264 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100265}
266
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000267func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000268 result := android.GroupFixturePreparers(
269 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100270 java.PrepareForTestWithJavaDefaultModules,
271 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100272 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100273 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100274 prepareForSdkTestWithApex,
275
276 // Add a platform_bootclasspath that depends on the fragment.
277 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
278
Colin Crossa66b4632024-08-08 15:50:47 -0700279 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Spandan Das81fe4d12024-05-15 18:43:47 +0000280 // Make sure that we have atleast one platform library so that we can check the monolithic hiddenapi
281 // file creation.
282 java.FixtureConfigureBootJars("platform:foo"),
283 android.FixtureModifyMockFS(func(fs android.MockFS) {
284 fs["platform/Android.bp"] = []byte(`
285 java_library {
286 name: "foo",
287 srcs: ["Test.java"],
288 compile_dex: true,
289 }
290 `)
291 fs["platform/Test.java"] = nil
292 }),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000293
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000294 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100295 apex {
296 name: "myapex",
297 key: "myapex.key",
298 min_sdk_version: "2",
299 bootclasspath_fragments: ["mybootclasspathfragment"],
300 }
301
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100302 bootclasspath_fragment {
303 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100304 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100305 contents: [
306 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
307 "mybootlib",
308 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
309 "myothersdklibrary",
310 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100311 api: {
312 stub_libs: ["mysdklibrary"],
313 },
314 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100315 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100316 stub_libs: ["mycoreplatform"],
317 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100318 hidden_api: {
319 split_packages: ["*"],
320 },
Paul Duffina57835e2021-04-19 13:23:06 +0100321 }
322
323 java_library {
324 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100325 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100326 srcs: ["Test.java"],
327 system_modules: "none",
328 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100329 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100330 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100331 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000332 }
Paul Duffin895c7142021-04-25 13:40:15 +0100333
334 java_sdk_library {
335 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100336 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100337 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100338 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100339 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100340 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100341 }
342
343 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100344 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100345 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100346 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100347 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100348 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100349 min_sdk_version: "2",
350 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100351 }
352
353 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100354 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100355 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100356 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100357 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100358 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100359 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100360 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000361 `),
362 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000363
Paul Duffin7c475152021-06-09 16:17:58 +0100364 // A preparer to update the test fixture used when processing an unpackage snapshot.
365 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
366
Paul Duffin36474d32021-03-12 12:19:43 +0000367 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000368 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000369// This is auto-generated. DO NOT EDIT.
370
Spandan Dasa5e26d32024-03-06 14:04:36 +0000371apex_contributions_defaults {
372 name: "mysdk.contributions",
373 contents: [
374 "prebuilt_myothersdklibrary",
375 "prebuilt_mysdklibrary",
376 "prebuilt_mycoreplatform",
377 ],
378}
379
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100380prebuilt_bootclasspath_fragment {
381 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000382 prefer: false,
383 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100384 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100385 contents: [
386 "mybootlib",
387 "myothersdklibrary",
388 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100389 api: {
390 stub_libs: ["mysdklibrary"],
391 },
392 core_platform_api: {
393 stub_libs: ["mycoreplatform"],
394 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100395 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100396 annotation_flags: "hiddenapi/annotation-flags.csv",
397 metadata: "hiddenapi/metadata.csv",
398 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100399 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100400 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
401 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100402 },
Paul Duffina57835e2021-04-19 13:23:06 +0100403}
404
405java_import {
406 name: "mybootlib",
407 prefer: false,
408 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100409 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000410 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000411 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100412 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000413}
Paul Duffin895c7142021-04-25 13:40:15 +0100414
415java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100416 name: "myothersdklibrary",
417 prefer: false,
418 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100419 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100420 shared_library: true,
421 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100422 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100423 public: {
424 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
425 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
426 current_api: "sdk_library/public/myothersdklibrary.txt",
427 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
428 sdk_version: "current",
429 },
430}
431
432java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100433 name: "mysdklibrary",
434 prefer: false,
435 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100436 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100437 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100438 public: {
439 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
440 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
441 current_api: "sdk_library/public/mysdklibrary.txt",
442 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
443 sdk_version: "current",
444 },
445}
446
447java_sdk_library_import {
448 name: "mycoreplatform",
449 prefer: false,
450 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100451 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100452 shared_library: true,
453 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100454 public: {
455 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
456 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
457 current_api: "sdk_library/public/mycoreplatform.txt",
458 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
459 sdk_version: "current",
460 },
461}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100462 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000463 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100464 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100465 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
466 module := result.ModuleForTests("platform-bootclasspath", "android_common")
467 var rule android.TestingBuildParams
468 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
469 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
470 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
471 out/soong/hiddenapi/hiddenapi-stub-flags.txt
472 snapshot/hiddenapi/annotation-flags.csv
473 `, rule)
474
475 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
476 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
477 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
478 snapshot/hiddenapi/metadata.csv
479 `, rule)
480
481 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
482 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
483 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
484 snapshot/hiddenapi/index.csv
485 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100486
Paul Duffin8d007e92021-07-22 12:00:49 +0100487 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100488 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 +0100489 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100490 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100491 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
492 module := result.ModuleForTests("platform-bootclasspath", "android_common")
493 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100494 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 +0100495 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100496 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
497 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000498}
Paul Duffin04b4a192021-03-18 11:05:31 +0000499
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000500func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
501 t.Run("added-directly", func(t *testing.T) {
502 testSnapshotWithBootClasspathFragment_Contents(t, `
503 sdk {
504 name: "mysdk",
505 bootclasspath_fragments: ["mybootclasspathfragment"],
506 java_sdk_libs: [
507 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
508 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
509 // api.stub_libs property. However, it is specified here to ensure that duplicates are
510 // correctly deduped.
511 "mysdklibrary",
512 ],
513 }
514 `, `
515.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
516.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
517.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
518.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
519.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
520.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000521.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000522.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
523.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
524.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
525.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
526.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
527.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
528.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
529.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
530.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000531`)
532 })
533
534 copyBootclasspathFragmentFromApexVariantRules := `
535.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
536.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
537.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
538.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
539.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
540.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000541.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000542.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
543.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
544.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
545.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
546.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
547.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
548.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
549.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
550.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000551`
552 t.Run("added-via-apex", func(t *testing.T) {
553 testSnapshotWithBootClasspathFragment_Contents(t, `
554 sdk {
555 name: "mysdk",
556 apexes: ["myapex"],
557 }
558 `, copyBootclasspathFragmentFromApexVariantRules)
559 })
560
561 t.Run("added-directly-and-indirectly", func(t *testing.T) {
562 testSnapshotWithBootClasspathFragment_Contents(t, `
563 sdk {
564 name: "mysdk",
565 apexes: ["myapex"],
566 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
567 // a bootclasspath_fragments module because it is used in the myapex's
568 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
569 // are correctly deduped.
570 bootclasspath_fragments: ["mybootclasspathfragment"],
571 java_sdk_libs: [
572 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
573 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
574 // api.stub_libs property. However, it is specified here to ensure that duplicates are
575 // correctly deduped.
576 "mysdklibrary",
577 ],
578 }
579 `, copyBootclasspathFragmentFromApexVariantRules)
580 })
581}
582
Paul Duffin51227d82021-05-18 12:54:27 +0100583// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
584// bootclasspath_fragment is correctly output to the sdk snapshot.
585func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
586 result := android.GroupFixturePreparers(
587 prepareForSdkTestWithJava,
588 java.PrepareForTestWithJavaDefaultModules,
589 java.PrepareForTestWithJavaSdkLibraryFiles,
590 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100591 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100592 prepareForSdkTestWithApex,
593
594 // Some additional files needed for the myotherapex.
595 android.FixtureMergeMockFs(android.MockFS{
596 "system/sepolicy/apex/myotherapex-file_contexts": nil,
597 "myotherapex/apex_manifest.json": nil,
598 "myotherapex/Test.java": nil,
599 }),
600
601 android.FixtureAddTextFile("myotherapex/Android.bp", `
602 apex {
603 name: "myotherapex",
604 key: "myapex.key",
605 min_sdk_version: "2",
606 bootclasspath_fragments: ["myotherbootclasspathfragment"],
607 }
608
609 bootclasspath_fragment {
610 name: "myotherbootclasspathfragment",
611 apex_available: ["myotherapex"],
612 contents: [
613 "myotherlib",
614 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100615 hidden_api: {
616 split_packages: ["*"],
617 },
Paul Duffin51227d82021-05-18 12:54:27 +0100618 }
619
620 java_library {
621 name: "myotherlib",
622 apex_available: ["myotherapex"],
623 srcs: ["Test.java"],
624 min_sdk_version: "2",
625 permitted_packages: ["myothersdklibrary"],
626 compile_dex: true,
627 }
628 `),
629
630 android.FixtureWithRootAndroidBp(`
631 sdk {
632 name: "mysdk",
633 bootclasspath_fragments: ["mybootclasspathfragment"],
634 }
635
636 bootclasspath_fragment {
637 name: "mybootclasspathfragment",
638 contents: [
639 "mysdklibrary",
640 ],
641 fragments: [
642 {
643 apex: "myotherapex",
644 module: "myotherbootclasspathfragment"
645 },
646 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100647 hidden_api: {
648 split_packages: ["*"],
649 },
Paul Duffin51227d82021-05-18 12:54:27 +0100650 }
651
652 java_sdk_library {
653 name: "mysdklibrary",
654 srcs: ["Test.java"],
655 shared_library: false,
656 public: {enabled: true},
657 min_sdk_version: "2",
658 }
659 `),
660 ).RunTest(t)
661
662 // A preparer to update the test fixture used when processing an unpackage snapshot.
663 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
664
665 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000666 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100667// This is auto-generated. DO NOT EDIT.
668
Spandan Dasa5e26d32024-03-06 14:04:36 +0000669apex_contributions_defaults {
670 name: "mysdk.contributions",
671 contents: ["prebuilt_mysdklibrary"],
672}
673
Paul Duffin51227d82021-05-18 12:54:27 +0100674prebuilt_bootclasspath_fragment {
675 name: "mybootclasspathfragment",
676 prefer: false,
677 visibility: ["//visibility:public"],
678 apex_available: ["//apex_available:platform"],
679 contents: ["mysdklibrary"],
680 fragments: [
681 {
682 apex: "myotherapex",
683 module: "myotherbootclasspathfragment",
684 },
685 ],
686 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100687 annotation_flags: "hiddenapi/annotation-flags.csv",
688 metadata: "hiddenapi/metadata.csv",
689 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100690 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100691 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
692 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100693 },
694}
695
696java_sdk_library_import {
697 name: "mysdklibrary",
698 prefer: false,
699 visibility: ["//visibility:public"],
700 apex_available: ["//apex_available:platform"],
701 shared_library: false,
702 public: {
703 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
704 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
705 current_api: "sdk_library/public/mysdklibrary.txt",
706 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
707 sdk_version: "current",
708 },
709}
710 `),
711 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
712 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
713 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
714 )
715}
716
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100717// Test that bootclasspath_fragment works with sdk.
718func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000719 android.GroupFixturePreparers(
720 prepareForSdkTestWithApex,
721 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000722 android.FixtureMergeMockFs(android.MockFS{
723 "java/mybootlib.jar": nil,
724 "hiddenapi/annotation-flags.csv": nil,
725 "hiddenapi/index.csv": nil,
726 "hiddenapi/metadata.csv": nil,
727 "hiddenapi/signature-patterns.csv": nil,
728 "hiddenapi/filtered-stub-flags.csv": nil,
729 "hiddenapi/filtered-flags.csv": nil,
730 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000731 android.FixtureWithRootAndroidBp(`
732 sdk {
733 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100734 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000735 }
736
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100737 bootclasspath_fragment {
738 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000739 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100740 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000741 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100742 hidden_api: {
743 split_packages: ["*"],
744 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000745 }
746
Paul Duffin8018e502021-05-21 19:28:09 +0100747 java_library {
748 name: "mybootlib",
749 apex_available: ["myapex"],
750 srcs: ["Test.java"],
751 system_modules: "none",
752 sdk_version: "none",
753 min_sdk_version: "1",
754 compile_dex: true,
755 }
756
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100757 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000758 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000759 prefer: false,
760 visibility: ["//visibility:public"],
761 apex_available: [
762 "myapex",
763 ],
764 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000765 contents: ["mybootlib"],
766 hidden_api: {
767 annotation_flags: "hiddenapi/annotation-flags.csv",
768 metadata: "hiddenapi/metadata.csv",
769 index: "hiddenapi/index.csv",
770 signature_patterns: "hiddenapi/signature-patterns.csv",
771 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
772 filtered_flags: "hiddenapi/filtered-flags.csv",
773 },
Paul Duffin8018e502021-05-21 19:28:09 +0100774 }
775
776 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000777 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100778 visibility: ["//visibility:public"],
779 apex_available: ["com.android.art"],
780 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000781 }
782 `),
783 ).RunTest(t)
784}
Paul Duffin7c955552021-04-19 13:23:53 +0100785
786func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
787 result := android.GroupFixturePreparers(
788 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100789 java.PrepareForTestWithJavaDefaultModules,
790 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000791 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
792 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100793 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100794
795 // Add a platform_bootclasspath that depends on the fragment.
796 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
797
Colin Crossa66b4632024-08-08 15:50:47 -0700798 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000799
Paul Duffin7c955552021-04-19 13:23:53 +0100800 android.MockFS{
801 "my-blocked.txt": nil,
802 "my-max-target-o-low-priority.txt": nil,
803 "my-max-target-p.txt": nil,
804 "my-max-target-q.txt": nil,
805 "my-max-target-r-low-priority.txt": nil,
806 "my-removed.txt": nil,
807 "my-unsupported-packages.txt": nil,
808 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000809 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100810 }.AddToFixture(),
811 android.FixtureWithRootAndroidBp(`
812 sdk {
813 name: "mysdk",
814 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100815 }
816
Paul Duffin475daaf2021-05-13 00:57:55 +0100817 apex {
818 name: "myapex",
819 key: "myapex.key",
820 min_sdk_version: "1",
821 bootclasspath_fragments: ["mybootclasspathfragment"],
822 }
823
Paul Duffin7c955552021-04-19 13:23:53 +0100824 bootclasspath_fragment {
825 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100826 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000827 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100828 api: {
829 stub_libs: ["mysdklibrary"],
830 },
Paul Duffin7c955552021-04-19 13:23:53 +0100831 hidden_api: {
832 unsupported: [
833 "my-unsupported.txt",
834 ],
835 removed: [
836 "my-removed.txt",
837 ],
838 max_target_r_low_priority: [
839 "my-max-target-r-low-priority.txt",
840 ],
841 max_target_q: [
842 "my-max-target-q.txt",
843 ],
844 max_target_p: [
845 "my-max-target-p.txt",
846 ],
847 max_target_o_low_priority: [
848 "my-max-target-o-low-priority.txt",
849 ],
850 blocked: [
851 "my-blocked.txt",
852 ],
853 unsupported_packages: [
854 "my-unsupported-packages.txt",
855 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000856 split_packages: ["sdklibrary"],
857 package_prefixes: ["sdklibrary.all.mine"],
858 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100859 },
860 }
861
862 java_library {
863 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100864 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100865 srcs: ["Test.java"],
866 system_modules: "none",
867 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100868 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100869 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100870 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100871 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100872
873 java_sdk_library {
874 name: "mysdklibrary",
875 srcs: ["Test.java"],
876 compile_dex: true,
877 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100878 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000879 min_sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100880 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000881
882 java_sdk_library {
883 name: "mynewlibrary",
884 apex_available: ["myapex"],
885 srcs: ["Test.java"],
886 min_sdk_version: "10",
887 compile_dex: true,
888 public: {enabled: true},
889 permitted_packages: ["mysdklibrary"],
890 hidden_api: {
891 max_target_q: [
892 "my-new-max-target-q.txt",
893 ],
894 split_packages: ["sdklibrary", "newlibrary"],
895 package_prefixes: ["newlibrary.all.mine"],
896 single_packages: ["newlibrary.mine"],
897 },
898 }
Paul Duffin7c955552021-04-19 13:23:53 +0100899 `),
900 ).RunTest(t)
901
Paul Duffin7c475152021-06-09 16:17:58 +0100902 // A preparer to update the test fixture used when processing an unpackage snapshot.
903 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
904
Paul Duffin7c955552021-04-19 13:23:53 +0100905 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000906 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100907// This is auto-generated. DO NOT EDIT.
908
Spandan Dasa5e26d32024-03-06 14:04:36 +0000909apex_contributions_defaults {
910 name: "mysdk.contributions",
911 contents: [
912 "prebuilt_mynewlibrary",
913 "prebuilt_mysdklibrary",
914 ],
915}
916
Paul Duffin7c955552021-04-19 13:23:53 +0100917prebuilt_bootclasspath_fragment {
918 name: "mybootclasspathfragment",
919 prefer: false,
920 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100921 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000922 contents: [
923 "mybootlib",
924 "mynewlibrary",
925 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100926 api: {
927 stub_libs: ["mysdklibrary"],
928 },
Paul Duffin7c955552021-04-19 13:23:53 +0100929 hidden_api: {
930 unsupported: ["hiddenapi/my-unsupported.txt"],
931 removed: ["hiddenapi/my-removed.txt"],
932 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000933 max_target_q: [
934 "hiddenapi/my-max-target-q.txt",
935 "hiddenapi/my-new-max-target-q.txt",
936 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100937 max_target_p: ["hiddenapi/my-max-target-p.txt"],
938 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
939 blocked: ["hiddenapi/my-blocked.txt"],
940 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100941 annotation_flags: "hiddenapi/annotation-flags.csv",
942 metadata: "hiddenapi/metadata.csv",
943 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100944 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100945 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
946 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100947 },
948}
949
950java_import {
951 name: "mybootlib",
952 prefer: false,
953 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100954 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000955 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000956 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100957 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100958}
Paul Duffin475daaf2021-05-13 00:57:55 +0100959
960java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000961 name: "mynewlibrary",
962 prefer: false,
963 visibility: ["//visibility:public"],
964 apex_available: ["myapex"],
965 shared_library: true,
966 compile_dex: true,
967 permitted_packages: ["mysdklibrary"],
968 public: {
969 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
970 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
971 current_api: "sdk_library/public/mynewlibrary.txt",
972 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
973 sdk_version: "current",
974 },
975}
976
977java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100978 name: "mysdklibrary",
979 prefer: false,
980 visibility: ["//visibility:public"],
981 apex_available: ["//apex_available:platform"],
982 shared_library: true,
983 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100984 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100985 public: {
986 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
987 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
988 current_api: "sdk_library/public/mysdklibrary.txt",
989 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
990 sdk_version: "current",
991 },
992}
Paul Duffin7c955552021-04-19 13:23:53 +0100993`),
994 checkAllCopyRules(`
995my-unsupported.txt -> hiddenapi/my-unsupported.txt
996my-removed.txt -> hiddenapi/my-removed.txt
997my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
998my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000999my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +01001000my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
1001my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
1002my-blocked.txt -> hiddenapi/my-blocked.txt
1003my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +01001004.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1005.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1006.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +01001007.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +01001008.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1009.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +00001010.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001011.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1012.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1013.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1014.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1015.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1016.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin7c955552021-04-19 13:23:53 +01001017`),
Paul Duffin7c475152021-06-09 16:17:58 +01001018 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1019 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1020 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +01001021 )
1022}
Paul Duffin1938dba2022-07-26 23:53:00 +00001023
1024func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1025 expectedSdkSnapshot string,
1026 expectedCopyRules string,
1027 expectedStubFlagsInputs []string,
1028 suffix string) {
1029
1030 result := android.GroupFixturePreparers(
1031 prepareForSdkTestWithJava,
1032 java.PrepareForTestWithJavaDefaultModules,
1033 java.PrepareForTestWithJavaSdkLibraryFiles,
1034 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1035 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1036 prepareForSdkTestWithApex,
1037
1038 // Add a platform_bootclasspath that depends on the fragment.
1039 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1040
1041 android.FixtureMergeEnv(map[string]string{
1042 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1043 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001044 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1045 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1046 }),
Paul Duffin1938dba2022-07-26 23:53:00 +00001047
Colin Crossa66b4632024-08-08 15:50:47 -07001048 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangbd093452023-12-26 19:08:01 +00001049
Paul Duffin1938dba2022-07-26 23:53:00 +00001050 android.FixtureWithRootAndroidBp(`
1051 sdk {
1052 name: "mysdk",
1053 apexes: ["myapex"],
1054 }
1055
1056 apex {
1057 name: "myapex",
1058 key: "myapex.key",
1059 min_sdk_version: "S",
1060 bootclasspath_fragments: ["mybootclasspathfragment"],
1061 }
1062
1063 bootclasspath_fragment {
1064 name: "mybootclasspathfragment",
1065 apex_available: ["myapex"],
1066 contents: [
1067 "mysdklibrary",
1068 "mynewsdklibrary",
1069 ],
1070
1071 hidden_api: {
1072 split_packages: [],
1073 },
1074 }
1075
1076 java_sdk_library {
1077 name: "mysdklibrary",
1078 apex_available: ["myapex"],
1079 srcs: ["Test.java"],
1080 shared_library: false,
1081 public: {enabled: true},
1082 min_sdk_version: "S",
1083 }
1084
1085 java_sdk_library {
1086 name: "mynewsdklibrary",
1087 apex_available: ["myapex"],
1088 srcs: ["Test.java"],
1089 compile_dex: true,
1090 public: {enabled: true},
1091 min_sdk_version: "Tiramisu",
1092 permitted_packages: ["mynewsdklibrary"],
1093 }
1094 `),
1095 ).RunTest(t)
1096
1097 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1098 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
Jihoon Kanga3a05462024-04-05 00:36:44 +00001099 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
Paul Duffin1938dba2022-07-26 23:53:00 +00001100
1101 CheckSnapshot(t, result, "mysdk", "",
1102 checkAndroidBpContents(expectedSdkSnapshot),
1103 checkAllCopyRules(expectedCopyRules),
1104 )
1105}
1106
1107func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1108 t.Run("target S build", func(t *testing.T) {
1109 expectedSnapshot := `
1110// This is auto-generated. DO NOT EDIT.
1111
1112prebuilt_bootclasspath_fragment {
1113 name: "mybootclasspathfragment",
1114 prefer: false,
1115 visibility: ["//visibility:public"],
1116 apex_available: ["myapex"],
1117 contents: ["mysdklibrary"],
1118 hidden_api: {
1119 annotation_flags: "hiddenapi/annotation-flags.csv",
1120 metadata: "hiddenapi/metadata.csv",
1121 index: "hiddenapi/index.csv",
1122 stub_flags: "hiddenapi/stub-flags.csv",
1123 all_flags: "hiddenapi/all-flags.csv",
1124 },
1125}
1126
1127java_sdk_library_import {
1128 name: "mysdklibrary",
1129 prefer: false,
1130 visibility: ["//visibility:public"],
1131 apex_available: ["myapex"],
1132 shared_library: false,
1133 public: {
1134 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1135 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1136 current_api: "sdk_library/public/mysdklibrary.txt",
1137 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1138 sdk_version: "current",
1139 },
1140}
1141`
1142 expectedCopyRules := `
1143.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1144.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1145.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1146.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1147.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001148.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1149.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1150.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001151`
1152
1153 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1154 // of the snapshot.
1155 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001156 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001157 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001158 }
1159
1160 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1161 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1162 })
1163
1164 t.Run("target-Tiramisu-build", func(t *testing.T) {
1165 expectedSnapshot := `
1166// This is auto-generated. DO NOT EDIT.
1167
1168prebuilt_bootclasspath_fragment {
1169 name: "mybootclasspathfragment",
1170 prefer: false,
1171 visibility: ["//visibility:public"],
1172 apex_available: ["myapex"],
1173 contents: [
1174 "mysdklibrary",
1175 "mynewsdklibrary",
1176 ],
1177 hidden_api: {
1178 annotation_flags: "hiddenapi/annotation-flags.csv",
1179 metadata: "hiddenapi/metadata.csv",
1180 index: "hiddenapi/index.csv",
1181 signature_patterns: "hiddenapi/signature-patterns.csv",
1182 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1183 filtered_flags: "hiddenapi/filtered-flags.csv",
1184 },
1185}
1186
1187java_sdk_library_import {
1188 name: "mysdklibrary",
1189 prefer: false,
1190 visibility: ["//visibility:public"],
1191 apex_available: ["myapex"],
1192 shared_library: false,
1193 public: {
1194 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1195 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1196 current_api: "sdk_library/public/mysdklibrary.txt",
1197 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1198 sdk_version: "current",
1199 },
1200}
1201
1202java_sdk_library_import {
1203 name: "mynewsdklibrary",
1204 prefer: false,
1205 visibility: ["//visibility:public"],
1206 apex_available: ["myapex"],
1207 shared_library: true,
1208 compile_dex: true,
1209 permitted_packages: ["mynewsdklibrary"],
1210 public: {
1211 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1212 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1213 current_api: "sdk_library/public/mynewsdklibrary.txt",
1214 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1215 sdk_version: "current",
1216 },
1217}
1218`
1219 expectedCopyRules := `
1220.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1221.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1222.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1223.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1224.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1225.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001226.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1227.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1228.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1229.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1230.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1231.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_removed.txt -> sdk_library/public/mynewsdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001232`
1233
1234 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1235 // they are both part of the snapshot.
1236 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001237 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001238 "out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001239 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001240 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001241 }
1242
1243 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1244 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1245 })
1246}
Sam Delmerico35881362023-06-30 14:40:10 -04001247
1248func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1249 result := android.GroupFixturePreparers(
1250 prepareForSdkTestWithJava,
1251 java.PrepareForTestWithJavaDefaultModules,
1252 java.PrepareForTestWithJavaSdkLibraryFiles,
1253 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1254 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1255 prepareForSdkTestWithApex,
1256 // Add a platform_bootclasspath that depends on the fragment.
1257 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1258 android.FixtureMergeEnv(map[string]string{
1259 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1260 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001261 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1262 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1263 }),
Sam Delmerico35881362023-06-30 14:40:10 -04001264 android.FixtureWithRootAndroidBp(`
1265 sdk {
1266 name: "mysdk",
1267 apexes: ["myapex"],
1268 }
1269 apex {
1270 name: "myapex",
1271 key: "myapex.key",
1272 min_sdk_version: "S",
1273 bootclasspath_fragments: ["mybootclasspathfragment"],
1274 }
1275 bootclasspath_fragment {
1276 name: "mybootclasspathfragment",
1277 apex_available: ["myapex"],
1278 contents: ["mysdklibrary", "mynewsdklibrary"],
1279 hidden_api: {
1280 split_packages: [],
1281 },
1282 }
1283 java_sdk_library {
1284 name: "mysdklibrary",
1285 apex_available: ["myapex"],
1286 srcs: ["Test.java"],
1287 shared_library: false,
1288 public: {enabled: true},
1289 min_sdk_version: "Tiramisu",
1290 }
1291 java_sdk_library {
1292 name: "mynewsdklibrary",
1293 apex_available: ["myapex"],
1294 srcs: ["Test.java"],
1295 compile_dex: true,
1296 public: {enabled: true},
1297 min_sdk_version: "Tiramisu",
1298 permitted_packages: ["mynewsdklibrary"],
1299 }
1300 `),
1301 ).RunTest(t)
1302
1303 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1304}