blob: 66c44c84326ba482b3219efcba074bd97deba959 [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
89func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +000090
91 commonSdk := `
92sdk {
93 name: "mysdk",
94 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
95 java_sdk_libs: [
96 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
97 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
98 // contents property. However, it is specified here to ensure that duplicates are
99 // correctly deduped.
100 "mysdklibrary",
101 ],
102}
103 `
104
105 expectedLatestSnapshot := `
106// This is auto-generated. DO NOT EDIT.
107
108java_sdk_library_import {
109 name: "mysdklibrary",
110 prefer: false,
111 visibility: ["//visibility:public"],
112 apex_available: ["myapex"],
113 shared_library: false,
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800114 dex_preopt: {
115 profile_guided: true,
116 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000117 public: {
118 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
119 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
120 current_api: "sdk_library/public/mysdklibrary.txt",
121 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
122 sdk_version: "current",
123 },
124}
125
126java_import {
127 name: "mylib",
128 prefer: false,
129 visibility: ["//visibility:public"],
130 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000131 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000132 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000133 permitted_packages: ["mylib"],
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800134 dex_preopt: {
135 profile_guided: true,
136 },
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000137}
138
139prebuilt_systemserverclasspath_fragment {
140 name: "mysystemserverclasspathfragment",
141 prefer: false,
142 visibility: ["//visibility:public"],
143 apex_available: ["myapex"],
144 contents: [
145 "mylib",
146 "mysdklibrary",
147 ],
148}
149`
150
Paul Duffinf861df72022-07-01 15:56:06 +0000151 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000152 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000153// This is auto-generated. DO NOT EDIT.
154
155java_sdk_library_import {
156 name: "mysdklibrary",
157 prefer: false,
158 visibility: ["//visibility:public"],
159 apex_available: ["myapex"],
160 shared_library: false,
161 public: {
162 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
163 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
164 current_api: "sdk_library/public/mysdklibrary.txt",
165 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
166 sdk_version: "current",
167 },
168}
169`)
170 })
171
172 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000173 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000174// This is auto-generated. DO NOT EDIT.
175
176java_sdk_library_import {
177 name: "mysdklibrary",
178 prefer: false,
179 visibility: ["//visibility:public"],
180 apex_available: ["myapex"],
181 shared_library: false,
182 public: {
183 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
184 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
185 current_api: "sdk_library/public/mysdklibrary.txt",
186 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
187 sdk_version: "current",
188 },
189}
190
191java_import {
192 name: "mylib",
193 prefer: false,
194 visibility: ["//visibility:public"],
195 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000196 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000197 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000198 permitted_packages: ["mylib"],
199}
200
201prebuilt_systemserverclasspath_fragment {
202 name: "mysystemserverclasspathfragment",
203 prefer: false,
204 visibility: ["//visibility:public"],
205 apex_available: ["myapex"],
206 contents: [
207 "mylib",
208 "mysdklibrary",
209 ],
210}
Paul Duffinf861df72022-07-01 15:56:06 +0000211`)
212 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000213
Jiakai Zhang9c4dc192023-02-09 00:09:24 +0800214 t.Run("target-u", func(t *testing.T) {
215 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
216// This is auto-generated. DO NOT EDIT.
217
218java_sdk_library_import {
219 name: "mysdklibrary",
220 prefer: false,
221 visibility: ["//visibility:public"],
222 apex_available: ["myapex"],
223 shared_library: false,
224 dex_preopt: {
225 profile_guided: true,
226 },
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"],
241 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
242 min_sdk_version: "2",
243 permitted_packages: ["mylib"],
244 dex_preopt: {
245 profile_guided: true,
246 },
247}
248
249prebuilt_systemserverclasspath_fragment {
250 name: "mysystemserverclasspathfragment",
251 prefer: false,
252 visibility: ["//visibility:public"],
253 apex_available: ["myapex"],
254 contents: [
255 "mylib",
256 "mysdklibrary",
257 ],
258}
259`)
260 })
261
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000262 t.Run("added-directly", func(t *testing.T) {
263 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
264 })
265
266 t.Run("added-via-apex", func(t *testing.T) {
267 testSnapshotWithSystemServerClasspathFragment(t, `
268 sdk {
269 name: "mysdk",
270 apexes: ["myapex"],
271 }
272 `, `latest`, expectedLatestSnapshot)
273 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000274}