blob: 3c0b8ae01dc72b48d8965e167166220422ea6677 [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 }),
Jiakai Zhanga8d86602021-09-26 09:02:17 +000037 prepareForSdkTestWithApex,
38
Paul Duffin4e7d1c42022-05-13 13:12:19 +000039 android.FixtureWithRootAndroidBp(sdk+`
Jiakai Zhanga8d86602021-09-26 09:02:17 +000040 apex {
41 name: "myapex",
42 key: "myapex.key",
43 min_sdk_version: "2",
44 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
45 }
46
47 systemserverclasspath_fragment {
48 name: "mysystemserverclasspathfragment",
49 apex_available: ["myapex"],
50 contents: [
51 "mylib",
52 "mysdklibrary",
53 ],
54 }
55
56 java_library {
57 name: "mylib",
58 apex_available: ["myapex"],
59 srcs: ["Test.java"],
60 system_modules: "none",
61 sdk_version: "none",
62 min_sdk_version: "2",
63 compile_dex: true,
64 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +080065 dex_preopt: {
66 profile: "art-profile",
67 },
Jiakai Zhanga8d86602021-09-26 09:02:17 +000068 }
69
70 java_sdk_library {
71 name: "mysdklibrary",
72 apex_available: ["myapex"],
73 srcs: ["Test.java"],
74 shared_library: false,
75 public: {enabled: true},
76 min_sdk_version: "2",
Jiakai Zhang9c4dc192023-02-09 00:09:24 +080077 dex_preopt: {
78 profile: "art-profile",
79 },
Jiakai Zhanga8d86602021-09-26 09:02:17 +000080 }
81 `),
82 ).RunTest(t)
83
84 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf861df72022-07-01 15:56:06 +000085 checkAndroidBpContents(expectedSdkSnapshot),
86 )
87}
88
Sam Delmericoff19da22023-09-05 22:06:22 +000089func TestSnapshotWithPartialSystemServerClasspathFragment(t *testing.T) {
90 commonSdk := `
91 apex {
92 name: "myapex",
93 key: "myapex.key",
94 min_sdk_version: "Tiramisu",
95 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
96 }
97 systemserverclasspath_fragment {
98 name: "mysystemserverclasspathfragment",
99 apex_available: ["myapex"],
100 contents: [
101 "mysdklibrary",
102 "mysdklibrary-future",
103 ],
104 }
105 java_sdk_library {
106 name: "mysdklibrary",
107 apex_available: ["myapex"],
108 srcs: ["Test.java"],
109 min_sdk_version: "33", // Tiramisu
110 }
111 java_sdk_library {
112 name: "mysdklibrary-future",
113 apex_available: ["myapex"],
114 srcs: ["Test.java"],
115 min_sdk_version: "34", // UpsideDownCake
116 }
117 sdk {
118 name: "mysdk",
119 apexes: ["myapex"],
120 }
121 `
122
123 result := android.GroupFixturePreparers(
124 prepareForSdkTestWithJava,
125 java.PrepareForTestWithJavaDefaultModules,
126 java.PrepareForTestWithJavaSdkLibraryFiles,
127 java.FixtureWithLastReleaseApis("mysdklibrary", "mysdklibrary-future"),
128 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary", "myapex:mysdklibrary-future"),
129 android.FixtureModifyEnv(func(env map[string]string) {
130 // targeting Tiramisu here means that we won't export mysdklibrary-future
131 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
132 }),
133 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
134 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
135 }),
136 prepareForSdkTestWithApex,
137 android.FixtureWithRootAndroidBp(commonSdk),
138 ).RunTest(t)
139
140 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(
141 `// This is auto-generated. DO NOT EDIT.
142
143java_sdk_library_import {
144 name: "mysdklibrary",
145 prefer: false,
146 visibility: ["//visibility:public"],
147 apex_available: ["myapex"],
148 shared_library: true,
149 public: {
150 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
151 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
152 current_api: "sdk_library/public/mysdklibrary.txt",
153 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
154 sdk_version: "current",
155 },
156 system: {
157 jars: ["sdk_library/system/mysdklibrary-stubs.jar"],
158 stub_srcs: ["sdk_library/system/mysdklibrary_stub_sources"],
159 current_api: "sdk_library/system/mysdklibrary.txt",
160 removed_api: "sdk_library/system/mysdklibrary-removed.txt",
161 sdk_version: "system_current",
162 },
163 test: {
164 jars: ["sdk_library/test/mysdklibrary-stubs.jar"],
165 stub_srcs: ["sdk_library/test/mysdklibrary_stub_sources"],
166 current_api: "sdk_library/test/mysdklibrary.txt",
167 removed_api: "sdk_library/test/mysdklibrary-removed.txt",
168 sdk_version: "test_current",
169 },
170}
171
172prebuilt_systemserverclasspath_fragment {
173 name: "mysystemserverclasspathfragment",
174 prefer: false,
175 visibility: ["//visibility:public"],
176 apex_available: ["myapex"],
177 contents: ["mysdklibrary"],
178} `))
179}
180
Sam Delmerico35881362023-06-30 14:40:10 -0400181func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) {
182 commonSdk := `
183 apex {
184 name: "myapex",
185 key: "myapex.key",
186 min_sdk_version: "Tiramisu",
187 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
188 }
189 systemserverclasspath_fragment {
190 name: "mysystemserverclasspathfragment",
191 apex_available: ["myapex"],
192 contents: ["mysdklibrary"],
193 }
194 java_sdk_library {
195 name: "mysdklibrary",
196 apex_available: ["myapex"],
197 srcs: ["Test.java"],
198 min_sdk_version: "34", // UpsideDownCake
199 }
200 sdk {
201 name: "mysdk",
202 apexes: ["myapex"],
203 }
204 `
205
206 result := android.GroupFixturePreparers(
207 prepareForSdkTestWithJava,
208 java.PrepareForTestWithJavaDefaultModules,
209 java.PrepareForTestWithJavaSdkLibraryFiles,
210 java.FixtureWithLastReleaseApis("mysdklibrary"),
211 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
212 android.FixtureModifyEnv(func(env map[string]string) {
213 // targeting Tiramisu here means that we won't export mysdklibrary
214 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
215 }),
216 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
217 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
218 }),
219 prepareForSdkTestWithApex,
220 android.FixtureWithRootAndroidBp(commonSdk),
221 ).RunTest(t)
222
223 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
224}
225
Paul Duffinf861df72022-07-01 15:56:06 +0000226func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000227
228 commonSdk := `
229sdk {
230 name: "mysdk",
231 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
232 java_sdk_libs: [
233 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
234 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
235 // contents property. However, it is specified here to ensure that duplicates are
236 // correctly deduped.
237 "mysdklibrary",
238 ],
239}
240 `
241
242 expectedLatestSnapshot := `
243// This is auto-generated. DO NOT EDIT.
244
245java_sdk_library_import {
246 name: "mysdklibrary",
247 prefer: false,
248 visibility: ["//visibility:public"],
249 apex_available: ["myapex"],
250 shared_library: false,
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800251 dex_preopt: {
252 profile_guided: true,
253 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000254 public: {
255 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
256 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
257 current_api: "sdk_library/public/mysdklibrary.txt",
258 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
259 sdk_version: "current",
260 },
261}
262
263java_import {
264 name: "mylib",
265 prefer: false,
266 visibility: ["//visibility:public"],
267 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000268 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000269 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000270 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800271 dex_preopt: {
272 profile_guided: true,
273 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000274}
275
276prebuilt_systemserverclasspath_fragment {
277 name: "mysystemserverclasspathfragment",
278 prefer: false,
279 visibility: ["//visibility:public"],
280 apex_available: ["myapex"],
281 contents: [
282 "mylib",
283 "mysdklibrary",
284 ],
285}
286`
287
Paul Duffinf861df72022-07-01 15:56:06 +0000288 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000289 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000290// This is auto-generated. DO NOT EDIT.
291
292java_sdk_library_import {
293 name: "mysdklibrary",
294 prefer: false,
295 visibility: ["//visibility:public"],
296 apex_available: ["myapex"],
297 shared_library: false,
298 public: {
299 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
300 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
301 current_api: "sdk_library/public/mysdklibrary.txt",
302 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
303 sdk_version: "current",
304 },
305}
306`)
307 })
308
309 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000310 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000311// This is auto-generated. DO NOT EDIT.
312
313java_sdk_library_import {
314 name: "mysdklibrary",
315 prefer: false,
316 visibility: ["//visibility:public"],
317 apex_available: ["myapex"],
318 shared_library: false,
319 public: {
320 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
321 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
322 current_api: "sdk_library/public/mysdklibrary.txt",
323 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
324 sdk_version: "current",
325 },
326}
327
328java_import {
329 name: "mylib",
330 prefer: false,
331 visibility: ["//visibility:public"],
332 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000333 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000334 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000335 permitted_packages: ["mylib"],
336}
337
338prebuilt_systemserverclasspath_fragment {
339 name: "mysystemserverclasspathfragment",
340 prefer: false,
341 visibility: ["//visibility:public"],
342 apex_available: ["myapex"],
343 contents: [
344 "mylib",
345 "mysdklibrary",
346 ],
347}
Paul Duffinf861df72022-07-01 15:56:06 +0000348`)
349 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000350
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800351 t.Run("target-u", func(t *testing.T) {
352 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
353// This is auto-generated. DO NOT EDIT.
354
355java_sdk_library_import {
356 name: "mysdklibrary",
357 prefer: false,
358 visibility: ["//visibility:public"],
359 apex_available: ["myapex"],
360 shared_library: false,
361 dex_preopt: {
362 profile_guided: true,
363 },
364 public: {
365 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
366 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
367 current_api: "sdk_library/public/mysdklibrary.txt",
368 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
369 sdk_version: "current",
370 },
371}
372
373java_import {
374 name: "mylib",
375 prefer: false,
376 visibility: ["//visibility:public"],
377 apex_available: ["myapex"],
378 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
379 min_sdk_version: "2",
380 permitted_packages: ["mylib"],
381 dex_preopt: {
382 profile_guided: true,
383 },
384}
385
386prebuilt_systemserverclasspath_fragment {
387 name: "mysystemserverclasspathfragment",
388 prefer: false,
389 visibility: ["//visibility:public"],
390 apex_available: ["myapex"],
391 contents: [
392 "mylib",
393 "mysdklibrary",
394 ],
395}
396`)
397 })
398
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000399 t.Run("added-directly", func(t *testing.T) {
400 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
401 })
402
403 t.Run("added-via-apex", func(t *testing.T) {
404 testSnapshotWithSystemServerClasspathFragment(t, `
405 sdk {
406 name: "mysdk",
407 apexes: ["myapex"],
408 }
409 `, `latest`, expectedLatestSnapshot)
410 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000411}