blob: 7ccc11413df5829913a4b6a90604e1a7950b732b [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 Delmerico35881362023-06-30 14:40:10 -040089func TestSnapshotWithEmptySystemServerClasspathFragment(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: ["mysdklibrary"],
101 }
102 java_sdk_library {
103 name: "mysdklibrary",
104 apex_available: ["myapex"],
105 srcs: ["Test.java"],
106 min_sdk_version: "34", // UpsideDownCake
107 }
108 sdk {
109 name: "mysdk",
110 apexes: ["myapex"],
111 }
112 `
113
114 result := android.GroupFixturePreparers(
115 prepareForSdkTestWithJava,
116 java.PrepareForTestWithJavaDefaultModules,
117 java.PrepareForTestWithJavaSdkLibraryFiles,
118 java.FixtureWithLastReleaseApis("mysdklibrary"),
119 dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
120 android.FixtureModifyEnv(func(env map[string]string) {
121 // targeting Tiramisu here means that we won't export mysdklibrary
122 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
123 }),
124 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
125 variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
126 }),
127 prepareForSdkTestWithApex,
128 android.FixtureWithRootAndroidBp(commonSdk),
129 ).RunTest(t)
130
131 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
132}
133
Paul Duffinf861df72022-07-01 15:56:06 +0000134func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000135
136 commonSdk := `
137sdk {
138 name: "mysdk",
139 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
140 java_sdk_libs: [
141 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
142 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
143 // contents property. However, it is specified here to ensure that duplicates are
144 // correctly deduped.
145 "mysdklibrary",
146 ],
147}
148 `
149
150 expectedLatestSnapshot := `
151// This is auto-generated. DO NOT EDIT.
152
153java_sdk_library_import {
154 name: "mysdklibrary",
155 prefer: false,
156 visibility: ["//visibility:public"],
157 apex_available: ["myapex"],
158 shared_library: false,
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800159 dex_preopt: {
160 profile_guided: true,
161 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000162 public: {
163 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
164 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
165 current_api: "sdk_library/public/mysdklibrary.txt",
166 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
167 sdk_version: "current",
168 },
169}
170
171java_import {
172 name: "mylib",
173 prefer: false,
174 visibility: ["//visibility:public"],
175 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000176 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000177 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000178 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800179 dex_preopt: {
180 profile_guided: true,
181 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000182}
183
184prebuilt_systemserverclasspath_fragment {
185 name: "mysystemserverclasspathfragment",
186 prefer: false,
187 visibility: ["//visibility:public"],
188 apex_available: ["myapex"],
189 contents: [
190 "mylib",
191 "mysdklibrary",
192 ],
193}
194`
195
Paul Duffinf861df72022-07-01 15:56:06 +0000196 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000197 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000198// This is auto-generated. DO NOT EDIT.
199
200java_sdk_library_import {
201 name: "mysdklibrary",
202 prefer: false,
203 visibility: ["//visibility:public"],
204 apex_available: ["myapex"],
205 shared_library: false,
206 public: {
207 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
208 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
209 current_api: "sdk_library/public/mysdklibrary.txt",
210 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
211 sdk_version: "current",
212 },
213}
214`)
215 })
216
217 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000218 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000219// This is auto-generated. DO NOT EDIT.
220
221java_sdk_library_import {
222 name: "mysdklibrary",
223 prefer: false,
224 visibility: ["//visibility:public"],
225 apex_available: ["myapex"],
226 shared_library: false,
227 public: {
228 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
229 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
230 current_api: "sdk_library/public/mysdklibrary.txt",
231 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
232 sdk_version: "current",
233 },
234}
235
236java_import {
237 name: "mylib",
238 prefer: false,
239 visibility: ["//visibility:public"],
240 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000241 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000242 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000243 permitted_packages: ["mylib"],
244}
245
246prebuilt_systemserverclasspath_fragment {
247 name: "mysystemserverclasspathfragment",
248 prefer: false,
249 visibility: ["//visibility:public"],
250 apex_available: ["myapex"],
251 contents: [
252 "mylib",
253 "mysdklibrary",
254 ],
255}
Paul Duffinf861df72022-07-01 15:56:06 +0000256`)
257 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000258
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800259 t.Run("target-u", func(t *testing.T) {
260 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
261// This is auto-generated. DO NOT EDIT.
262
263java_sdk_library_import {
264 name: "mysdklibrary",
265 prefer: false,
266 visibility: ["//visibility:public"],
267 apex_available: ["myapex"],
268 shared_library: false,
269 dex_preopt: {
270 profile_guided: true,
271 },
272 public: {
273 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
274 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
275 current_api: "sdk_library/public/mysdklibrary.txt",
276 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
277 sdk_version: "current",
278 },
279}
280
281java_import {
282 name: "mylib",
283 prefer: false,
284 visibility: ["//visibility:public"],
285 apex_available: ["myapex"],
286 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
287 min_sdk_version: "2",
288 permitted_packages: ["mylib"],
289 dex_preopt: {
290 profile_guided: true,
291 },
292}
293
294prebuilt_systemserverclasspath_fragment {
295 name: "mysystemserverclasspathfragment",
296 prefer: false,
297 visibility: ["//visibility:public"],
298 apex_available: ["myapex"],
299 contents: [
300 "mylib",
301 "mysdklibrary",
302 ],
303}
304`)
305 })
306
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000307 t.Run("added-directly", func(t *testing.T) {
308 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
309 })
310
311 t.Run("added-via-apex", func(t *testing.T) {
312 testSnapshotWithSystemServerClasspathFragment(t, `
313 sdk {
314 name: "mysdk",
315 apexes: ["myapex"],
316 }
317 `, `latest`, expectedLatestSnapshot)
318 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000319}