blob: 395793f6149bb2c1c458c0953e78a7722289e8ec [file] [log] [blame]
Jihoon Kangf86fe9a2024-06-26 22:18:10 +00001// Copyright 2024 Google Inc. All rights reserved.
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 apex
16
17import (
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000018 "fmt"
19 "testing"
Colin Crosse4f34882024-11-14 12:26:00 -080020
21 "android/soong/android"
22 "android/soong/java"
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000023)
24
25var checkContainerMatch = func(t *testing.T, name string, container string, expected bool, actual bool) {
26 errorMessage := fmt.Sprintf("module %s container %s value differ", name, container)
27 android.AssertBoolEquals(t, errorMessage, expected, actual)
28}
29
30func TestApexDepsContainers(t *testing.T) {
Colin Crossa2fdb612024-10-11 12:52:56 -070031 t.Parallel()
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000032 result := android.GroupFixturePreparers(
33 prepareForApexTest,
34 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +000035 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000036 ).RunTestWithBp(t, `
37 apex {
38 name: "myapex",
39 key: "myapex.key",
40 bootclasspath_fragments: [
41 "mybootclasspathfragment",
42 ],
43 updatable: true,
44 min_sdk_version: "30",
45 }
46 apex_key {
47 name: "myapex.key",
48 public_key: "testkey.avbpubkey",
49 private_key: "testkey.pem",
50 }
51 bootclasspath_fragment {
52 name: "mybootclasspathfragment",
53 contents: [
54 "mybootclasspathlib",
55 ],
56 apex_available: [
57 "myapex",
58 ],
59 hidden_api: {
60 split_packages: ["*"],
61 },
62 }
63 java_sdk_library {
64 name: "mybootclasspathlib",
65 srcs: [
66 "mybootclasspathlib.java",
67 ],
68 apex_available: [
69 "myapex",
70 ],
71 compile_dex: true,
72 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000073 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000074 "baz",
75 ],
76 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000077 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000078 ],
79 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000080 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000081 }
82 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +000083 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000084 srcs:[
85 "A.java",
86 ],
87 apex_available: [
88 "myapex",
89 ],
90 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000091 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000092 }
Jihoon Kang85bc1932024-07-01 17:04:46 +000093 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000094 name: "bar",
95 srcs:[
96 "A.java",
97 ],
98 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000099 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000100 }
101 java_library {
102 name: "baz",
103 srcs:[
104 "A.java",
105 ],
106 apex_available: [
107 "//apex_available:platform",
108 "myapex",
109 ],
110 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000111 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000112 }
113 `)
114 testcases := []struct {
115 moduleName string
116 variant string
117 isSystemContainer bool
118 isApexContainer bool
119 }{
120 {
121 moduleName: "mybootclasspathlib",
122 variant: "android_common_myapex",
123 isSystemContainer: true,
124 isApexContainer: true,
125 },
126 {
127 moduleName: "mybootclasspathlib.impl",
128 variant: "android_common_apex30",
129 isSystemContainer: true,
130 isApexContainer: true,
131 },
132 {
133 moduleName: "mybootclasspathlib.stubs",
134 variant: "android_common",
135 isSystemContainer: true,
136 isApexContainer: false,
137 },
138 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000139 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000140 variant: "android_common_apex30",
141 isSystemContainer: true,
142 isApexContainer: true,
143 },
144 {
145 moduleName: "bar",
146 variant: "android_common",
147 isSystemContainer: true,
148 isApexContainer: false,
149 },
150 {
151 moduleName: "baz",
152 variant: "android_common_apex30",
153 isSystemContainer: true,
154 isApexContainer: true,
155 },
156 }
157
158 for _, c := range testcases {
159 m := result.ModuleForTests(c.moduleName, c.variant)
160 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
161 belongingContainers := containers.BelongingContainers()
162 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
163 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
164 }
165}
166
167func TestNonUpdatableApexDepsContainers(t *testing.T) {
Colin Crossa2fdb612024-10-11 12:52:56 -0700168 t.Parallel()
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000169 result := android.GroupFixturePreparers(
170 prepareForApexTest,
171 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000172 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000173 ).RunTestWithBp(t, `
174 apex {
175 name: "myapex",
176 key: "myapex.key",
177 bootclasspath_fragments: [
178 "mybootclasspathfragment",
179 ],
180 updatable: false,
181 }
182 apex_key {
183 name: "myapex.key",
184 public_key: "testkey.avbpubkey",
185 private_key: "testkey.pem",
186 }
187 bootclasspath_fragment {
188 name: "mybootclasspathfragment",
189 contents: [
190 "mybootclasspathlib",
191 ],
192 apex_available: [
193 "myapex",
194 ],
195 hidden_api: {
196 split_packages: ["*"],
197 },
198 }
199 java_sdk_library {
200 name: "mybootclasspathlib",
201 srcs: [
202 "mybootclasspathlib.java",
203 ],
204 apex_available: [
205 "myapex",
206 ],
207 compile_dex: true,
208 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000209 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000210 ],
211 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000212 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000213 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000214 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000215 }
216 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000217 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000218 srcs:[
219 "A.java",
220 ],
221 apex_available: [
222 "myapex",
223 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000224 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000225 }
Jihoon Kang85bc1932024-07-01 17:04:46 +0000226 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000227 name: "bar",
228 srcs:[
229 "A.java",
230 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000231 sdk_version: "none",
232 system_modules: "none",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000233 }
234 `)
235 testcases := []struct {
236 moduleName string
237 variant string
238 isSystemContainer bool
239 isApexContainer bool
240 }{
241 {
242 moduleName: "mybootclasspathlib",
243 variant: "android_common_myapex",
244 isSystemContainer: true,
245 isApexContainer: true,
246 },
247 {
248 moduleName: "mybootclasspathlib.impl",
249 variant: "android_common_apex10000",
250 isSystemContainer: true,
251 isApexContainer: true,
252 },
253 {
254 moduleName: "mybootclasspathlib.stubs",
255 variant: "android_common",
256 isSystemContainer: true,
257 isApexContainer: false,
258 },
259 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000260 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000261 variant: "android_common_apex10000",
262 isSystemContainer: true,
263 isApexContainer: true,
264 },
265 {
266 moduleName: "bar",
267 variant: "android_common",
268 isSystemContainer: true,
269 isApexContainer: false,
270 },
271 }
272
273 for _, c := range testcases {
274 m := result.ModuleForTests(c.moduleName, c.variant)
275 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
276 belongingContainers := containers.BelongingContainers()
277 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
278 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
279 }
280}
281
282func TestUpdatableAndNonUpdatableApexesIdenticalMinSdkVersion(t *testing.T) {
Colin Crossa2fdb612024-10-11 12:52:56 -0700283 t.Parallel()
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000284 result := android.GroupFixturePreparers(
285 prepareForApexTest,
286 java.PrepareForTestWithJavaSdkLibraryFiles,
287 android.FixtureMergeMockFs(android.MockFS{
288 "system/sepolicy/apex/myapex_non_updatable-file_contexts": nil,
289 "system/sepolicy/apex/myapex_updatable-file_contexts": nil,
290 }),
291 ).RunTestWithBp(t, `
292 apex {
293 name: "myapex_non_updatable",
294 key: "myapex_non_updatable.key",
295 java_libs: [
296 "foo",
297 ],
298 updatable: false,
299 min_sdk_version: "30",
300 }
301 apex_key {
302 name: "myapex_non_updatable.key",
303 public_key: "testkey.avbpubkey",
304 private_key: "testkey.pem",
305 }
306
307 apex {
308 name: "myapex_updatable",
309 key: "myapex_updatable.key",
310 java_libs: [
311 "foo",
312 ],
313 updatable: true,
314 min_sdk_version: "30",
315 }
316 apex_key {
317 name: "myapex_updatable.key",
318 public_key: "testkey.avbpubkey",
319 private_key: "testkey.pem",
320 }
321
322 java_library {
323 name: "foo",
324 srcs:[
325 "A.java",
326 ],
327 apex_available: [
328 "myapex_non_updatable",
329 "myapex_updatable",
330 ],
331 min_sdk_version: "30",
332 sdk_version: "current",
Colin Crosse4f34882024-11-14 12:26:00 -0800333 compile_dex: true,
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000334 }
335 `)
336
337 fooApexVariant := result.ModuleForTests("foo", "android_common_apex30")
338 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), fooApexVariant.Module(), android.ContainersInfoProvider)
339 belongingContainers := containers.BelongingContainers()
340 checkContainerMatch(t, "foo", "system", true, android.InList(android.SystemContainer, belongingContainers))
341 checkContainerMatch(t, "foo", "apex", true, android.InList(android.ApexContainer, belongingContainers))
342}