blob: c509c1bd77b3e4c1cf3284a74814238f723011f6 [file] [log] [blame]
Paul Duffin8eb45732022-10-04 19:03:31 +01001// Copyright 2022 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
15// Testing support for dexpreopt config.
16//
17// The bootImageConfig/bootImageVariant structs returned by genBootImageConfigs are used in many
18// places in the build and are currently mutated in a number of those locations. This provides
19// comprehensive tests of the fields in those structs to ensure that they have been initialized
20// correctly and where relevant, mutated correctly.
21//
22// This is used in TestBootImageConfig to verify that the
23
24package java
25
26import (
27 "fmt"
28 "strings"
29 "testing"
30
31 "android/soong/android"
32)
33
34// PrepareForBootImageConfigTest is the minimal set of preparers that are needed to be able to use
35// the Check*BootImageConfig methods define here.
36var PrepareForBootImageConfigTest = android.GroupFixturePreparers(
37 android.PrepareForTestWithArchMutator,
38 android.PrepareForTestAccessingMakeVars,
39 FixtureConfigureBootJars("com.android.art:core1", "com.android.art:core2", "platform:framework"),
40)
41
42// normalizedInstall represents a android.RuleBuilderInstall that has been normalized to remove
43// test specific parts of the From path.
44type normalizedInstall struct {
45 from string
46 to string
47}
48
49// normalizeInstalls converts a slice of android.RuleBuilderInstall into a slice of
50// normalizedInstall to allow them to be compared using android.AssertDeepEquals.
51func normalizeInstalls(installs android.RuleBuilderInstalls) []normalizedInstall {
52 var normalized []normalizedInstall
53 for _, install := range installs {
54 normalized = append(normalized, normalizedInstall{
55 from: install.From.RelativeToTop().String(),
56 to: install.To,
57 })
58 }
59 return normalized
60}
61
62// assertInstallsEqual normalized the android.RuleBuilderInstalls and compares against the expected
63// normalizedInstalls.
64func assertInstallsEqual(t *testing.T, message string, expected []normalizedInstall, actual android.RuleBuilderInstalls) {
65 t.Helper()
66 normalizedActual := normalizeInstalls(actual)
67 android.AssertDeepEquals(t, message, expected, normalizedActual)
68}
69
70// expectedConfig encapsulates the expected properties that will be set in a bootImageConfig
71//
72// Each field <x> in here is compared against the corresponding field <x> in bootImageConfig.
73type expectedConfig struct {
74 name string
75 stem string
76 dir string
77 symbolsDir string
78 installDirOnDevice string
79 installDirOnHost string
80 profileInstallPathInApex string
81 modules android.ConfiguredJarList
82 dexPaths []string
83 dexPathsDeps []string
84 zip string
85 variants []*expectedVariant
86
87 // Mutated fields
88 profileInstalls []normalizedInstall
89 profileLicenseMetadataFile string
90}
91
92// expectedVariant encapsulates the expected properties that will be set in a bootImageVariant
93//
94// Each field <x> in here is compared against the corresponding field <x> in bootImageVariant
95// except for archType which is compared against the target.Arch.ArchType field in bootImageVariant.
96type expectedVariant struct {
97 archType android.ArchType
98 dexLocations []string
99 dexLocationsDeps []string
100 imagePathOnHost string
101 imagePathOnDevice string
102 imagesDeps []string
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000103 baseImages []string
104 baseImagesDeps []string
Paul Duffin8eb45732022-10-04 19:03:31 +0100105
106 // Mutated fields
107 installs []normalizedInstall
108 vdexInstalls []normalizedInstall
109 unstrippedInstalls []normalizedInstall
110 licenseMetadataFile string
111}
112
113// CheckArtBootImageConfig checks the status of the fields of the bootImageConfig and
114// bootImageVariant structures that are returned from artBootImageConfig.
115//
116// This is before any fields are mutated.
117func CheckArtBootImageConfig(t *testing.T, result *android.TestResult) {
118 checkArtBootImageConfig(t, result, false, "")
119}
120
121// getArtImageConfig gets the ART bootImageConfig that was created during the test.
122func getArtImageConfig(result *android.TestResult) *bootImageConfig {
123 pathCtx := &android.TestPathContext{TestResult: result}
124 imageConfig := artBootImageConfig(pathCtx)
125 return imageConfig
126}
127
128// checkArtBootImageConfig checks the ART boot image.
129//
130// mutated is true if this is called after fields in the image have been mutated by the ART
131// bootclasspath_fragment and false otherwise.
132func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) {
133 imageConfig := getArtImageConfig(result)
134
135 expected := &expectedConfig{
136 name: "art",
137 stem: "boot",
138 dir: "out/soong/test_device/dex_artjars",
139 symbolsDir: "out/soong/test_device/dex_artjars_unstripped",
140 installDirOnDevice: "system/framework",
141 installDirOnHost: "apex/art_boot_images/javalib",
142 profileInstallPathInApex: "etc/boot-image.prof",
143 modules: android.CreateTestConfiguredJarList([]string{"com.android.art:core1", "com.android.art:core2"}),
144 dexPaths: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar"},
145 dexPathsDeps: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar"},
146 zip: "out/soong/test_device/dex_artjars/art.zip",
147 variants: []*expectedVariant{
148 {
149 archType: android.Arm64,
150 dexLocations: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
151 dexLocationsDeps: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
152 imagePathOnHost: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
153 imagePathOnDevice: "/system/framework/arm64/boot.art",
154 imagesDeps: []string{
155 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
156 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat",
157 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex",
158 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art",
159 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
160 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
161 },
162 installs: []normalizedInstall{
163 {
164 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
165 to: "/apex/art_boot_images/javalib/arm64/boot.art",
166 },
167 {
168 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat",
169 to: "/apex/art_boot_images/javalib/arm64/boot.oat",
170 },
171 {
172 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art",
173 to: "/apex/art_boot_images/javalib/arm64/boot-core2.art",
174 },
175 {
176 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
177 to: "/apex/art_boot_images/javalib/arm64/boot-core2.oat",
178 },
179 },
180 vdexInstalls: []normalizedInstall{
181 {
182 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex",
183 to: "/apex/art_boot_images/javalib/arm64/boot.vdex",
184 },
185 {
186 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
187 to: "/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
188 },
189 },
190 unstrippedInstalls: []normalizedInstall{
191 {
192 from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat",
193 to: "/apex/art_boot_images/javalib/arm64/boot.oat",
194 },
195 {
196 from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
197 to: "/apex/art_boot_images/javalib/arm64/boot-core2.oat",
198 },
199 },
200 licenseMetadataFile: expectedLicenseMetadataFile,
201 },
202 {
203 archType: android.Arm,
204 dexLocations: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
205 dexLocationsDeps: []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar"},
206 imagePathOnHost: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
207 imagePathOnDevice: "/system/framework/arm/boot.art",
208 imagesDeps: []string{
209 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
210 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat",
211 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex",
212 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art",
213 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
214 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex",
215 },
216 installs: []normalizedInstall{
217 {
218 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
219 to: "/apex/art_boot_images/javalib/arm/boot.art",
220 },
221 {
222 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat",
223 to: "/apex/art_boot_images/javalib/arm/boot.oat",
224 },
225 {
226 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art",
227 to: "/apex/art_boot_images/javalib/arm/boot-core2.art",
228 },
229 {
230 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
231 to: "/apex/art_boot_images/javalib/arm/boot-core2.oat",
232 },
233 },
234 vdexInstalls: []normalizedInstall{
235 {
236 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex",
237 to: "/apex/art_boot_images/javalib/arm/boot.vdex",
238 },
239 {
240 from: "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex",
241 to: "/apex/art_boot_images/javalib/arm/boot-core2.vdex",
242 },
243 },
244 unstrippedInstalls: []normalizedInstall{
245 {
246 from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat",
247 to: "/apex/art_boot_images/javalib/arm/boot.oat",
248 },
249 {
250 from: "out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
251 to: "/apex/art_boot_images/javalib/arm/boot-core2.oat",
252 },
253 },
254 licenseMetadataFile: expectedLicenseMetadataFile,
255 },
256 {
257 archType: android.X86_64,
258 dexLocations: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
259 dexLocationsDeps: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
260 imagePathOnHost: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
261 imagePathOnDevice: "/system/framework/x86_64/boot.art",
262 imagesDeps: []string{
263 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
264 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
265 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex",
266 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art",
267 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
268 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
269 },
270 installs: []normalizedInstall{
271 {
272 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
273 to: "/apex/art_boot_images/javalib/x86_64/boot.art",
274 }, {
275 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
276 to: "/apex/art_boot_images/javalib/x86_64/boot.oat",
277 },
278 {
279 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art",
280 to: "/apex/art_boot_images/javalib/x86_64/boot-core2.art",
281 }, {
282 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
283 to: "/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
284 },
285 },
286 vdexInstalls: []normalizedInstall{
287 {
288 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex",
289 to: "/apex/art_boot_images/javalib/x86_64/boot.vdex",
290 },
291 {
292 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
293 to: "/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
294 },
295 },
296 unstrippedInstalls: []normalizedInstall{
297 {
298 from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
299 to: "/apex/art_boot_images/javalib/x86_64/boot.oat",
300 },
301 {
302 from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
303 to: "/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
304 },
305 },
306 licenseMetadataFile: expectedLicenseMetadataFile,
307 },
308 {
309 archType: android.X86,
310 dexLocations: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
311 dexLocationsDeps: []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar"},
312 imagePathOnHost: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
313 imagePathOnDevice: "/system/framework/x86/boot.art",
314 imagesDeps: []string{
315 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
316 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
317 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex",
318 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art",
319 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
320 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex",
321 },
322 installs: []normalizedInstall{
323 {
324 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
325 to: "/apex/art_boot_images/javalib/x86/boot.art",
326 }, {
327 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
328 to: "/apex/art_boot_images/javalib/x86/boot.oat",
329 },
330 {
331 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art",
332 to: "/apex/art_boot_images/javalib/x86/boot-core2.art",
333 }, {
334 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
335 to: "/apex/art_boot_images/javalib/x86/boot-core2.oat",
336 },
337 },
338 vdexInstalls: []normalizedInstall{
339 {
340 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex",
341 to: "/apex/art_boot_images/javalib/x86/boot.vdex",
342 },
343 {
344 from: "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex",
345 to: "/apex/art_boot_images/javalib/x86/boot-core2.vdex",
346 },
347 },
348 unstrippedInstalls: []normalizedInstall{
349 {
350 from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
351 to: "/apex/art_boot_images/javalib/x86/boot.oat",
352 },
353 {
354 from: "out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
355 to: "/apex/art_boot_images/javalib/x86/boot-core2.oat",
356 },
357 },
358 licenseMetadataFile: expectedLicenseMetadataFile,
359 },
360 },
361 }
362
363 checkBootImageConfig(t, imageConfig, mutated, expected)
364}
365
366// getFrameworkImageConfig gets the framework bootImageConfig that was created during the test.
367func getFrameworkImageConfig(result *android.TestResult) *bootImageConfig {
368 pathCtx := &android.TestPathContext{TestResult: result}
369 imageConfig := defaultBootImageConfig(pathCtx)
370 return imageConfig
371}
372
373// CheckFrameworkBootImageConfig checks the status of the fields of the bootImageConfig and
374// bootImageVariant structures that are returned from defaultBootImageConfig.
375//
376// This is before any fields are mutated.
377func CheckFrameworkBootImageConfig(t *testing.T, result *android.TestResult) {
378 checkFrameworkBootImageConfig(t, result, false, "")
379}
380
381// checkFrameworkBootImageConfig checks the framework boot image.
382//
383// mutated is true if this is called after fields in the image have been mutated by the
384// platform_bootclasspath and false otherwise.
385func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) {
386 imageConfig := getFrameworkImageConfig(result)
387
388 expected := &expectedConfig{
389 name: "boot",
390 stem: "boot",
391 dir: "out/soong/test_device/dex_bootjars",
392 symbolsDir: "out/soong/test_device/dex_bootjars_unstripped",
393 installDirOnDevice: "system/framework",
394 installDirOnHost: "system/framework",
395 profileInstallPathInApex: "",
396 modules: android.CreateTestConfiguredJarList([]string{"platform:framework"}),
397 dexPaths: []string{"out/soong/test_device/dex_bootjars_input/framework.jar"},
398 dexPathsDeps: []string{"out/soong/test_device/dex_artjars_input/core1.jar", "out/soong/test_device/dex_artjars_input/core2.jar", "out/soong/test_device/dex_bootjars_input/framework.jar"},
399 zip: "out/soong/test_device/dex_bootjars/boot.zip",
400 variants: []*expectedVariant{
401 {
402 archType: android.Arm64,
403 dexLocations: []string{"/system/framework/framework.jar"},
404 dexLocationsDeps: []string{
405 "/apex/com.android.art/javalib/core1.jar",
406 "/apex/com.android.art/javalib/core2.jar",
407 "/system/framework/framework.jar",
408 },
409 imagePathOnHost: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art",
410 imagePathOnDevice: "/system/framework/arm64/boot-framework.art",
411 imagesDeps: []string{
412 "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art",
413 "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat",
414 "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex",
415 },
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000416 baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art"},
417 baseImagesDeps: []string{
Paul Duffin8eb45732022-10-04 19:03:31 +0100418 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art",
419 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat",
420 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex",
421 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art",
422 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat",
423 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex",
424 },
425 installs: []normalizedInstall{
426 {
427 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art",
428 to: "/system/framework/arm64/boot-framework.art",
429 },
430 {
431 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat",
432 to: "/system/framework/arm64/boot-framework.oat",
433 },
434 },
435 vdexInstalls: []normalizedInstall{
436 {
437 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex",
438 to: "/system/framework/arm64/boot-framework.vdex",
439 },
440 },
441 unstrippedInstalls: []normalizedInstall{
442 {
443 from: "out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat",
444 to: "/system/framework/arm64/boot-framework.oat",
445 },
446 },
447 licenseMetadataFile: expectedLicenseMetadataFile,
448 },
449 {
450 archType: android.Arm,
451 dexLocations: []string{"/system/framework/framework.jar"},
452 dexLocationsDeps: []string{
453 "/apex/com.android.art/javalib/core1.jar",
454 "/apex/com.android.art/javalib/core2.jar",
455 "/system/framework/framework.jar",
456 },
457 imagePathOnHost: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art",
458 imagePathOnDevice: "/system/framework/arm/boot-framework.art",
459 imagesDeps: []string{
460 "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art",
461 "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat",
462 "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex",
463 },
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000464 baseImages: []string{"out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art"},
465 baseImagesDeps: []string{
Paul Duffin8eb45732022-10-04 19:03:31 +0100466 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art",
467 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat",
468 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex",
469 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art",
470 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat",
471 "out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex",
472 },
473 installs: []normalizedInstall{
474 {
475 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art",
476 to: "/system/framework/arm/boot-framework.art",
477 },
478 {
479 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat",
480 to: "/system/framework/arm/boot-framework.oat",
481 },
482 },
483 vdexInstalls: []normalizedInstall{
484 {
485 from: "out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex",
486 to: "/system/framework/arm/boot-framework.vdex",
487 },
488 },
489 unstrippedInstalls: []normalizedInstall{
490 {
491 from: "out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat",
492 to: "/system/framework/arm/boot-framework.oat",
493 },
494 },
495 licenseMetadataFile: expectedLicenseMetadataFile,
496 },
497 {
498 archType: android.X86_64,
499 dexLocations: []string{"host/linux-x86/system/framework/framework.jar"},
500 dexLocationsDeps: []string{
501 "host/linux-x86/apex/com.android.art/javalib/core1.jar",
502 "host/linux-x86/apex/com.android.art/javalib/core2.jar",
503 "host/linux-x86/system/framework/framework.jar",
504 },
505 imagePathOnHost: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
506 imagePathOnDevice: "/system/framework/x86_64/boot-framework.art",
507 imagesDeps: []string{
508 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
509 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat",
510 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex",
511 },
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000512 baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art"},
513 baseImagesDeps: []string{
Paul Duffin8eb45732022-10-04 19:03:31 +0100514 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art",
515 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat",
516 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex",
517 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art",
518 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat",
519 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex",
520 },
521 installs: []normalizedInstall{
522 {
523 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art",
524 to: "/system/framework/x86_64/boot-framework.art",
525 },
526 {
527 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat",
528 to: "/system/framework/x86_64/boot-framework.oat",
529 },
530 },
531 vdexInstalls: []normalizedInstall{
532 {
533 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex",
534 to: "/system/framework/x86_64/boot-framework.vdex",
535 },
536 },
537 unstrippedInstalls: []normalizedInstall{
538 {
539 from: "out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat",
540 to: "/system/framework/x86_64/boot-framework.oat",
541 },
542 },
543 licenseMetadataFile: expectedLicenseMetadataFile,
544 },
545 {
546 archType: android.X86,
547 dexLocations: []string{"host/linux-x86/system/framework/framework.jar"},
548 dexLocationsDeps: []string{
549 "host/linux-x86/apex/com.android.art/javalib/core1.jar",
550 "host/linux-x86/apex/com.android.art/javalib/core2.jar",
551 "host/linux-x86/system/framework/framework.jar",
552 },
553 imagePathOnHost: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
554 imagePathOnDevice: "/system/framework/x86/boot-framework.art",
555 imagesDeps: []string{
556 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
557 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat",
558 "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex",
559 },
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000560 baseImages: []string{"out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art"},
561 baseImagesDeps: []string{
Paul Duffin8eb45732022-10-04 19:03:31 +0100562 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art",
563 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat",
564 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex",
565 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art",
566 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat",
567 "out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex",
568 },
569 installs: []normalizedInstall{
570 {
571 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art",
572 to: "/system/framework/x86/boot-framework.art",
573 },
574 {
575 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat",
576 to: "/system/framework/x86/boot-framework.oat",
577 },
578 },
579 vdexInstalls: []normalizedInstall{
580 {
581 from: "out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex",
582 to: "/system/framework/x86/boot-framework.vdex",
583 },
584 },
585 unstrippedInstalls: []normalizedInstall{
586 {
587 from: "out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat",
588 to: "/system/framework/x86/boot-framework.oat",
589 },
590 },
591 licenseMetadataFile: expectedLicenseMetadataFile,
592 },
593 },
594 profileInstalls: []normalizedInstall{
595 {from: "out/soong/test_device/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"},
596 {from: "out/soong/test_device/dex_bootjars/boot.prof", to: "/system/etc/boot-image.prof"},
597 },
598 profileLicenseMetadataFile: expectedLicenseMetadataFile,
599 }
600
601 checkBootImageConfig(t, imageConfig, mutated, expected)
602}
603
604// clearMutatedFields clears fields in the expectedConfig that correspond to fields in the
605// bootImageConfig/bootImageVariant structs which are mutated outside the call to
606// genBootImageConfigs.
607//
608// This allows the resulting expectedConfig struct to be compared against the values of those boot
609// image structs immediately the call to genBootImageConfigs. If this is not called then the
610// expectedConfig struct will expect the boot image structs to have been mutated by the ART
611// bootclasspath_fragment and the platform_bootclasspath.
612func clearMutatedFields(expected *expectedConfig) {
613 expected.profileInstalls = nil
614 expected.profileLicenseMetadataFile = ""
615 for _, variant := range expected.variants {
616 variant.installs = nil
617 variant.vdexInstalls = nil
618 variant.unstrippedInstalls = nil
619 variant.licenseMetadataFile = ""
620 }
621}
622
623// checkBootImageConfig checks a boot image against the expected contents.
624//
625// If mutated is false then this will clear any mutated fields in the expected contents back to the
626// zero value so that they will match the unmodified values in the boot image.
627//
628// It runs the checks in an image specific subtest of the current test.
629func checkBootImageConfig(t *testing.T, imageConfig *bootImageConfig, mutated bool, expected *expectedConfig) {
630 if !mutated {
631 clearMutatedFields(expected)
632 }
633
634 t.Run(imageConfig.name, func(t *testing.T) {
635 nestedCheckBootImageConfig(t, imageConfig, expected)
636 })
637}
638
639// nestedCheckBootImageConfig does the work of comparing the image against the expected values and
640// is run in an image specific subtest.
641func nestedCheckBootImageConfig(t *testing.T, imageConfig *bootImageConfig, expected *expectedConfig) {
642 android.AssertStringEquals(t, "name", expected.name, imageConfig.name)
643 android.AssertStringEquals(t, "stem", expected.stem, imageConfig.stem)
644 android.AssertPathRelativeToTopEquals(t, "dir", expected.dir, imageConfig.dir)
645 android.AssertPathRelativeToTopEquals(t, "symbolsDir", expected.symbolsDir, imageConfig.symbolsDir)
646 android.AssertStringEquals(t, "installDirOnDevice", expected.installDirOnDevice, imageConfig.installDirOnDevice)
647 android.AssertStringEquals(t, "installDirOnHost", expected.installDirOnHost, imageConfig.installDirOnHost)
648 android.AssertStringEquals(t, "profileInstallPathInApex", expected.profileInstallPathInApex, imageConfig.profileInstallPathInApex)
649 android.AssertDeepEquals(t, "modules", expected.modules, imageConfig.modules)
650 android.AssertPathsRelativeToTopEquals(t, "dexPaths", expected.dexPaths, imageConfig.dexPaths.Paths())
651 android.AssertPathsRelativeToTopEquals(t, "dexPathsDeps", expected.dexPathsDeps, imageConfig.dexPathsDeps.Paths())
652 // dexPathsByModule is just a different representation of the other information in the config.
653 android.AssertPathRelativeToTopEquals(t, "zip", expected.zip, imageConfig.zip)
654 assertInstallsEqual(t, "profileInstalls", expected.profileInstalls, imageConfig.profileInstalls)
655 android.AssertStringEquals(t, "profileLicenseMetadataFile", expected.profileLicenseMetadataFile, imageConfig.profileLicenseMetadataFile.RelativeToTop().String())
656
657 android.AssertIntEquals(t, "variant count", 4, len(imageConfig.variants))
658 for i, variant := range imageConfig.variants {
659 expectedVariant := expected.variants[i]
660 t.Run(variant.target.Arch.ArchType.String(), func(t *testing.T) {
661 android.AssertDeepEquals(t, "archType", expectedVariant.archType, variant.target.Arch.ArchType)
662 android.AssertDeepEquals(t, "dexLocations", expectedVariant.dexLocations, variant.dexLocations)
663 android.AssertDeepEquals(t, "dexLocationsDeps", expectedVariant.dexLocationsDeps, variant.dexLocationsDeps)
664 android.AssertPathRelativeToTopEquals(t, "imagePathOnHost", expectedVariant.imagePathOnHost, variant.imagePathOnHost)
665 android.AssertStringEquals(t, "imagePathOnDevice", expectedVariant.imagePathOnDevice, variant.imagePathOnDevice)
666 android.AssertPathsRelativeToTopEquals(t, "imagesDeps", expectedVariant.imagesDeps, variant.imagesDeps.Paths())
Jiakai Zhang8fe3a412023-02-23 17:37:16 +0000667 android.AssertPathsRelativeToTopEquals(t, "baseImages", expectedVariant.baseImages, variant.baseImages.Paths())
668 android.AssertPathsRelativeToTopEquals(t, "baseImagesDeps", expectedVariant.baseImagesDeps, variant.baseImagesDeps)
Paul Duffin8eb45732022-10-04 19:03:31 +0100669 assertInstallsEqual(t, "installs", expectedVariant.installs, variant.installs)
670 assertInstallsEqual(t, "vdexInstalls", expectedVariant.vdexInstalls, variant.vdexInstalls)
671 assertInstallsEqual(t, "unstrippedInstalls", expectedVariant.unstrippedInstalls, variant.unstrippedInstalls)
672 android.AssertStringEquals(t, "licenseMetadataFile", expectedVariant.licenseMetadataFile, variant.licenseMetadataFile.RelativeToTop().String())
673 })
674 }
675}
676
677// CheckMutatedArtBootImageConfig checks the mutated fields in the bootImageConfig/Variant for ART.
678func CheckMutatedArtBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
679 checkArtBootImageConfig(t, result, true, expectedLicenseMetadataFile)
680
681 // Check the dexpreopt make vars. Do it in here as it depends on the expected license metadata
682 // file at the moment and it
683 checkDexpreoptMakeVars(t, result, expectedLicenseMetadataFile)
684}
685
686// CheckMutatedFrameworkBootImageConfig checks the mutated fields in the bootImageConfig/Variant for framework.
687func CheckMutatedFrameworkBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
688 checkFrameworkBootImageConfig(t, result, true, expectedLicenseMetadataFile)
689}
690
691// checkDexpreoptMakeVars checks the DEXPREOPT_ prefixed make vars produced by dexpreoptBootJars
692// singleton.
693func checkDexpreoptMakeVars(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) {
694 vars := result.MakeVarsForTesting(func(variable android.MakeVarVariable) bool {
695 return strings.HasPrefix(variable.Name(), "DEXPREOPT_")
696 })
697
698 out := &strings.Builder{}
699 for _, v := range vars {
700 fmt.Fprintf(out, "%s=%s\n", v.Name(), android.StringRelativeToTop(result.Config, v.Value()))
701 }
702 format := `
703DEXPREOPT_BOOTCLASSPATH_DEX_FILES=out/soong/test_device/dex_artjars_input/core1.jar out/soong/test_device/dex_artjars_input/core2.jar out/soong/test_device/dex_bootjars_input/framework.jar
704DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS=/apex/com.android.art/javalib/core1.jar /apex/com.android.art/javalib/core2.jar /system/framework/framework.jar
705DEXPREOPT_BOOT_JARS_MODULES=platform:framework
706DEXPREOPT_GEN=out/host/linux-x86/bin/dexpreopt_gen
707DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art:/apex/art_boot_images/javalib/arm/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art:/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat
708DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art:/apex/art_boot_images/javalib/arm64/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art:/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat
709DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art:/apex/art_boot_images/javalib/x86/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art:/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat
710DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art:/apex/art_boot_images/javalib/x86_64/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art:/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat
711DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art:/system/framework/arm/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat
712DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat
713DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat
714DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat
715DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex
716DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex
717DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex
718DEXPREOPT_IMAGE_DEPS_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex
719DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.oat out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex
720DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex
721DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex
722DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex
723DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm=%[1]s
724DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm64=%[1]s
725DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86=%[1]s
726DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86_64=%[1]s
727DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
728DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
729DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
730DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86_64=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
731DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEart=/system/framework/boot.art
732DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEboot=/system/framework/boot.art:/system/framework/boot-framework.art
733DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art
734DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/boot.art:out/soong/test_device/dex_bootjars/android/system/framework/boot-framework.art
735DEXPREOPT_IMAGE_NAMES=art boot
736DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/test_device/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof out/soong/test_device/dex_bootjars/boot.prof:/system/etc/boot-image.prof
737DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/meta_lic
738DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat
739DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/test_device/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat
740DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat
741DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/test_device/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat
742DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat
743DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat
744DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat
745DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat
746DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex
747DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex
748DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex
749DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex:/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex:/apex/art_boot_images/javalib/x86_64/boot-core2.vdex
750DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.vdex:/system/framework/arm/boot-framework.vdex
751DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex
752DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex
753DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex
754DEXPREOPT_IMAGE_ZIP_art=out/soong/test_device/dex_artjars/art.zip
755DEXPREOPT_IMAGE_ZIP_boot=out/soong/test_device/dex_bootjars/boot.zip
756DEXPREOPT_IMAGE_art_arm=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art
757DEXPREOPT_IMAGE_art_arm64=out/soong/test_device/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art
758DEXPREOPT_IMAGE_art_host_x86=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art
759DEXPREOPT_IMAGE_art_host_x86_64=out/soong/test_device/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art
760DEXPREOPT_IMAGE_boot_arm=out/soong/test_device/dex_bootjars/android/system/framework/arm/boot-framework.art
761DEXPREOPT_IMAGE_boot_arm64=out/soong/test_device/dex_bootjars/android/system/framework/arm64/boot-framework.art
762DEXPREOPT_IMAGE_boot_host_x86=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art
763DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/test_device/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art
764`
765 expected := strings.TrimSpace(fmt.Sprintf(format, expectedLicenseMetadataFile))
766 actual := strings.TrimSpace(out.String())
767 android.AssertStringEquals(t, "vars", expected, actual)
768}