blob: fd6c4e7b87a8e07a7cd2f60077ee71e44b1611c4 [file] [log] [blame]
Jiakai Zhanga8d86602021-09-26 09:02:17 +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
17import (
18 "testing"
19
20 "android/soong/android"
21 "android/soong/dexpreopt"
22 "android/soong/java"
23)
24
Paul Duffin4e7d1c42022-05-13 13:12:19 +000025func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, targetBuildRelease string, expectedSdkSnapshot string) {
Jiakai Zhanga8d86602021-09-26 09:02:17 +000026 result := android.GroupFixturePreparers(
27 prepareForSdkTestWithJava,
28 java.PrepareForTestWithJavaDefaultModules,
29 java.PrepareForTestWithJavaSdkLibraryFiles,
30 java.FixtureWithLastReleaseApis("mysdklibrary"),
31 dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"),
Paul Duffinf861df72022-07-01 15:56:06 +000032 android.FixtureModifyEnv(func(env map[string]string) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +000033 if targetBuildRelease != "latest" {
34 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease
35 }
Paul Duffinf861df72022-07-01 15:56:06 +000036 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +000037 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
38 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
39 }),
Jiakai Zhanga8d86602021-09-26 09:02:17 +000040 prepareForSdkTestWithApex,
41
Paul Duffin4e7d1c42022-05-13 13:12:19 +000042 android.FixtureWithRootAndroidBp(sdk+`
Jiakai Zhanga8d86602021-09-26 09:02:17 +000043 apex {
44 name: "myapex",
45 key: "myapex.key",
46 min_sdk_version: "2",
47 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
48 }
49
50 systemserverclasspath_fragment {
51 name: "mysystemserverclasspathfragment",
52 apex_available: ["myapex"],
53 contents: [
54 "mylib",
55 "mysdklibrary",
56 ],
57 }
58
59 java_library {
60 name: "mylib",
61 apex_available: ["myapex"],
62 srcs: ["Test.java"],
63 system_modules: "none",
64 sdk_version: "none",
65 min_sdk_version: "2",
66 compile_dex: true,
67 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +080068 dex_preopt: {
69 profile: "art-profile",
70 },
Jiakai Zhanga8d86602021-09-26 09:02:17 +000071 }
72
73 java_sdk_library {
74 name: "mysdklibrary",
75 apex_available: ["myapex"],
76 srcs: ["Test.java"],
77 shared_library: false,
78 public: {enabled: true},
79 min_sdk_version: "2",
Jiakai Zhang9c4dc192023-02-09 00:09:24 +080080 dex_preopt: {
81 profile: "art-profile",
82 },
Jihoon Kang85bc1932024-07-01 17:04:46 +000083 sdk_version: "current",
Jiakai Zhanga8d86602021-09-26 09:02:17 +000084 }
85 `),
86 ).RunTest(t)
87
88 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf861df72022-07-01 15:56:06 +000089 checkAndroidBpContents(expectedSdkSnapshot),
90 )
91}
92
Sam Delmericoff19da22023-09-05 22:06:22 +000093func TestSnapshotWithPartialSystemServerClasspathFragment(t *testing.T) {
94 commonSdk := `
95 apex {
96 name: "myapex",
97 key: "myapex.key",
98 min_sdk_version: "Tiramisu",
99 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
100 }
101 systemserverclasspath_fragment {
102 name: "mysystemserverclasspathfragment",
103 apex_available: ["myapex"],
104 contents: [
105 "mysdklibrary",
106 "mysdklibrary-future",
107 ],
108 }
109 java_sdk_library {
110 name: "mysdklibrary",
111 apex_available: ["myapex"],
112 srcs: ["Test.java"],
113 min_sdk_version: "33", // Tiramisu
Jihoon Kang85bc1932024-07-01 17:04:46 +0000114 sdk_version: "current",
Sam Delmericoff19da22023-09-05 22:06:22 +0000115 }
116 java_sdk_library {
117 name: "mysdklibrary-future",
118 apex_available: ["myapex"],
119 srcs: ["Test.java"],
120 min_sdk_version: "34", // UpsideDownCake
Jihoon Kang85bc1932024-07-01 17:04:46 +0000121 sdk_version: "current",
Sam Delmericoff19da22023-09-05 22:06:22 +0000122 }
123 sdk {
124 name: "mysdk",
125 apexes: ["myapex"],
126 }
127 `
128
129 result := android.GroupFixturePreparers(
130 prepareForSdkTestWithJava,
131 java.PrepareForTestWithJavaDefaultModules,
132 java.PrepareForTestWithJavaSdkLibraryFiles,
133 java.FixtureWithLastReleaseApis("mysdklibrary", "mysdklibrary-future"),
134 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary", "myapex:mysdklibrary-future"),
135 android.FixtureModifyEnv(func(env map[string]string) {
136 // targeting Tiramisu here means that we won't export mysdklibrary-future
137 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
138 }),
139 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
140 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
141 }),
142 prepareForSdkTestWithApex,
143 android.FixtureWithRootAndroidBp(commonSdk),
144 ).RunTest(t)
145
146 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(
147 `// This is auto-generated. DO NOT EDIT.
148
149java_sdk_library_import {
150 name: "mysdklibrary",
151 prefer: false,
152 visibility: ["//visibility:public"],
153 apex_available: ["myapex"],
154 shared_library: true,
155 public: {
156 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
157 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
158 current_api: "sdk_library/public/mysdklibrary.txt",
159 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
160 sdk_version: "current",
161 },
162 system: {
163 jars: ["sdk_library/system/mysdklibrary-stubs.jar"],
164 stub_srcs: ["sdk_library/system/mysdklibrary_stub_sources"],
165 current_api: "sdk_library/system/mysdklibrary.txt",
166 removed_api: "sdk_library/system/mysdklibrary-removed.txt",
167 sdk_version: "system_current",
168 },
169 test: {
170 jars: ["sdk_library/test/mysdklibrary-stubs.jar"],
171 stub_srcs: ["sdk_library/test/mysdklibrary_stub_sources"],
172 current_api: "sdk_library/test/mysdklibrary.txt",
173 removed_api: "sdk_library/test/mysdklibrary-removed.txt",
174 sdk_version: "test_current",
175 },
176}
177
178prebuilt_systemserverclasspath_fragment {
179 name: "mysystemserverclasspathfragment",
180 prefer: false,
181 visibility: ["//visibility:public"],
182 apex_available: ["myapex"],
183 contents: ["mysdklibrary"],
184} `))
185}
186
Sam Delmerico35881362023-06-30 14:40:10 -0400187func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) {
188 commonSdk := `
189 apex {
190 name: "myapex",
191 key: "myapex.key",
192 min_sdk_version: "Tiramisu",
193 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
194 }
195 systemserverclasspath_fragment {
196 name: "mysystemserverclasspathfragment",
197 apex_available: ["myapex"],
198 contents: ["mysdklibrary"],
199 }
200 java_sdk_library {
201 name: "mysdklibrary",
202 apex_available: ["myapex"],
203 srcs: ["Test.java"],
204 min_sdk_version: "34", // UpsideDownCake
Jihoon Kang85bc1932024-07-01 17:04:46 +0000205 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -0400206 }
207 sdk {
208 name: "mysdk",
209 apexes: ["myapex"],
210 }
211 `
212
213 result := android.GroupFixturePreparers(
214 prepareForSdkTestWithJava,
215 java.PrepareForTestWithJavaDefaultModules,
216 java.PrepareForTestWithJavaSdkLibraryFiles,
217 java.FixtureWithLastReleaseApis("mysdklibrary"),
218 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
219 android.FixtureModifyEnv(func(env map[string]string) {
220 // targeting Tiramisu here means that we won't export mysdklibrary
221 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
222 }),
223 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
224 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
225 }),
226 prepareForSdkTestWithApex,
227 android.FixtureWithRootAndroidBp(commonSdk),
228 ).RunTest(t)
229
230 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
231}
232
Paul Duffinf861df72022-07-01 15:56:06 +0000233func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000234
235 commonSdk := `
236sdk {
237 name: "mysdk",
238 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
239 java_sdk_libs: [
240 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
241 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
242 // contents property. However, it is specified here to ensure that duplicates are
243 // correctly deduped.
244 "mysdklibrary",
245 ],
246}
247 `
248
249 expectedLatestSnapshot := `
250// This is auto-generated. DO NOT EDIT.
251
Spandan Dasa5e26d32024-03-06 14:04:36 +0000252apex_contributions_defaults {
253 name: "mysdk.contributions",
254 contents: ["prebuilt_mysdklibrary"],
255}
256
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000257java_sdk_library_import {
258 name: "mysdklibrary",
259 prefer: false,
260 visibility: ["//visibility:public"],
261 apex_available: ["myapex"],
262 shared_library: false,
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800263 dex_preopt: {
264 profile_guided: true,
265 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000266 public: {
267 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
268 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
269 current_api: "sdk_library/public/mysdklibrary.txt",
270 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
271 sdk_version: "current",
272 },
273}
274
275java_import {
276 name: "mylib",
277 prefer: false,
278 visibility: ["//visibility:public"],
279 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000280 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000281 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000282 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800283 dex_preopt: {
284 profile_guided: true,
285 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000286}
287
288prebuilt_systemserverclasspath_fragment {
289 name: "mysystemserverclasspathfragment",
290 prefer: false,
291 visibility: ["//visibility:public"],
292 apex_available: ["myapex"],
293 contents: [
294 "mylib",
295 "mysdklibrary",
296 ],
297}
298`
299
Paul Duffinf861df72022-07-01 15:56:06 +0000300 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000301 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000302// This is auto-generated. DO NOT EDIT.
303
304java_sdk_library_import {
305 name: "mysdklibrary",
306 prefer: false,
307 visibility: ["//visibility:public"],
308 apex_available: ["myapex"],
309 shared_library: false,
310 public: {
311 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
312 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
313 current_api: "sdk_library/public/mysdklibrary.txt",
314 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
315 sdk_version: "current",
316 },
317}
318`)
319 })
320
321 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000322 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000323// This is auto-generated. DO NOT EDIT.
324
325java_sdk_library_import {
326 name: "mysdklibrary",
327 prefer: false,
328 visibility: ["//visibility:public"],
329 apex_available: ["myapex"],
330 shared_library: false,
331 public: {
332 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
333 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
334 current_api: "sdk_library/public/mysdklibrary.txt",
335 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
336 sdk_version: "current",
337 },
338}
339
340java_import {
341 name: "mylib",
342 prefer: false,
343 visibility: ["//visibility:public"],
344 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000345 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000346 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000347 permitted_packages: ["mylib"],
348}
349
350prebuilt_systemserverclasspath_fragment {
351 name: "mysystemserverclasspathfragment",
352 prefer: false,
353 visibility: ["//visibility:public"],
354 apex_available: ["myapex"],
355 contents: [
356 "mylib",
357 "mysdklibrary",
358 ],
359}
Paul Duffinf861df72022-07-01 15:56:06 +0000360`)
361 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000362
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800363 t.Run("target-u", func(t *testing.T) {
364 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
365// This is auto-generated. DO NOT EDIT.
366
367java_sdk_library_import {
368 name: "mysdklibrary",
369 prefer: false,
370 visibility: ["//visibility:public"],
371 apex_available: ["myapex"],
372 shared_library: false,
373 dex_preopt: {
374 profile_guided: true,
375 },
376 public: {
377 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
378 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
379 current_api: "sdk_library/public/mysdklibrary.txt",
380 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
381 sdk_version: "current",
382 },
383}
384
385java_import {
386 name: "mylib",
387 prefer: false,
388 visibility: ["//visibility:public"],
389 apex_available: ["myapex"],
390 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
391 min_sdk_version: "2",
392 permitted_packages: ["mylib"],
393 dex_preopt: {
394 profile_guided: true,
395 },
396}
397
398prebuilt_systemserverclasspath_fragment {
399 name: "mysystemserverclasspathfragment",
400 prefer: false,
401 visibility: ["//visibility:public"],
402 apex_available: ["myapex"],
403 contents: [
404 "mylib",
405 "mysdklibrary",
406 ],
407}
408`)
409 })
410
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000411 t.Run("added-directly", func(t *testing.T) {
412 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
413 })
414
415 t.Run("added-via-apex", func(t *testing.T) {
416 testSnapshotWithSystemServerClasspathFragment(t, `
417 sdk {
418 name: "mysdk",
419 apexes: ["myapex"],
420 }
421 `, `latest`, expectedLatestSnapshot)
422 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000423}