blob: c1c4ed69985e91954d6921dc267c13fd70cfbbb9 [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 },
Jiakai Zhanga8d86602021-09-26 09:02:17 +000083 }
84 `),
85 ).RunTest(t)
86
87 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf861df72022-07-01 15:56:06 +000088 checkAndroidBpContents(expectedSdkSnapshot),
89 )
90}
91
Sam Delmericoff19da22023-09-05 22:06:22 +000092func TestSnapshotWithPartialSystemServerClasspathFragment(t *testing.T) {
93 commonSdk := `
94 apex {
95 name: "myapex",
96 key: "myapex.key",
97 min_sdk_version: "Tiramisu",
98 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
99 }
100 systemserverclasspath_fragment {
101 name: "mysystemserverclasspathfragment",
102 apex_available: ["myapex"],
103 contents: [
104 "mysdklibrary",
105 "mysdklibrary-future",
106 ],
107 }
108 java_sdk_library {
109 name: "mysdklibrary",
110 apex_available: ["myapex"],
111 srcs: ["Test.java"],
112 min_sdk_version: "33", // Tiramisu
113 }
114 java_sdk_library {
115 name: "mysdklibrary-future",
116 apex_available: ["myapex"],
117 srcs: ["Test.java"],
118 min_sdk_version: "34", // UpsideDownCake
119 }
120 sdk {
121 name: "mysdk",
122 apexes: ["myapex"],
123 }
124 `
125
126 result := android.GroupFixturePreparers(
127 prepareForSdkTestWithJava,
128 java.PrepareForTestWithJavaDefaultModules,
129 java.PrepareForTestWithJavaSdkLibraryFiles,
130 java.FixtureWithLastReleaseApis("mysdklibrary", "mysdklibrary-future"),
131 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary", "myapex:mysdklibrary-future"),
132 android.FixtureModifyEnv(func(env map[string]string) {
133 // targeting Tiramisu here means that we won't export mysdklibrary-future
134 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
135 }),
136 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
137 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
138 }),
139 prepareForSdkTestWithApex,
140 android.FixtureWithRootAndroidBp(commonSdk),
141 ).RunTest(t)
142
143 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(
144 `// This is auto-generated. DO NOT EDIT.
145
146java_sdk_library_import {
147 name: "mysdklibrary",
148 prefer: false,
149 visibility: ["//visibility:public"],
150 apex_available: ["myapex"],
151 shared_library: true,
152 public: {
153 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
154 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
155 current_api: "sdk_library/public/mysdklibrary.txt",
156 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
157 sdk_version: "current",
158 },
159 system: {
160 jars: ["sdk_library/system/mysdklibrary-stubs.jar"],
161 stub_srcs: ["sdk_library/system/mysdklibrary_stub_sources"],
162 current_api: "sdk_library/system/mysdklibrary.txt",
163 removed_api: "sdk_library/system/mysdklibrary-removed.txt",
164 sdk_version: "system_current",
165 },
166 test: {
167 jars: ["sdk_library/test/mysdklibrary-stubs.jar"],
168 stub_srcs: ["sdk_library/test/mysdklibrary_stub_sources"],
169 current_api: "sdk_library/test/mysdklibrary.txt",
170 removed_api: "sdk_library/test/mysdklibrary-removed.txt",
171 sdk_version: "test_current",
172 },
173}
174
175prebuilt_systemserverclasspath_fragment {
176 name: "mysystemserverclasspathfragment",
177 prefer: false,
178 visibility: ["//visibility:public"],
179 apex_available: ["myapex"],
180 contents: ["mysdklibrary"],
181} `))
182}
183
Sam Delmerico35881362023-06-30 14:40:10 -0400184func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) {
185 commonSdk := `
186 apex {
187 name: "myapex",
188 key: "myapex.key",
189 min_sdk_version: "Tiramisu",
190 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
191 }
192 systemserverclasspath_fragment {
193 name: "mysystemserverclasspathfragment",
194 apex_available: ["myapex"],
195 contents: ["mysdklibrary"],
196 }
197 java_sdk_library {
198 name: "mysdklibrary",
199 apex_available: ["myapex"],
200 srcs: ["Test.java"],
201 min_sdk_version: "34", // UpsideDownCake
202 }
203 sdk {
204 name: "mysdk",
205 apexes: ["myapex"],
206 }
207 `
208
209 result := android.GroupFixturePreparers(
210 prepareForSdkTestWithJava,
211 java.PrepareForTestWithJavaDefaultModules,
212 java.PrepareForTestWithJavaSdkLibraryFiles,
213 java.FixtureWithLastReleaseApis("mysdklibrary"),
214 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
215 android.FixtureModifyEnv(func(env map[string]string) {
216 // targeting Tiramisu here means that we won't export mysdklibrary
217 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
218 }),
219 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
220 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
221 }),
222 prepareForSdkTestWithApex,
223 android.FixtureWithRootAndroidBp(commonSdk),
224 ).RunTest(t)
225
226 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
227}
228
Paul Duffinf861df72022-07-01 15:56:06 +0000229func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000230
231 commonSdk := `
232sdk {
233 name: "mysdk",
234 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
235 java_sdk_libs: [
236 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
237 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
238 // contents property. However, it is specified here to ensure that duplicates are
239 // correctly deduped.
240 "mysdklibrary",
241 ],
242}
243 `
244
245 expectedLatestSnapshot := `
246// This is auto-generated. DO NOT EDIT.
247
Spandan Dasa5e26d32024-03-06 14:04:36 +0000248apex_contributions_defaults {
249 name: "mysdk.contributions",
250 contents: ["prebuilt_mysdklibrary"],
251}
252
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000253java_sdk_library_import {
254 name: "mysdklibrary",
255 prefer: false,
256 visibility: ["//visibility:public"],
257 apex_available: ["myapex"],
258 shared_library: false,
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800259 dex_preopt: {
260 profile_guided: true,
261 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000262 public: {
263 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
264 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
265 current_api: "sdk_library/public/mysdklibrary.txt",
266 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
267 sdk_version: "current",
268 },
269}
270
271java_import {
272 name: "mylib",
273 prefer: false,
274 visibility: ["//visibility:public"],
275 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000276 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000277 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000278 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800279 dex_preopt: {
280 profile_guided: true,
281 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000282}
283
284prebuilt_systemserverclasspath_fragment {
285 name: "mysystemserverclasspathfragment",
286 prefer: false,
287 visibility: ["//visibility:public"],
288 apex_available: ["myapex"],
289 contents: [
290 "mylib",
291 "mysdklibrary",
292 ],
293}
294`
295
Paul Duffinf861df72022-07-01 15:56:06 +0000296 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000297 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000298// This is auto-generated. DO NOT EDIT.
299
300java_sdk_library_import {
301 name: "mysdklibrary",
302 prefer: false,
303 visibility: ["//visibility:public"],
304 apex_available: ["myapex"],
305 shared_library: false,
306 public: {
307 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
308 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
309 current_api: "sdk_library/public/mysdklibrary.txt",
310 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
311 sdk_version: "current",
312 },
313}
314`)
315 })
316
317 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000318 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000319// This is auto-generated. DO NOT EDIT.
320
321java_sdk_library_import {
322 name: "mysdklibrary",
323 prefer: false,
324 visibility: ["//visibility:public"],
325 apex_available: ["myapex"],
326 shared_library: false,
327 public: {
328 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
329 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
330 current_api: "sdk_library/public/mysdklibrary.txt",
331 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
332 sdk_version: "current",
333 },
334}
335
336java_import {
337 name: "mylib",
338 prefer: false,
339 visibility: ["//visibility:public"],
340 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000341 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000342 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000343 permitted_packages: ["mylib"],
344}
345
346prebuilt_systemserverclasspath_fragment {
347 name: "mysystemserverclasspathfragment",
348 prefer: false,
349 visibility: ["//visibility:public"],
350 apex_available: ["myapex"],
351 contents: [
352 "mylib",
353 "mysdklibrary",
354 ],
355}
Paul Duffinf861df72022-07-01 15:56:06 +0000356`)
357 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000358
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800359 t.Run("target-u", func(t *testing.T) {
360 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
361// This is auto-generated. DO NOT EDIT.
362
363java_sdk_library_import {
364 name: "mysdklibrary",
365 prefer: false,
366 visibility: ["//visibility:public"],
367 apex_available: ["myapex"],
368 shared_library: false,
369 dex_preopt: {
370 profile_guided: true,
371 },
372 public: {
373 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
374 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
375 current_api: "sdk_library/public/mysdklibrary.txt",
376 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
377 sdk_version: "current",
378 },
379}
380
381java_import {
382 name: "mylib",
383 prefer: false,
384 visibility: ["//visibility:public"],
385 apex_available: ["myapex"],
386 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
387 min_sdk_version: "2",
388 permitted_packages: ["mylib"],
389 dex_preopt: {
390 profile_guided: true,
391 },
392}
393
394prebuilt_systemserverclasspath_fragment {
395 name: "mysystemserverclasspathfragment",
396 prefer: false,
397 visibility: ["//visibility:public"],
398 apex_available: ["myapex"],
399 contents: [
400 "mylib",
401 "mysdklibrary",
402 ],
403}
404`)
405 })
406
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000407 t.Run("added-directly", func(t *testing.T) {
408 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
409 })
410
411 t.Run("added-via-apex", func(t *testing.T) {
412 testSnapshotWithSystemServerClasspathFragment(t, `
413 sdk {
414 name: "mysdk",
415 apexes: ["myapex"],
416 }
417 `, `latest`, expectedLatestSnapshot)
418 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000419}