blob: b19e0503f6540aa6eb8a2e240ae9a614ac657614 [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()
Colin Cross1cea5302024-12-03 16:40:08 -080032 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000033 result := android.GroupFixturePreparers(
34 prepareForApexTest,
35 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +000036 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000037 ).RunTestWithBp(t, `
38 apex {
39 name: "myapex",
40 key: "myapex.key",
41 bootclasspath_fragments: [
42 "mybootclasspathfragment",
43 ],
44 updatable: true,
45 min_sdk_version: "30",
46 }
47 apex_key {
48 name: "myapex.key",
49 public_key: "testkey.avbpubkey",
50 private_key: "testkey.pem",
51 }
52 bootclasspath_fragment {
53 name: "mybootclasspathfragment",
54 contents: [
55 "mybootclasspathlib",
56 ],
57 apex_available: [
58 "myapex",
59 ],
60 hidden_api: {
61 split_packages: ["*"],
62 },
63 }
64 java_sdk_library {
65 name: "mybootclasspathlib",
66 srcs: [
67 "mybootclasspathlib.java",
68 ],
69 apex_available: [
70 "myapex",
71 ],
72 compile_dex: true,
73 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000074 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000075 "baz",
76 ],
77 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000078 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000079 ],
80 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000081 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000082 }
83 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +000084 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000085 srcs:[
86 "A.java",
87 ],
88 apex_available: [
89 "myapex",
90 ],
91 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000092 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000093 }
Jihoon Kang85bc1932024-07-01 17:04:46 +000094 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000095 name: "bar",
96 srcs:[
97 "A.java",
98 ],
99 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000100 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000101 }
102 java_library {
103 name: "baz",
104 srcs:[
105 "A.java",
106 ],
107 apex_available: [
108 "//apex_available:platform",
109 "myapex",
110 ],
111 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000112 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000113 }
114 `)
115 testcases := []struct {
116 moduleName string
117 variant string
118 isSystemContainer bool
119 isApexContainer bool
120 }{
121 {
122 moduleName: "mybootclasspathlib",
123 variant: "android_common_myapex",
124 isSystemContainer: true,
125 isApexContainer: true,
126 },
127 {
128 moduleName: "mybootclasspathlib.impl",
129 variant: "android_common_apex30",
130 isSystemContainer: true,
131 isApexContainer: true,
132 },
133 {
134 moduleName: "mybootclasspathlib.stubs",
135 variant: "android_common",
136 isSystemContainer: true,
137 isApexContainer: false,
138 },
139 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000140 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000141 variant: "android_common_apex30",
142 isSystemContainer: true,
143 isApexContainer: true,
144 },
145 {
146 moduleName: "bar",
147 variant: "android_common",
148 isSystemContainer: true,
149 isApexContainer: false,
150 },
151 {
152 moduleName: "baz",
153 variant: "android_common_apex30",
154 isSystemContainer: true,
155 isApexContainer: true,
156 },
157 }
158
159 for _, c := range testcases {
Colin Cross90607e92025-02-11 14:58:07 -0800160 m := result.ModuleForTests(t, c.moduleName, c.variant)
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000161 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
162 belongingContainers := containers.BelongingContainers()
163 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
164 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
165 }
166}
167
168func TestNonUpdatableApexDepsContainers(t *testing.T) {
Colin Crossa2fdb612024-10-11 12:52:56 -0700169 t.Parallel()
Colin Cross1cea5302024-12-03 16:40:08 -0800170 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000171 result := android.GroupFixturePreparers(
172 prepareForApexTest,
173 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000174 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000175 ).RunTestWithBp(t, `
176 apex {
177 name: "myapex",
178 key: "myapex.key",
179 bootclasspath_fragments: [
180 "mybootclasspathfragment",
181 ],
182 updatable: false,
183 }
184 apex_key {
185 name: "myapex.key",
186 public_key: "testkey.avbpubkey",
187 private_key: "testkey.pem",
188 }
189 bootclasspath_fragment {
190 name: "mybootclasspathfragment",
191 contents: [
192 "mybootclasspathlib",
193 ],
194 apex_available: [
195 "myapex",
196 ],
197 hidden_api: {
198 split_packages: ["*"],
199 },
200 }
201 java_sdk_library {
202 name: "mybootclasspathlib",
203 srcs: [
204 "mybootclasspathlib.java",
205 ],
206 apex_available: [
207 "myapex",
208 ],
209 compile_dex: true,
210 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000211 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000212 ],
213 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000214 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000215 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000216 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000217 }
218 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000219 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000220 srcs:[
221 "A.java",
222 ],
223 apex_available: [
224 "myapex",
225 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000226 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000227 }
Jihoon Kang85bc1932024-07-01 17:04:46 +0000228 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000229 name: "bar",
230 srcs:[
231 "A.java",
232 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000233 sdk_version: "none",
234 system_modules: "none",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000235 }
236 `)
237 testcases := []struct {
238 moduleName string
239 variant string
240 isSystemContainer bool
241 isApexContainer bool
242 }{
243 {
244 moduleName: "mybootclasspathlib",
245 variant: "android_common_myapex",
246 isSystemContainer: true,
247 isApexContainer: true,
248 },
249 {
250 moduleName: "mybootclasspathlib.impl",
251 variant: "android_common_apex10000",
252 isSystemContainer: true,
253 isApexContainer: true,
254 },
255 {
256 moduleName: "mybootclasspathlib.stubs",
257 variant: "android_common",
258 isSystemContainer: true,
259 isApexContainer: false,
260 },
261 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000262 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000263 variant: "android_common_apex10000",
264 isSystemContainer: true,
265 isApexContainer: true,
266 },
267 {
268 moduleName: "bar",
269 variant: "android_common",
270 isSystemContainer: true,
271 isApexContainer: false,
272 },
273 }
274
275 for _, c := range testcases {
Colin Cross90607e92025-02-11 14:58:07 -0800276 m := result.ModuleForTests(t, c.moduleName, c.variant)
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000277 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
278 belongingContainers := containers.BelongingContainers()
279 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
280 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
281 }
282}
283
284func TestUpdatableAndNonUpdatableApexesIdenticalMinSdkVersion(t *testing.T) {
Colin Crossa2fdb612024-10-11 12:52:56 -0700285 t.Parallel()
Colin Cross1cea5302024-12-03 16:40:08 -0800286 t.Skip("TODO(b/394955484): this probably has to be moved to a check by the apex")
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000287 result := android.GroupFixturePreparers(
288 prepareForApexTest,
289 java.PrepareForTestWithJavaSdkLibraryFiles,
290 android.FixtureMergeMockFs(android.MockFS{
291 "system/sepolicy/apex/myapex_non_updatable-file_contexts": nil,
292 "system/sepolicy/apex/myapex_updatable-file_contexts": nil,
293 }),
294 ).RunTestWithBp(t, `
295 apex {
296 name: "myapex_non_updatable",
297 key: "myapex_non_updatable.key",
298 java_libs: [
299 "foo",
300 ],
301 updatable: false,
302 min_sdk_version: "30",
303 }
304 apex_key {
305 name: "myapex_non_updatable.key",
306 public_key: "testkey.avbpubkey",
307 private_key: "testkey.pem",
308 }
309
310 apex {
311 name: "myapex_updatable",
312 key: "myapex_updatable.key",
313 java_libs: [
314 "foo",
315 ],
316 updatable: true,
317 min_sdk_version: "30",
318 }
319 apex_key {
320 name: "myapex_updatable.key",
321 public_key: "testkey.avbpubkey",
322 private_key: "testkey.pem",
323 }
324
325 java_library {
326 name: "foo",
327 srcs:[
328 "A.java",
329 ],
330 apex_available: [
331 "myapex_non_updatable",
332 "myapex_updatable",
333 ],
334 min_sdk_version: "30",
335 sdk_version: "current",
Colin Crosse4f34882024-11-14 12:26:00 -0800336 compile_dex: true,
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000337 }
338 `)
339
Colin Cross90607e92025-02-11 14:58:07 -0800340 fooApexVariant := result.ModuleForTests(t, "foo", "android_common_apex30")
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000341 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), fooApexVariant.Module(), android.ContainersInfoProvider)
342 belongingContainers := containers.BelongingContainers()
343 checkContainerMatch(t, "foo", "system", true, android.InList(android.SystemContainer, belongingContainers))
344 checkContainerMatch(t, "foo", "apex", true, android.InList(android.ApexContainer, belongingContainers))
345}