blob: d28b1a649affd021e176dafb512a808d69fef699 [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 (
18 "android/soong/android"
19 "android/soong/java"
20 "fmt"
21 "testing"
22)
23
24var checkContainerMatch = func(t *testing.T, name string, container string, expected bool, actual bool) {
25 errorMessage := fmt.Sprintf("module %s container %s value differ", name, container)
26 android.AssertBoolEquals(t, errorMessage, expected, actual)
27}
28
29func TestApexDepsContainers(t *testing.T) {
30 result := android.GroupFixturePreparers(
31 prepareForApexTest,
32 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +000033 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000034 ).RunTestWithBp(t, `
35 apex {
36 name: "myapex",
37 key: "myapex.key",
38 bootclasspath_fragments: [
39 "mybootclasspathfragment",
40 ],
41 updatable: true,
42 min_sdk_version: "30",
43 }
44 apex_key {
45 name: "myapex.key",
46 public_key: "testkey.avbpubkey",
47 private_key: "testkey.pem",
48 }
49 bootclasspath_fragment {
50 name: "mybootclasspathfragment",
51 contents: [
52 "mybootclasspathlib",
53 ],
54 apex_available: [
55 "myapex",
56 ],
57 hidden_api: {
58 split_packages: ["*"],
59 },
60 }
61 java_sdk_library {
62 name: "mybootclasspathlib",
63 srcs: [
64 "mybootclasspathlib.java",
65 ],
66 apex_available: [
67 "myapex",
68 ],
69 compile_dex: true,
70 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000071 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000072 "baz",
73 ],
74 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +000075 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000076 ],
77 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000078 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000079 }
80 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +000081 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000082 srcs:[
83 "A.java",
84 ],
85 apex_available: [
86 "myapex",
87 ],
88 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000089 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000090 }
Jihoon Kang85bc1932024-07-01 17:04:46 +000091 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000092 name: "bar",
93 srcs:[
94 "A.java",
95 ],
96 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +000097 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +000098 }
99 java_library {
100 name: "baz",
101 srcs:[
102 "A.java",
103 ],
104 apex_available: [
105 "//apex_available:platform",
106 "myapex",
107 ],
108 min_sdk_version: "30",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000109 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000110 }
111 `)
112 testcases := []struct {
113 moduleName string
114 variant string
115 isSystemContainer bool
116 isApexContainer bool
117 }{
118 {
119 moduleName: "mybootclasspathlib",
120 variant: "android_common_myapex",
121 isSystemContainer: true,
122 isApexContainer: true,
123 },
124 {
125 moduleName: "mybootclasspathlib.impl",
126 variant: "android_common_apex30",
127 isSystemContainer: true,
128 isApexContainer: true,
129 },
130 {
131 moduleName: "mybootclasspathlib.stubs",
132 variant: "android_common",
133 isSystemContainer: true,
134 isApexContainer: false,
135 },
136 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000137 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000138 variant: "android_common_apex30",
139 isSystemContainer: true,
140 isApexContainer: true,
141 },
142 {
143 moduleName: "bar",
144 variant: "android_common",
145 isSystemContainer: true,
146 isApexContainer: false,
147 },
148 {
149 moduleName: "baz",
150 variant: "android_common_apex30",
151 isSystemContainer: true,
152 isApexContainer: true,
153 },
154 }
155
156 for _, c := range testcases {
157 m := result.ModuleForTests(c.moduleName, c.variant)
158 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
159 belongingContainers := containers.BelongingContainers()
160 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
161 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
162 }
163}
164
165func TestNonUpdatableApexDepsContainers(t *testing.T) {
166 result := android.GroupFixturePreparers(
167 prepareForApexTest,
168 java.PrepareForTestWithJavaSdkLibraryFiles,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000169 java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"),
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000170 ).RunTestWithBp(t, `
171 apex {
172 name: "myapex",
173 key: "myapex.key",
174 bootclasspath_fragments: [
175 "mybootclasspathfragment",
176 ],
177 updatable: false,
178 }
179 apex_key {
180 name: "myapex.key",
181 public_key: "testkey.avbpubkey",
182 private_key: "testkey.pem",
183 }
184 bootclasspath_fragment {
185 name: "mybootclasspathfragment",
186 contents: [
187 "mybootclasspathlib",
188 ],
189 apex_available: [
190 "myapex",
191 ],
192 hidden_api: {
193 split_packages: ["*"],
194 },
195 }
196 java_sdk_library {
197 name: "mybootclasspathlib",
198 srcs: [
199 "mybootclasspathlib.java",
200 ],
201 apex_available: [
202 "myapex",
203 ],
204 compile_dex: true,
205 static_libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000206 "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000207 ],
208 libs: [
Jihoon Kang85bc1932024-07-01 17:04:46 +0000209 "bar.stubs",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000210 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000211 sdk_version: "current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000212 }
213 java_library {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000214 name: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000215 srcs:[
216 "A.java",
217 ],
218 apex_available: [
219 "myapex",
220 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000221 sdk_version: "core_current",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000222 }
Jihoon Kang85bc1932024-07-01 17:04:46 +0000223 java_sdk_library {
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000224 name: "bar",
225 srcs:[
226 "A.java",
227 ],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000228 sdk_version: "none",
229 system_modules: "none",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000230 }
231 `)
232 testcases := []struct {
233 moduleName string
234 variant string
235 isSystemContainer bool
236 isApexContainer bool
237 }{
238 {
239 moduleName: "mybootclasspathlib",
240 variant: "android_common_myapex",
241 isSystemContainer: true,
242 isApexContainer: true,
243 },
244 {
245 moduleName: "mybootclasspathlib.impl",
246 variant: "android_common_apex10000",
247 isSystemContainer: true,
248 isApexContainer: true,
249 },
250 {
251 moduleName: "mybootclasspathlib.stubs",
252 variant: "android_common",
253 isSystemContainer: true,
254 isApexContainer: false,
255 },
256 {
Jihoon Kang85bc1932024-07-01 17:04:46 +0000257 moduleName: "food",
Jihoon Kangf86fe9a2024-06-26 22:18:10 +0000258 variant: "android_common_apex10000",
259 isSystemContainer: true,
260 isApexContainer: true,
261 },
262 {
263 moduleName: "bar",
264 variant: "android_common",
265 isSystemContainer: true,
266 isApexContainer: false,
267 },
268 }
269
270 for _, c := range testcases {
271 m := result.ModuleForTests(c.moduleName, c.variant)
272 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider)
273 belongingContainers := containers.BelongingContainers()
274 checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers))
275 checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers))
276 }
277}
278
279func TestUpdatableAndNonUpdatableApexesIdenticalMinSdkVersion(t *testing.T) {
280 result := android.GroupFixturePreparers(
281 prepareForApexTest,
282 java.PrepareForTestWithJavaSdkLibraryFiles,
283 android.FixtureMergeMockFs(android.MockFS{
284 "system/sepolicy/apex/myapex_non_updatable-file_contexts": nil,
285 "system/sepolicy/apex/myapex_updatable-file_contexts": nil,
286 }),
287 ).RunTestWithBp(t, `
288 apex {
289 name: "myapex_non_updatable",
290 key: "myapex_non_updatable.key",
291 java_libs: [
292 "foo",
293 ],
294 updatable: false,
295 min_sdk_version: "30",
296 }
297 apex_key {
298 name: "myapex_non_updatable.key",
299 public_key: "testkey.avbpubkey",
300 private_key: "testkey.pem",
301 }
302
303 apex {
304 name: "myapex_updatable",
305 key: "myapex_updatable.key",
306 java_libs: [
307 "foo",
308 ],
309 updatable: true,
310 min_sdk_version: "30",
311 }
312 apex_key {
313 name: "myapex_updatable.key",
314 public_key: "testkey.avbpubkey",
315 private_key: "testkey.pem",
316 }
317
318 java_library {
319 name: "foo",
320 srcs:[
321 "A.java",
322 ],
323 apex_available: [
324 "myapex_non_updatable",
325 "myapex_updatable",
326 ],
327 min_sdk_version: "30",
328 sdk_version: "current",
329 }
330 `)
331
332 fooApexVariant := result.ModuleForTests("foo", "android_common_apex30")
333 containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), fooApexVariant.Module(), android.ContainersInfoProvider)
334 belongingContainers := containers.BelongingContainers()
335 checkContainerMatch(t, "foo", "system", true, android.InList(android.SystemContainer, belongingContainers))
336 checkContainerMatch(t, "foo", "apex", true, android.InList(android.ApexContainer, belongingContainers))
337}