xref: /aosp_15_r20/build/soong/android/packaging_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage android
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"strings"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
22*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Worker// Module to be packaged
26*333d2b36SAndroid Build Coastguard Workertype componentTestModule struct {
27*333d2b36SAndroid Build Coastguard Worker	ModuleBase
28*333d2b36SAndroid Build Coastguard Worker	props struct {
29*333d2b36SAndroid Build Coastguard Worker		Deps         []string
30*333d2b36SAndroid Build Coastguard Worker		Skip_install *bool
31*333d2b36SAndroid Build Coastguard Worker		Overrides    []string
32*333d2b36SAndroid Build Coastguard Worker	}
33*333d2b36SAndroid Build Coastguard Worker}
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Worker// dep tag used in this test. All dependencies are considered as installable.
36*333d2b36SAndroid Build Coastguard Workertype installDepTag struct {
37*333d2b36SAndroid Build Coastguard Worker	blueprint.BaseDependencyTag
38*333d2b36SAndroid Build Coastguard Worker	InstallAlwaysNeededDependencyTag
39*333d2b36SAndroid Build Coastguard Worker}
40*333d2b36SAndroid Build Coastguard Worker
41*333d2b36SAndroid Build Coastguard Workerfunc componentTestModuleFactory() Module {
42*333d2b36SAndroid Build Coastguard Worker	m := &componentTestModule{}
43*333d2b36SAndroid Build Coastguard Worker	m.AddProperties(&m.props)
44*333d2b36SAndroid Build Coastguard Worker	InitAndroidArchModule(m, HostAndDeviceSupported, MultilibBoth)
45*333d2b36SAndroid Build Coastguard Worker	return m
46*333d2b36SAndroid Build Coastguard Worker}
47*333d2b36SAndroid Build Coastguard Worker
48*333d2b36SAndroid Build Coastguard Workerfunc (m *componentTestModule) DepsMutator(ctx BottomUpMutatorContext) {
49*333d2b36SAndroid Build Coastguard Worker	ctx.AddDependency(ctx.Module(), installDepTag{}, m.props.Deps...)
50*333d2b36SAndroid Build Coastguard Worker}
51*333d2b36SAndroid Build Coastguard Worker
52*333d2b36SAndroid Build Coastguard Workerfunc (m *componentTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
53*333d2b36SAndroid Build Coastguard Worker	builtFile := PathForModuleOut(ctx, m.Name())
54*333d2b36SAndroid Build Coastguard Worker	dir := ctx.Target().Arch.ArchType.Multilib
55*333d2b36SAndroid Build Coastguard Worker	installDir := PathForModuleInstall(ctx, dir)
56*333d2b36SAndroid Build Coastguard Worker	if proptools.Bool(m.props.Skip_install) {
57*333d2b36SAndroid Build Coastguard Worker		m.SkipInstall()
58*333d2b36SAndroid Build Coastguard Worker	}
59*333d2b36SAndroid Build Coastguard Worker	ctx.InstallFile(installDir, m.Name(), builtFile)
60*333d2b36SAndroid Build Coastguard Worker}
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Worker// Module that itself is a package
63*333d2b36SAndroid Build Coastguard Workertype packageTestModule struct {
64*333d2b36SAndroid Build Coastguard Worker	ModuleBase
65*333d2b36SAndroid Build Coastguard Worker	PackagingBase
66*333d2b36SAndroid Build Coastguard Worker	properties struct {
67*333d2b36SAndroid Build Coastguard Worker		Install_deps []string
68*333d2b36SAndroid Build Coastguard Worker	}
69*333d2b36SAndroid Build Coastguard Worker	entries []string
70*333d2b36SAndroid Build Coastguard Worker}
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard Workerfunc packageTestModuleFactory(multiTarget bool, depsCollectFirstTargetOnly bool) Module {
73*333d2b36SAndroid Build Coastguard Worker	module := &packageTestModule{}
74*333d2b36SAndroid Build Coastguard Worker	InitPackageModule(module)
75*333d2b36SAndroid Build Coastguard Worker	module.DepsCollectFirstTargetOnly = depsCollectFirstTargetOnly
76*333d2b36SAndroid Build Coastguard Worker	if multiTarget {
77*333d2b36SAndroid Build Coastguard Worker		InitAndroidMultiTargetsArchModule(module, DeviceSupported, MultilibCommon)
78*333d2b36SAndroid Build Coastguard Worker	} else {
79*333d2b36SAndroid Build Coastguard Worker		InitAndroidArchModule(module, DeviceSupported, MultilibBoth)
80*333d2b36SAndroid Build Coastguard Worker	}
81*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(&module.properties)
82*333d2b36SAndroid Build Coastguard Worker	return module
83*333d2b36SAndroid Build Coastguard Worker}
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Workertype packagingDepTag struct {
86*333d2b36SAndroid Build Coastguard Worker	blueprint.BaseDependencyTag
87*333d2b36SAndroid Build Coastguard Worker	PackagingItemAlwaysDepTag
88*333d2b36SAndroid Build Coastguard Worker}
89*333d2b36SAndroid Build Coastguard Worker
90*333d2b36SAndroid Build Coastguard Workerfunc (m *packageTestModule) DepsMutator(ctx BottomUpMutatorContext) {
91*333d2b36SAndroid Build Coastguard Worker	m.AddDeps(ctx, packagingDepTag{})
92*333d2b36SAndroid Build Coastguard Worker	ctx.AddDependency(ctx.Module(), installDepTag{}, m.properties.Install_deps...)
93*333d2b36SAndroid Build Coastguard Worker}
94*333d2b36SAndroid Build Coastguard Worker
95*333d2b36SAndroid Build Coastguard Workerfunc (m *packageTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
96*333d2b36SAndroid Build Coastguard Worker	zipFile := PathForModuleOut(ctx, "myzip.zip")
97*333d2b36SAndroid Build Coastguard Worker	m.entries = m.CopyDepsToZip(ctx, m.GatherPackagingSpecs(ctx), zipFile)
98*333d2b36SAndroid Build Coastguard Worker}
99*333d2b36SAndroid Build Coastguard Worker
100*333d2b36SAndroid Build Coastguard Workertype testConfig struct {
101*333d2b36SAndroid Build Coastguard Worker	multiTarget                bool
102*333d2b36SAndroid Build Coastguard Worker	depsCollectFirstTargetOnly bool
103*333d2b36SAndroid Build Coastguard Worker	debuggable                 bool
104*333d2b36SAndroid Build Coastguard Worker}
105*333d2b36SAndroid Build Coastguard Worker
106*333d2b36SAndroid Build Coastguard Workerfunc runPackagingTest(t *testing.T, config testConfig, bp string, expected []string) {
107*333d2b36SAndroid Build Coastguard Worker	t.Helper()
108*333d2b36SAndroid Build Coastguard Worker
109*333d2b36SAndroid Build Coastguard Worker	var archVariant string
110*333d2b36SAndroid Build Coastguard Worker	if config.multiTarget {
111*333d2b36SAndroid Build Coastguard Worker		archVariant = "android_common"
112*333d2b36SAndroid Build Coastguard Worker	} else {
113*333d2b36SAndroid Build Coastguard Worker		archVariant = "android_arm64_armv8-a"
114*333d2b36SAndroid Build Coastguard Worker	}
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Worker	moduleFactory := func() Module {
117*333d2b36SAndroid Build Coastguard Worker		return packageTestModuleFactory(config.multiTarget, config.depsCollectFirstTargetOnly)
118*333d2b36SAndroid Build Coastguard Worker	}
119*333d2b36SAndroid Build Coastguard Worker
120*333d2b36SAndroid Build Coastguard Worker	result := GroupFixturePreparers(
121*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithDefaults,
122*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithArchMutator,
123*333d2b36SAndroid Build Coastguard Worker		FixtureRegisterWithContext(func(ctx RegistrationContext) {
124*333d2b36SAndroid Build Coastguard Worker			ctx.RegisterModuleType("component", componentTestModuleFactory)
125*333d2b36SAndroid Build Coastguard Worker			ctx.RegisterModuleType("package_module", moduleFactory)
126*333d2b36SAndroid Build Coastguard Worker		}),
127*333d2b36SAndroid Build Coastguard Worker		FixtureModifyProductVariables(func(variables FixtureProductVariables) {
128*333d2b36SAndroid Build Coastguard Worker			variables.Debuggable = proptools.BoolPtr(config.debuggable)
129*333d2b36SAndroid Build Coastguard Worker		}),
130*333d2b36SAndroid Build Coastguard Worker		FixtureWithRootAndroidBp(bp),
131*333d2b36SAndroid Build Coastguard Worker	).RunTest(t)
132*333d2b36SAndroid Build Coastguard Worker
133*333d2b36SAndroid Build Coastguard Worker	p := result.Module("package", archVariant).(*packageTestModule)
134*333d2b36SAndroid Build Coastguard Worker	actual := p.entries
135*333d2b36SAndroid Build Coastguard Worker	actual = SortedUniqueStrings(actual)
136*333d2b36SAndroid Build Coastguard Worker	expected = SortedUniqueStrings(expected)
137*333d2b36SAndroid Build Coastguard Worker	AssertDeepEquals(t, "package entries", expected, actual)
138*333d2b36SAndroid Build Coastguard Worker}
139*333d2b36SAndroid Build Coastguard Worker
140*333d2b36SAndroid Build Coastguard Workerfunc TestPackagingBaseMultiTarget(t *testing.T) {
141*333d2b36SAndroid Build Coastguard Worker	config := testConfig{
142*333d2b36SAndroid Build Coastguard Worker		multiTarget:                true,
143*333d2b36SAndroid Build Coastguard Worker		depsCollectFirstTargetOnly: false,
144*333d2b36SAndroid Build Coastguard Worker	}
145*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
146*333d2b36SAndroid Build Coastguard Worker		`
147*333d2b36SAndroid Build Coastguard Worker		component {
148*333d2b36SAndroid Build Coastguard Worker			name: "foo",
149*333d2b36SAndroid Build Coastguard Worker		}
150*333d2b36SAndroid Build Coastguard Worker
151*333d2b36SAndroid Build Coastguard Worker		package_module {
152*333d2b36SAndroid Build Coastguard Worker			name: "package",
153*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
154*333d2b36SAndroid Build Coastguard Worker		}
155*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo"})
156*333d2b36SAndroid Build Coastguard Worker
157*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
158*333d2b36SAndroid Build Coastguard Worker		`
159*333d2b36SAndroid Build Coastguard Worker		component {
160*333d2b36SAndroid Build Coastguard Worker			name: "foo",
161*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
162*333d2b36SAndroid Build Coastguard Worker		}
163*333d2b36SAndroid Build Coastguard Worker
164*333d2b36SAndroid Build Coastguard Worker		component {
165*333d2b36SAndroid Build Coastguard Worker			name: "bar",
166*333d2b36SAndroid Build Coastguard Worker		}
167*333d2b36SAndroid Build Coastguard Worker
168*333d2b36SAndroid Build Coastguard Worker		package_module {
169*333d2b36SAndroid Build Coastguard Worker			name: "package",
170*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
171*333d2b36SAndroid Build Coastguard Worker		}
172*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
173*333d2b36SAndroid Build Coastguard Worker
174*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
175*333d2b36SAndroid Build Coastguard Worker		`
176*333d2b36SAndroid Build Coastguard Worker		component {
177*333d2b36SAndroid Build Coastguard Worker			name: "foo",
178*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
179*333d2b36SAndroid Build Coastguard Worker		}
180*333d2b36SAndroid Build Coastguard Worker
181*333d2b36SAndroid Build Coastguard Worker		component {
182*333d2b36SAndroid Build Coastguard Worker			name: "bar",
183*333d2b36SAndroid Build Coastguard Worker		}
184*333d2b36SAndroid Build Coastguard Worker
185*333d2b36SAndroid Build Coastguard Worker		package_module {
186*333d2b36SAndroid Build Coastguard Worker			name: "package",
187*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
188*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
189*333d2b36SAndroid Build Coastguard Worker		}
190*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib32/foo", "lib32/bar", "lib64/foo", "lib64/bar"})
191*333d2b36SAndroid Build Coastguard Worker
192*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
193*333d2b36SAndroid Build Coastguard Worker		`
194*333d2b36SAndroid Build Coastguard Worker		component {
195*333d2b36SAndroid Build Coastguard Worker			name: "foo",
196*333d2b36SAndroid Build Coastguard Worker		}
197*333d2b36SAndroid Build Coastguard Worker
198*333d2b36SAndroid Build Coastguard Worker		component {
199*333d2b36SAndroid Build Coastguard Worker			name: "bar",
200*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "32",
201*333d2b36SAndroid Build Coastguard Worker		}
202*333d2b36SAndroid Build Coastguard Worker
203*333d2b36SAndroid Build Coastguard Worker		package_module {
204*333d2b36SAndroid Build Coastguard Worker			name: "package",
205*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
206*333d2b36SAndroid Build Coastguard Worker			multilib: {
207*333d2b36SAndroid Build Coastguard Worker				lib32: {
208*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
209*333d2b36SAndroid Build Coastguard Worker				},
210*333d2b36SAndroid Build Coastguard Worker			},
211*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
212*333d2b36SAndroid Build Coastguard Worker		}
213*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib32/foo", "lib32/bar", "lib64/foo"})
214*333d2b36SAndroid Build Coastguard Worker
215*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
216*333d2b36SAndroid Build Coastguard Worker		`
217*333d2b36SAndroid Build Coastguard Worker		component {
218*333d2b36SAndroid Build Coastguard Worker			name: "foo",
219*333d2b36SAndroid Build Coastguard Worker		}
220*333d2b36SAndroid Build Coastguard Worker
221*333d2b36SAndroid Build Coastguard Worker		component {
222*333d2b36SAndroid Build Coastguard Worker			name: "bar",
223*333d2b36SAndroid Build Coastguard Worker		}
224*333d2b36SAndroid Build Coastguard Worker
225*333d2b36SAndroid Build Coastguard Worker		package_module {
226*333d2b36SAndroid Build Coastguard Worker			name: "package",
227*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
228*333d2b36SAndroid Build Coastguard Worker			multilib: {
229*333d2b36SAndroid Build Coastguard Worker				first: {
230*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
231*333d2b36SAndroid Build Coastguard Worker				},
232*333d2b36SAndroid Build Coastguard Worker			},
233*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
234*333d2b36SAndroid Build Coastguard Worker		}
235*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib32/foo", "lib64/foo", "lib64/bar"})
236*333d2b36SAndroid Build Coastguard Worker
237*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
238*333d2b36SAndroid Build Coastguard Worker		`
239*333d2b36SAndroid Build Coastguard Worker		component {
240*333d2b36SAndroid Build Coastguard Worker			name: "foo",
241*333d2b36SAndroid Build Coastguard Worker		}
242*333d2b36SAndroid Build Coastguard Worker
243*333d2b36SAndroid Build Coastguard Worker		component {
244*333d2b36SAndroid Build Coastguard Worker			name: "bar",
245*333d2b36SAndroid Build Coastguard Worker		}
246*333d2b36SAndroid Build Coastguard Worker
247*333d2b36SAndroid Build Coastguard Worker		component {
248*333d2b36SAndroid Build Coastguard Worker			name: "baz",
249*333d2b36SAndroid Build Coastguard Worker		}
250*333d2b36SAndroid Build Coastguard Worker
251*333d2b36SAndroid Build Coastguard Worker		package_module {
252*333d2b36SAndroid Build Coastguard Worker			name: "package",
253*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
254*333d2b36SAndroid Build Coastguard Worker			arch: {
255*333d2b36SAndroid Build Coastguard Worker				arm64: {
256*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
257*333d2b36SAndroid Build Coastguard Worker				},
258*333d2b36SAndroid Build Coastguard Worker				x86_64: {
259*333d2b36SAndroid Build Coastguard Worker					deps: ["baz"],
260*333d2b36SAndroid Build Coastguard Worker				},
261*333d2b36SAndroid Build Coastguard Worker			},
262*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
263*333d2b36SAndroid Build Coastguard Worker		}
264*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib32/foo", "lib64/foo", "lib64/bar"})
265*333d2b36SAndroid Build Coastguard Worker}
266*333d2b36SAndroid Build Coastguard Worker
267*333d2b36SAndroid Build Coastguard Workerfunc TestPackagingBaseSingleTarget(t *testing.T) {
268*333d2b36SAndroid Build Coastguard Worker	config := testConfig{
269*333d2b36SAndroid Build Coastguard Worker		multiTarget:                false,
270*333d2b36SAndroid Build Coastguard Worker		depsCollectFirstTargetOnly: false,
271*333d2b36SAndroid Build Coastguard Worker	}
272*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
273*333d2b36SAndroid Build Coastguard Worker		`
274*333d2b36SAndroid Build Coastguard Worker		component {
275*333d2b36SAndroid Build Coastguard Worker			name: "foo",
276*333d2b36SAndroid Build Coastguard Worker		}
277*333d2b36SAndroid Build Coastguard Worker
278*333d2b36SAndroid Build Coastguard Worker		package_module {
279*333d2b36SAndroid Build Coastguard Worker			name: "package",
280*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
281*333d2b36SAndroid Build Coastguard Worker		}
282*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo"})
283*333d2b36SAndroid Build Coastguard Worker
284*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
285*333d2b36SAndroid Build Coastguard Worker		`
286*333d2b36SAndroid Build Coastguard Worker		component {
287*333d2b36SAndroid Build Coastguard Worker			name: "foo",
288*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
289*333d2b36SAndroid Build Coastguard Worker		}
290*333d2b36SAndroid Build Coastguard Worker
291*333d2b36SAndroid Build Coastguard Worker		component {
292*333d2b36SAndroid Build Coastguard Worker			name: "bar",
293*333d2b36SAndroid Build Coastguard Worker		}
294*333d2b36SAndroid Build Coastguard Worker
295*333d2b36SAndroid Build Coastguard Worker		package_module {
296*333d2b36SAndroid Build Coastguard Worker			name: "package",
297*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
298*333d2b36SAndroid Build Coastguard Worker		}
299*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
300*333d2b36SAndroid Build Coastguard Worker
301*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
302*333d2b36SAndroid Build Coastguard Worker		`
303*333d2b36SAndroid Build Coastguard Worker		component {
304*333d2b36SAndroid Build Coastguard Worker			name: "foo",
305*333d2b36SAndroid Build Coastguard Worker		}
306*333d2b36SAndroid Build Coastguard Worker
307*333d2b36SAndroid Build Coastguard Worker		component {
308*333d2b36SAndroid Build Coastguard Worker			name: "bar",
309*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "32",
310*333d2b36SAndroid Build Coastguard Worker		}
311*333d2b36SAndroid Build Coastguard Worker
312*333d2b36SAndroid Build Coastguard Worker		package_module {
313*333d2b36SAndroid Build Coastguard Worker			name: "package",
314*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
315*333d2b36SAndroid Build Coastguard Worker			multilib: {
316*333d2b36SAndroid Build Coastguard Worker				lib32: {
317*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
318*333d2b36SAndroid Build Coastguard Worker				},
319*333d2b36SAndroid Build Coastguard Worker			},
320*333d2b36SAndroid Build Coastguard Worker		}
321*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo"})
322*333d2b36SAndroid Build Coastguard Worker
323*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
324*333d2b36SAndroid Build Coastguard Worker		`
325*333d2b36SAndroid Build Coastguard Worker		component {
326*333d2b36SAndroid Build Coastguard Worker			name: "foo",
327*333d2b36SAndroid Build Coastguard Worker		}
328*333d2b36SAndroid Build Coastguard Worker
329*333d2b36SAndroid Build Coastguard Worker		component {
330*333d2b36SAndroid Build Coastguard Worker			name: "bar",
331*333d2b36SAndroid Build Coastguard Worker		}
332*333d2b36SAndroid Build Coastguard Worker
333*333d2b36SAndroid Build Coastguard Worker		package_module {
334*333d2b36SAndroid Build Coastguard Worker			name: "package",
335*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
336*333d2b36SAndroid Build Coastguard Worker			multilib: {
337*333d2b36SAndroid Build Coastguard Worker				lib64: {
338*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
339*333d2b36SAndroid Build Coastguard Worker				},
340*333d2b36SAndroid Build Coastguard Worker			},
341*333d2b36SAndroid Build Coastguard Worker		}
342*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
343*333d2b36SAndroid Build Coastguard Worker
344*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
345*333d2b36SAndroid Build Coastguard Worker		`
346*333d2b36SAndroid Build Coastguard Worker		component {
347*333d2b36SAndroid Build Coastguard Worker			name: "foo",
348*333d2b36SAndroid Build Coastguard Worker		}
349*333d2b36SAndroid Build Coastguard Worker
350*333d2b36SAndroid Build Coastguard Worker		component {
351*333d2b36SAndroid Build Coastguard Worker			name: "bar",
352*333d2b36SAndroid Build Coastguard Worker		}
353*333d2b36SAndroid Build Coastguard Worker
354*333d2b36SAndroid Build Coastguard Worker		component {
355*333d2b36SAndroid Build Coastguard Worker			name: "baz",
356*333d2b36SAndroid Build Coastguard Worker		}
357*333d2b36SAndroid Build Coastguard Worker
358*333d2b36SAndroid Build Coastguard Worker		package_module {
359*333d2b36SAndroid Build Coastguard Worker			name: "package",
360*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
361*333d2b36SAndroid Build Coastguard Worker			arch: {
362*333d2b36SAndroid Build Coastguard Worker				arm64: {
363*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
364*333d2b36SAndroid Build Coastguard Worker				},
365*333d2b36SAndroid Build Coastguard Worker				x86_64: {
366*333d2b36SAndroid Build Coastguard Worker					deps: ["baz"],
367*333d2b36SAndroid Build Coastguard Worker				},
368*333d2b36SAndroid Build Coastguard Worker			},
369*333d2b36SAndroid Build Coastguard Worker		}
370*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
371*333d2b36SAndroid Build Coastguard Worker
372*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
373*333d2b36SAndroid Build Coastguard Worker		`
374*333d2b36SAndroid Build Coastguard Worker		component {
375*333d2b36SAndroid Build Coastguard Worker			name: "foo",
376*333d2b36SAndroid Build Coastguard Worker		}
377*333d2b36SAndroid Build Coastguard Worker
378*333d2b36SAndroid Build Coastguard Worker		component {
379*333d2b36SAndroid Build Coastguard Worker			name: "bar",
380*333d2b36SAndroid Build Coastguard Worker		}
381*333d2b36SAndroid Build Coastguard Worker
382*333d2b36SAndroid Build Coastguard Worker		package_module {
383*333d2b36SAndroid Build Coastguard Worker			name: "package",
384*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
385*333d2b36SAndroid Build Coastguard Worker			install_deps: ["bar"],
386*333d2b36SAndroid Build Coastguard Worker		}
387*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo"})
388*333d2b36SAndroid Build Coastguard Worker}
389*333d2b36SAndroid Build Coastguard Worker
390*333d2b36SAndroid Build Coastguard Workerfunc TestPackagingWithSkipInstallDeps(t *testing.T) {
391*333d2b36SAndroid Build Coastguard Worker	// package -[dep]-> foo -[dep]-> bar      -[dep]-> baz
392*333d2b36SAndroid Build Coastguard Worker	// Packaging should continue transitively through modules that are not installed.
393*333d2b36SAndroid Build Coastguard Worker	config := testConfig{
394*333d2b36SAndroid Build Coastguard Worker		multiTarget:                false,
395*333d2b36SAndroid Build Coastguard Worker		depsCollectFirstTargetOnly: false,
396*333d2b36SAndroid Build Coastguard Worker	}
397*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
398*333d2b36SAndroid Build Coastguard Worker		`
399*333d2b36SAndroid Build Coastguard Worker		component {
400*333d2b36SAndroid Build Coastguard Worker			name: "foo",
401*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
402*333d2b36SAndroid Build Coastguard Worker		}
403*333d2b36SAndroid Build Coastguard Worker
404*333d2b36SAndroid Build Coastguard Worker		component {
405*333d2b36SAndroid Build Coastguard Worker			name: "bar",
406*333d2b36SAndroid Build Coastguard Worker			deps: ["baz"],
407*333d2b36SAndroid Build Coastguard Worker			skip_install: true,
408*333d2b36SAndroid Build Coastguard Worker		}
409*333d2b36SAndroid Build Coastguard Worker
410*333d2b36SAndroid Build Coastguard Worker		component {
411*333d2b36SAndroid Build Coastguard Worker			name: "baz",
412*333d2b36SAndroid Build Coastguard Worker		}
413*333d2b36SAndroid Build Coastguard Worker
414*333d2b36SAndroid Build Coastguard Worker		package_module {
415*333d2b36SAndroid Build Coastguard Worker			name: "package",
416*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
417*333d2b36SAndroid Build Coastguard Worker		}
418*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar", "lib64/baz"})
419*333d2b36SAndroid Build Coastguard Worker}
420*333d2b36SAndroid Build Coastguard Worker
421*333d2b36SAndroid Build Coastguard Workerfunc TestPackagingWithDepsCollectFirstTargetOnly(t *testing.T) {
422*333d2b36SAndroid Build Coastguard Worker	config := testConfig{
423*333d2b36SAndroid Build Coastguard Worker		multiTarget:                true,
424*333d2b36SAndroid Build Coastguard Worker		depsCollectFirstTargetOnly: true,
425*333d2b36SAndroid Build Coastguard Worker	}
426*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
427*333d2b36SAndroid Build Coastguard Worker		`
428*333d2b36SAndroid Build Coastguard Worker		component {
429*333d2b36SAndroid Build Coastguard Worker			name: "foo",
430*333d2b36SAndroid Build Coastguard Worker		}
431*333d2b36SAndroid Build Coastguard Worker
432*333d2b36SAndroid Build Coastguard Worker		package_module {
433*333d2b36SAndroid Build Coastguard Worker			name: "package",
434*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
435*333d2b36SAndroid Build Coastguard Worker		}
436*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo"})
437*333d2b36SAndroid Build Coastguard Worker
438*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
439*333d2b36SAndroid Build Coastguard Worker		`
440*333d2b36SAndroid Build Coastguard Worker		component {
441*333d2b36SAndroid Build Coastguard Worker			name: "foo",
442*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
443*333d2b36SAndroid Build Coastguard Worker		}
444*333d2b36SAndroid Build Coastguard Worker
445*333d2b36SAndroid Build Coastguard Worker		component {
446*333d2b36SAndroid Build Coastguard Worker			name: "bar",
447*333d2b36SAndroid Build Coastguard Worker		}
448*333d2b36SAndroid Build Coastguard Worker
449*333d2b36SAndroid Build Coastguard Worker		package_module {
450*333d2b36SAndroid Build Coastguard Worker			name: "package",
451*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
452*333d2b36SAndroid Build Coastguard Worker		}
453*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
454*333d2b36SAndroid Build Coastguard Worker
455*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
456*333d2b36SAndroid Build Coastguard Worker		`
457*333d2b36SAndroid Build Coastguard Worker		component {
458*333d2b36SAndroid Build Coastguard Worker			name: "foo",
459*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
460*333d2b36SAndroid Build Coastguard Worker		}
461*333d2b36SAndroid Build Coastguard Worker
462*333d2b36SAndroid Build Coastguard Worker		component {
463*333d2b36SAndroid Build Coastguard Worker			name: "bar",
464*333d2b36SAndroid Build Coastguard Worker		}
465*333d2b36SAndroid Build Coastguard Worker
466*333d2b36SAndroid Build Coastguard Worker		package_module {
467*333d2b36SAndroid Build Coastguard Worker			name: "package",
468*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
469*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
470*333d2b36SAndroid Build Coastguard Worker		}
471*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
472*333d2b36SAndroid Build Coastguard Worker
473*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
474*333d2b36SAndroid Build Coastguard Worker		`
475*333d2b36SAndroid Build Coastguard Worker		component {
476*333d2b36SAndroid Build Coastguard Worker			name: "foo",
477*333d2b36SAndroid Build Coastguard Worker		}
478*333d2b36SAndroid Build Coastguard Worker
479*333d2b36SAndroid Build Coastguard Worker		component {
480*333d2b36SAndroid Build Coastguard Worker			name: "bar",
481*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "32",
482*333d2b36SAndroid Build Coastguard Worker		}
483*333d2b36SAndroid Build Coastguard Worker
484*333d2b36SAndroid Build Coastguard Worker		package_module {
485*333d2b36SAndroid Build Coastguard Worker			name: "package",
486*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
487*333d2b36SAndroid Build Coastguard Worker			multilib: {
488*333d2b36SAndroid Build Coastguard Worker				lib32: {
489*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
490*333d2b36SAndroid Build Coastguard Worker				},
491*333d2b36SAndroid Build Coastguard Worker			},
492*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
493*333d2b36SAndroid Build Coastguard Worker		}
494*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib32/bar", "lib64/foo"})
495*333d2b36SAndroid Build Coastguard Worker
496*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
497*333d2b36SAndroid Build Coastguard Worker		`
498*333d2b36SAndroid Build Coastguard Worker		component {
499*333d2b36SAndroid Build Coastguard Worker			name: "foo",
500*333d2b36SAndroid Build Coastguard Worker		}
501*333d2b36SAndroid Build Coastguard Worker
502*333d2b36SAndroid Build Coastguard Worker		component {
503*333d2b36SAndroid Build Coastguard Worker			name: "bar",
504*333d2b36SAndroid Build Coastguard Worker		}
505*333d2b36SAndroid Build Coastguard Worker
506*333d2b36SAndroid Build Coastguard Worker		package_module {
507*333d2b36SAndroid Build Coastguard Worker			name: "package",
508*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
509*333d2b36SAndroid Build Coastguard Worker			multilib: {
510*333d2b36SAndroid Build Coastguard Worker				both: {
511*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
512*333d2b36SAndroid Build Coastguard Worker				},
513*333d2b36SAndroid Build Coastguard Worker			},
514*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
515*333d2b36SAndroid Build Coastguard Worker		}
516*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib32/bar", "lib64/bar"})
517*333d2b36SAndroid Build Coastguard Worker
518*333d2b36SAndroid Build Coastguard Worker	runPackagingTest(t, config,
519*333d2b36SAndroid Build Coastguard Worker		`
520*333d2b36SAndroid Build Coastguard Worker		component {
521*333d2b36SAndroid Build Coastguard Worker			name: "foo",
522*333d2b36SAndroid Build Coastguard Worker		}
523*333d2b36SAndroid Build Coastguard Worker
524*333d2b36SAndroid Build Coastguard Worker		component {
525*333d2b36SAndroid Build Coastguard Worker			name: "bar",
526*333d2b36SAndroid Build Coastguard Worker		}
527*333d2b36SAndroid Build Coastguard Worker
528*333d2b36SAndroid Build Coastguard Worker		component {
529*333d2b36SAndroid Build Coastguard Worker			name: "baz",
530*333d2b36SAndroid Build Coastguard Worker		}
531*333d2b36SAndroid Build Coastguard Worker
532*333d2b36SAndroid Build Coastguard Worker		package_module {
533*333d2b36SAndroid Build Coastguard Worker			name: "package",
534*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"],
535*333d2b36SAndroid Build Coastguard Worker			arch: {
536*333d2b36SAndroid Build Coastguard Worker				arm64: {
537*333d2b36SAndroid Build Coastguard Worker					deps: ["bar"],
538*333d2b36SAndroid Build Coastguard Worker				},
539*333d2b36SAndroid Build Coastguard Worker				x86_64: {
540*333d2b36SAndroid Build Coastguard Worker					deps: ["baz"],
541*333d2b36SAndroid Build Coastguard Worker				},
542*333d2b36SAndroid Build Coastguard Worker			},
543*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both",
544*333d2b36SAndroid Build Coastguard Worker		}
545*333d2b36SAndroid Build Coastguard Worker		`, []string{"lib64/foo", "lib64/bar"})
546*333d2b36SAndroid Build Coastguard Worker}
547*333d2b36SAndroid Build Coastguard Worker
548*333d2b36SAndroid Build Coastguard Workerfunc TestDebuggableDeps(t *testing.T) {
549*333d2b36SAndroid Build Coastguard Worker	bp := `
550*333d2b36SAndroid Build Coastguard Worker		component {
551*333d2b36SAndroid Build Coastguard Worker			name: "foo",
552*333d2b36SAndroid Build Coastguard Worker		}
553*333d2b36SAndroid Build Coastguard Worker
554*333d2b36SAndroid Build Coastguard Worker		component {
555*333d2b36SAndroid Build Coastguard Worker			name: "bar",
556*333d2b36SAndroid Build Coastguard Worker			deps: ["baz"],
557*333d2b36SAndroid Build Coastguard Worker		}
558*333d2b36SAndroid Build Coastguard Worker
559*333d2b36SAndroid Build Coastguard Worker		component {
560*333d2b36SAndroid Build Coastguard Worker			name: "baz",
561*333d2b36SAndroid Build Coastguard Worker		}
562*333d2b36SAndroid Build Coastguard Worker
563*333d2b36SAndroid Build Coastguard Worker		package_module {
564*333d2b36SAndroid Build Coastguard Worker			name: "package",
565*333d2b36SAndroid Build Coastguard Worker			deps: ["foo"] + select(product_variable("debuggable"), {
566*333d2b36SAndroid Build Coastguard Worker				true: ["bar"],
567*333d2b36SAndroid Build Coastguard Worker				default: [],
568*333d2b36SAndroid Build Coastguard Worker			}),
569*333d2b36SAndroid Build Coastguard Worker		}`
570*333d2b36SAndroid Build Coastguard Worker	testcases := []struct {
571*333d2b36SAndroid Build Coastguard Worker		debuggable bool
572*333d2b36SAndroid Build Coastguard Worker		expected   []string
573*333d2b36SAndroid Build Coastguard Worker	}{
574*333d2b36SAndroid Build Coastguard Worker		{
575*333d2b36SAndroid Build Coastguard Worker			debuggable: true,
576*333d2b36SAndroid Build Coastguard Worker			expected:   []string{"lib64/foo", "lib64/bar", "lib64/baz"},
577*333d2b36SAndroid Build Coastguard Worker		},
578*333d2b36SAndroid Build Coastguard Worker		{
579*333d2b36SAndroid Build Coastguard Worker			debuggable: false,
580*333d2b36SAndroid Build Coastguard Worker			expected:   []string{"lib64/foo"},
581*333d2b36SAndroid Build Coastguard Worker		},
582*333d2b36SAndroid Build Coastguard Worker	}
583*333d2b36SAndroid Build Coastguard Worker	for _, tc := range testcases {
584*333d2b36SAndroid Build Coastguard Worker		config := testConfig{
585*333d2b36SAndroid Build Coastguard Worker			debuggable: tc.debuggable,
586*333d2b36SAndroid Build Coastguard Worker		}
587*333d2b36SAndroid Build Coastguard Worker		runPackagingTest(t, config, bp, tc.expected)
588*333d2b36SAndroid Build Coastguard Worker	}
589*333d2b36SAndroid Build Coastguard Worker}
590*333d2b36SAndroid Build Coastguard Worker
591*333d2b36SAndroid Build Coastguard Workerfunc TestPrefer32Deps(t *testing.T) {
592*333d2b36SAndroid Build Coastguard Worker	bpTemplate := `
593*333d2b36SAndroid Build Coastguard Worker		component {
594*333d2b36SAndroid Build Coastguard Worker			name: "foo",
595*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "both", // not needed but for clarity
596*333d2b36SAndroid Build Coastguard Worker		}
597*333d2b36SAndroid Build Coastguard Worker
598*333d2b36SAndroid Build Coastguard Worker		component {
599*333d2b36SAndroid Build Coastguard Worker			name: "foo_32only",
600*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "prefer32",
601*333d2b36SAndroid Build Coastguard Worker		}
602*333d2b36SAndroid Build Coastguard Worker
603*333d2b36SAndroid Build Coastguard Worker		component {
604*333d2b36SAndroid Build Coastguard Worker			name: "foo_64only",
605*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "64",
606*333d2b36SAndroid Build Coastguard Worker		}
607*333d2b36SAndroid Build Coastguard Worker
608*333d2b36SAndroid Build Coastguard Worker		package_module {
609*333d2b36SAndroid Build Coastguard Worker			name: "package",
610*333d2b36SAndroid Build Coastguard Worker			compile_multilib: "%COMPILE_MULTILIB%",
611*333d2b36SAndroid Build Coastguard Worker			multilib: {
612*333d2b36SAndroid Build Coastguard Worker				prefer32: {
613*333d2b36SAndroid Build Coastguard Worker					deps: %DEPS%,
614*333d2b36SAndroid Build Coastguard Worker				},
615*333d2b36SAndroid Build Coastguard Worker			},
616*333d2b36SAndroid Build Coastguard Worker		}
617*333d2b36SAndroid Build Coastguard Worker	`
618*333d2b36SAndroid Build Coastguard Worker
619*333d2b36SAndroid Build Coastguard Worker	testcases := []struct {
620*333d2b36SAndroid Build Coastguard Worker		compileMultilib string
621*333d2b36SAndroid Build Coastguard Worker		deps            []string
622*333d2b36SAndroid Build Coastguard Worker		expected        []string
623*333d2b36SAndroid Build Coastguard Worker	}{
624*333d2b36SAndroid Build Coastguard Worker		{
625*333d2b36SAndroid Build Coastguard Worker			compileMultilib: "first",
626*333d2b36SAndroid Build Coastguard Worker			deps:            []string{"foo", "foo_64only"},
627*333d2b36SAndroid Build Coastguard Worker			expected:        []string{"lib64/foo", "lib64/foo_64only"},
628*333d2b36SAndroid Build Coastguard Worker		},
629*333d2b36SAndroid Build Coastguard Worker		{
630*333d2b36SAndroid Build Coastguard Worker			compileMultilib: "64",
631*333d2b36SAndroid Build Coastguard Worker			deps:            []string{"foo", "foo_64only"},
632*333d2b36SAndroid Build Coastguard Worker			expected:        []string{"lib64/foo", "lib64/foo_64only"},
633*333d2b36SAndroid Build Coastguard Worker		},
634*333d2b36SAndroid Build Coastguard Worker		{
635*333d2b36SAndroid Build Coastguard Worker			compileMultilib: "32",
636*333d2b36SAndroid Build Coastguard Worker			deps:            []string{"foo", "foo_32only"},
637*333d2b36SAndroid Build Coastguard Worker			expected:        []string{"lib32/foo", "lib32/foo_32only"},
638*333d2b36SAndroid Build Coastguard Worker		},
639*333d2b36SAndroid Build Coastguard Worker		{
640*333d2b36SAndroid Build Coastguard Worker			compileMultilib: "both",
641*333d2b36SAndroid Build Coastguard Worker			deps:            []string{"foo", "foo_32only", "foo_64only"},
642*333d2b36SAndroid Build Coastguard Worker			expected:        []string{"lib32/foo", "lib32/foo_32only", "lib64/foo_64only"},
643*333d2b36SAndroid Build Coastguard Worker		},
644*333d2b36SAndroid Build Coastguard Worker	}
645*333d2b36SAndroid Build Coastguard Worker	for _, tc := range testcases {
646*333d2b36SAndroid Build Coastguard Worker		config := testConfig{
647*333d2b36SAndroid Build Coastguard Worker			multiTarget:                true,
648*333d2b36SAndroid Build Coastguard Worker			depsCollectFirstTargetOnly: true,
649*333d2b36SAndroid Build Coastguard Worker		}
650*333d2b36SAndroid Build Coastguard Worker		bp := strings.Replace(bpTemplate, "%COMPILE_MULTILIB%", tc.compileMultilib, -1)
651*333d2b36SAndroid Build Coastguard Worker		bp = strings.Replace(bp, "%DEPS%", `["`+strings.Join(tc.deps, `", "`)+`"]`, -1)
652*333d2b36SAndroid Build Coastguard Worker		runPackagingTest(t, config, bp, tc.expected)
653*333d2b36SAndroid Build Coastguard Worker	}
654*333d2b36SAndroid Build Coastguard Worker}
655*333d2b36SAndroid Build Coastguard Worker
656*333d2b36SAndroid Build Coastguard Workerfunc TestOverrides(t *testing.T) {
657*333d2b36SAndroid Build Coastguard Worker	bpTemplate := `
658*333d2b36SAndroid Build Coastguard Worker		component {
659*333d2b36SAndroid Build Coastguard Worker			name: "foo",
660*333d2b36SAndroid Build Coastguard Worker			deps: ["bar"],
661*333d2b36SAndroid Build Coastguard Worker		}
662*333d2b36SAndroid Build Coastguard Worker
663*333d2b36SAndroid Build Coastguard Worker		component {
664*333d2b36SAndroid Build Coastguard Worker			name: "bar",
665*333d2b36SAndroid Build Coastguard Worker		}
666*333d2b36SAndroid Build Coastguard Worker
667*333d2b36SAndroid Build Coastguard Worker		component {
668*333d2b36SAndroid Build Coastguard Worker			name: "bar_override",
669*333d2b36SAndroid Build Coastguard Worker			overrides: ["bar"],
670*333d2b36SAndroid Build Coastguard Worker		}
671*333d2b36SAndroid Build Coastguard Worker
672*333d2b36SAndroid Build Coastguard Worker		component {
673*333d2b36SAndroid Build Coastguard Worker			name: "baz",
674*333d2b36SAndroid Build Coastguard Worker			deps: ["bar_override"],
675*333d2b36SAndroid Build Coastguard Worker		}
676*333d2b36SAndroid Build Coastguard Worker
677*333d2b36SAndroid Build Coastguard Worker		package_module {
678*333d2b36SAndroid Build Coastguard Worker			name: "package",
679*333d2b36SAndroid Build Coastguard Worker			deps: %DEPS%,
680*333d2b36SAndroid Build Coastguard Worker		}
681*333d2b36SAndroid Build Coastguard Worker	`
682*333d2b36SAndroid Build Coastguard Worker	testcases := []struct {
683*333d2b36SAndroid Build Coastguard Worker		deps     []string
684*333d2b36SAndroid Build Coastguard Worker		expected []string
685*333d2b36SAndroid Build Coastguard Worker	}{
686*333d2b36SAndroid Build Coastguard Worker		{
687*333d2b36SAndroid Build Coastguard Worker			deps:     []string{"foo"},
688*333d2b36SAndroid Build Coastguard Worker			expected: []string{"lib64/foo", "lib64/bar"},
689*333d2b36SAndroid Build Coastguard Worker		},
690*333d2b36SAndroid Build Coastguard Worker		{
691*333d2b36SAndroid Build Coastguard Worker			deps:     []string{"foo", "bar_override"},
692*333d2b36SAndroid Build Coastguard Worker			expected: []string{"lib64/foo", "lib64/bar_override"},
693*333d2b36SAndroid Build Coastguard Worker		},
694*333d2b36SAndroid Build Coastguard Worker		{
695*333d2b36SAndroid Build Coastguard Worker			deps:     []string{"foo", "bar", "bar_override"},
696*333d2b36SAndroid Build Coastguard Worker			expected: []string{"lib64/foo", "lib64/bar_override"},
697*333d2b36SAndroid Build Coastguard Worker		},
698*333d2b36SAndroid Build Coastguard Worker		{
699*333d2b36SAndroid Build Coastguard Worker			deps:     []string{"bar", "bar_override"},
700*333d2b36SAndroid Build Coastguard Worker			expected: []string{"lib64/bar_override"},
701*333d2b36SAndroid Build Coastguard Worker		},
702*333d2b36SAndroid Build Coastguard Worker		{
703*333d2b36SAndroid Build Coastguard Worker			deps:     []string{"foo", "baz"},
704*333d2b36SAndroid Build Coastguard Worker			expected: []string{"lib64/foo", "lib64/baz", "lib64/bar_override"},
705*333d2b36SAndroid Build Coastguard Worker		},
706*333d2b36SAndroid Build Coastguard Worker	}
707*333d2b36SAndroid Build Coastguard Worker	for _, tc := range testcases {
708*333d2b36SAndroid Build Coastguard Worker		config := testConfig{
709*333d2b36SAndroid Build Coastguard Worker			multiTarget:                true,
710*333d2b36SAndroid Build Coastguard Worker			depsCollectFirstTargetOnly: false,
711*333d2b36SAndroid Build Coastguard Worker		}
712*333d2b36SAndroid Build Coastguard Worker		bp := strings.Replace(bpTemplate, "%DEPS%", `["`+strings.Join(tc.deps, `", "`)+`"]`, -1)
713*333d2b36SAndroid Build Coastguard Worker		runPackagingTest(t, config, bp, tc.expected)
714*333d2b36SAndroid Build Coastguard Worker	}
715*333d2b36SAndroid Build Coastguard Worker}
716