xref: /aosp_15_r20/build/soong/etc/prebuilt_etc_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2018 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 etc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"os"
19*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
25*333d2b36SAndroid Build Coastguard Worker)
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) {
28*333d2b36SAndroid Build Coastguard Worker	os.Exit(m.Run())
29*333d2b36SAndroid Build Coastguard Worker}
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Workervar prepareForPrebuiltEtcTest = android.GroupFixturePreparers(
32*333d2b36SAndroid Build Coastguard Worker	android.PrepareForTestWithArchMutator,
33*333d2b36SAndroid Build Coastguard Worker	PrepareForTestWithPrebuiltEtc,
34*333d2b36SAndroid Build Coastguard Worker	android.FixtureMergeMockFs(android.MockFS{
35*333d2b36SAndroid Build Coastguard Worker		"foo.conf": nil,
36*333d2b36SAndroid Build Coastguard Worker		"bar.conf": nil,
37*333d2b36SAndroid Build Coastguard Worker		"baz.conf": nil,
38*333d2b36SAndroid Build Coastguard Worker	}),
39*333d2b36SAndroid Build Coastguard Worker)
40*333d2b36SAndroid Build Coastguard Worker
41*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcVariants(t *testing.T) {
42*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
43*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
44*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
45*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
46*333d2b36SAndroid Build Coastguard Worker		}
47*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
48*333d2b36SAndroid Build Coastguard Worker			name: "bar.conf",
49*333d2b36SAndroid Build Coastguard Worker			src: "bar.conf",
50*333d2b36SAndroid Build Coastguard Worker			recovery_available: true,
51*333d2b36SAndroid Build Coastguard Worker		}
52*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
53*333d2b36SAndroid Build Coastguard Worker			name: "baz.conf",
54*333d2b36SAndroid Build Coastguard Worker			src: "baz.conf",
55*333d2b36SAndroid Build Coastguard Worker			recovery: true,
56*333d2b36SAndroid Build Coastguard Worker		}
57*333d2b36SAndroid Build Coastguard Worker	`)
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker	foo_variants := result.ModuleVariantsForTests("foo.conf")
60*333d2b36SAndroid Build Coastguard Worker	if len(foo_variants) != 1 {
61*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected 1, got %#v", foo_variants)
62*333d2b36SAndroid Build Coastguard Worker	}
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker	bar_variants := result.ModuleVariantsForTests("bar.conf")
65*333d2b36SAndroid Build Coastguard Worker	if len(bar_variants) != 2 {
66*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected 2, got %#v", bar_variants)
67*333d2b36SAndroid Build Coastguard Worker	}
68*333d2b36SAndroid Build Coastguard Worker
69*333d2b36SAndroid Build Coastguard Worker	baz_variants := result.ModuleVariantsForTests("baz.conf")
70*333d2b36SAndroid Build Coastguard Worker	if len(baz_variants) != 1 {
71*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected 1, got %#v", baz_variants)
72*333d2b36SAndroid Build Coastguard Worker	}
73*333d2b36SAndroid Build Coastguard Worker}
74*333d2b36SAndroid Build Coastguard Worker
75*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcOutputPath(t *testing.T) {
76*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
77*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
78*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
79*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
80*333d2b36SAndroid Build Coastguard Worker			filename: "foo.installed.conf",
81*333d2b36SAndroid Build Coastguard Worker		}
82*333d2b36SAndroid Build Coastguard Worker	`)
83*333d2b36SAndroid Build Coastguard Worker
84*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
85*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "foo.installed.conf", p.outputFilePaths[0].Base())
86*333d2b36SAndroid Build Coastguard Worker}
87*333d2b36SAndroid Build Coastguard Worker
88*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcGlob(t *testing.T) {
89*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
90*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
91*333d2b36SAndroid Build Coastguard Worker			name: "my_foo",
92*333d2b36SAndroid Build Coastguard Worker			src: "foo.*",
93*333d2b36SAndroid Build Coastguard Worker		}
94*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
95*333d2b36SAndroid Build Coastguard Worker			name: "my_bar",
96*333d2b36SAndroid Build Coastguard Worker			src: "bar.*",
97*333d2b36SAndroid Build Coastguard Worker			filename_from_src: true,
98*333d2b36SAndroid Build Coastguard Worker		}
99*333d2b36SAndroid Build Coastguard Worker	`)
100*333d2b36SAndroid Build Coastguard Worker
101*333d2b36SAndroid Build Coastguard Worker	p := result.Module("my_foo", "android_arm64_armv8-a").(*PrebuiltEtc)
102*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "my_foo output file path", "my_foo", p.outputFilePaths[0].Base())
103*333d2b36SAndroid Build Coastguard Worker
104*333d2b36SAndroid Build Coastguard Worker	p = result.Module("my_bar", "android_arm64_armv8-a").(*PrebuiltEtc)
105*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "my_bar output file path", "bar.conf", p.outputFilePaths[0].Base())
106*333d2b36SAndroid Build Coastguard Worker}
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcMultipleSrcs(t *testing.T) {
109*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
110*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
111*333d2b36SAndroid Build Coastguard Worker			name: "foo",
112*333d2b36SAndroid Build Coastguard Worker			srcs: ["*.conf"],
113*333d2b36SAndroid Build Coastguard Worker		}
114*333d2b36SAndroid Build Coastguard Worker	`)
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo", "android_arm64_armv8-a").(*PrebuiltEtc)
117*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "bar.conf", p.outputFilePaths[0].Base())
118*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "baz.conf", p.outputFilePaths[1].Base())
119*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "foo.conf", p.outputFilePaths[2].Base())
120*333d2b36SAndroid Build Coastguard Worker}
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcDsts(t *testing.T) {
123*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
124*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
125*333d2b36SAndroid Build Coastguard Worker			name: "foo",
126*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.conf", "bar.conf"],
127*333d2b36SAndroid Build Coastguard Worker			dsts: ["foodir/foo.conf", "bardir/extradir/different.name"],
128*333d2b36SAndroid Build Coastguard Worker		}
129*333d2b36SAndroid Build Coastguard Worker	`)
130*333d2b36SAndroid Build Coastguard Worker
131*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo", "android_arm64_armv8-a").(*PrebuiltEtc)
132*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "foo.conf", p.outputFilePaths[0].Base())
133*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "different.name", p.outputFilePaths[1].Base())
134*333d2b36SAndroid Build Coastguard Worker
135*333d2b36SAndroid Build Coastguard Worker	expectedPaths := [...]string{
136*333d2b36SAndroid Build Coastguard Worker		"out/soong/target/product/test_device/system/etc/foodir",
137*333d2b36SAndroid Build Coastguard Worker		"out/soong/target/product/test_device/system/etc/bardir/extradir",
138*333d2b36SAndroid Build Coastguard Worker	}
139*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expectedPaths[0], p.installDirPaths[0])
140*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expectedPaths[1], p.installDirPaths[1])
141*333d2b36SAndroid Build Coastguard Worker}
142*333d2b36SAndroid Build Coastguard Worker
143*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcDstsPlusRelativeInstallPath(t *testing.T) {
144*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
145*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
146*333d2b36SAndroid Build Coastguard Worker			name: "foo",
147*333d2b36SAndroid Build Coastguard Worker			srcs: ["foo.conf", "bar.conf"],
148*333d2b36SAndroid Build Coastguard Worker			dsts: ["foodir/foo.conf", "bardir/extradir/different.name"],
149*333d2b36SAndroid Build Coastguard Worker			relative_install_path: "somewhere",
150*333d2b36SAndroid Build Coastguard Worker		}
151*333d2b36SAndroid Build Coastguard Worker	`)
152*333d2b36SAndroid Build Coastguard Worker
153*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo", "android_arm64_armv8-a").(*PrebuiltEtc)
154*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "foo.conf", p.outputFilePaths[0].Base())
155*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "different.name", p.outputFilePaths[1].Base())
156*333d2b36SAndroid Build Coastguard Worker
157*333d2b36SAndroid Build Coastguard Worker	expectedPaths := [...]string{
158*333d2b36SAndroid Build Coastguard Worker		"out/soong/target/product/test_device/system/etc/somewhere/foodir",
159*333d2b36SAndroid Build Coastguard Worker		"out/soong/target/product/test_device/system/etc/somewhere/bardir/extradir",
160*333d2b36SAndroid Build Coastguard Worker	}
161*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expectedPaths[0], p.installDirPaths[0])
162*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expectedPaths[1], p.installDirPaths[1])
163*333d2b36SAndroid Build Coastguard Worker}
164*333d2b36SAndroid Build Coastguard Worker
165*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcDstsSrcGlob(t *testing.T) {
166*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
167*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
168*333d2b36SAndroid Build Coastguard Worker			name: "foo",
169*333d2b36SAndroid Build Coastguard Worker			srcs: ["*.conf"],
170*333d2b36SAndroid Build Coastguard Worker			dsts: ["a.conf", "b.conf", "c.conf"],
171*333d2b36SAndroid Build Coastguard Worker		}
172*333d2b36SAndroid Build Coastguard Worker	`)
173*333d2b36SAndroid Build Coastguard Worker
174*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo", "android_arm64_armv8-a").(*PrebuiltEtc)
175*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "a.conf", p.outputFilePaths[0].Base())
176*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "b.conf", p.outputFilePaths[1].Base())
177*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "output file path", "c.conf", p.outputFilePaths[2].Base())
178*333d2b36SAndroid Build Coastguard Worker}
179*333d2b36SAndroid Build Coastguard Worker
180*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcDstsSrcGlobDstsTooShort(t *testing.T) {
181*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.
182*333d2b36SAndroid Build Coastguard Worker		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("Must have one entry in dsts per source file")).
183*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
184*333d2b36SAndroid Build Coastguard Worker			prebuilt_etc {
185*333d2b36SAndroid Build Coastguard Worker				name: "foo",
186*333d2b36SAndroid Build Coastguard Worker				srcs: ["*.conf"],
187*333d2b36SAndroid Build Coastguard Worker				dsts: ["a.conf", "b.conf"],
188*333d2b36SAndroid Build Coastguard Worker			}
189*333d2b36SAndroid Build Coastguard Worker		`)
190*333d2b36SAndroid Build Coastguard Worker}
191*333d2b36SAndroid Build Coastguard Worker
192*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcDstsSrcGlobDstsTooLong(t *testing.T) {
193*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.
194*333d2b36SAndroid Build Coastguard Worker		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("Must have one entry in dsts per source file")).
195*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
196*333d2b36SAndroid Build Coastguard Worker			prebuilt_etc {
197*333d2b36SAndroid Build Coastguard Worker				name: "foo",
198*333d2b36SAndroid Build Coastguard Worker				srcs: ["*.conf"],
199*333d2b36SAndroid Build Coastguard Worker				dsts: ["a.conf", "b.conf", "c.conf", "d.conf"],
200*333d2b36SAndroid Build Coastguard Worker			}
201*333d2b36SAndroid Build Coastguard Worker		`)
202*333d2b36SAndroid Build Coastguard Worker}
203*333d2b36SAndroid Build Coastguard Worker
204*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcCannotDstsWithSrc(t *testing.T) {
205*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.
206*333d2b36SAndroid Build Coastguard Worker		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("dsts is set. Must use srcs")).
207*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
208*333d2b36SAndroid Build Coastguard Worker			prebuilt_etc {
209*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
210*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
211*333d2b36SAndroid Build Coastguard Worker				dsts: ["a.conf"],
212*333d2b36SAndroid Build Coastguard Worker			}
213*333d2b36SAndroid Build Coastguard Worker		`)
214*333d2b36SAndroid Build Coastguard Worker}
215*333d2b36SAndroid Build Coastguard Worker
216*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcCannotDstsWithFilenameFromSrc(t *testing.T) {
217*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.
218*333d2b36SAndroid Build Coastguard Worker		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("dsts is set. Cannot set filename_from_src")).
219*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
220*333d2b36SAndroid Build Coastguard Worker			prebuilt_etc {
221*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
222*333d2b36SAndroid Build Coastguard Worker				srcs: ["foo.conf"],
223*333d2b36SAndroid Build Coastguard Worker				dsts: ["a.conf"],
224*333d2b36SAndroid Build Coastguard Worker				filename_from_src: true,
225*333d2b36SAndroid Build Coastguard Worker			}
226*333d2b36SAndroid Build Coastguard Worker		`)
227*333d2b36SAndroid Build Coastguard Worker}
228*333d2b36SAndroid Build Coastguard Worker
229*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcAndroidMk(t *testing.T) {
230*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
231*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
232*333d2b36SAndroid Build Coastguard Worker			name: "foo",
233*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
234*333d2b36SAndroid Build Coastguard Worker			owner: "abc",
235*333d2b36SAndroid Build Coastguard Worker			filename_from_src: true,
236*333d2b36SAndroid Build Coastguard Worker			required: ["modA", "moduleB"],
237*333d2b36SAndroid Build Coastguard Worker			host_required: ["hostModA", "hostModB"],
238*333d2b36SAndroid Build Coastguard Worker			target_required: ["targetModA"],
239*333d2b36SAndroid Build Coastguard Worker		}
240*333d2b36SAndroid Build Coastguard Worker	`)
241*333d2b36SAndroid Build Coastguard Worker
242*333d2b36SAndroid Build Coastguard Worker	expected := map[string][]string{
243*333d2b36SAndroid Build Coastguard Worker		"LOCAL_MODULE":                  {"foo"},
244*333d2b36SAndroid Build Coastguard Worker		"LOCAL_MODULE_CLASS":            {"ETC"},
245*333d2b36SAndroid Build Coastguard Worker		"LOCAL_MODULE_OWNER":            {"abc"},
246*333d2b36SAndroid Build Coastguard Worker		"LOCAL_INSTALLED_MODULE_STEM":   {"foo.conf"},
247*333d2b36SAndroid Build Coastguard Worker		"LOCAL_REQUIRED_MODULES":        {"modA", "moduleB"},
248*333d2b36SAndroid Build Coastguard Worker		"LOCAL_HOST_REQUIRED_MODULES":   {"hostModA", "hostModB"},
249*333d2b36SAndroid Build Coastguard Worker		"LOCAL_TARGET_REQUIRED_MODULES": {"targetModA"},
250*333d2b36SAndroid Build Coastguard Worker		"LOCAL_SOONG_MODULE_TYPE":       {"prebuilt_etc"},
251*333d2b36SAndroid Build Coastguard Worker	}
252*333d2b36SAndroid Build Coastguard Worker
253*333d2b36SAndroid Build Coastguard Worker	mod := result.Module("foo", "android_arm64_armv8-a").(*PrebuiltEtc)
254*333d2b36SAndroid Build Coastguard Worker	entries := android.AndroidMkEntriesForTest(t, result.TestContext, mod)[0]
255*333d2b36SAndroid Build Coastguard Worker	for k, expectedValue := range expected {
256*333d2b36SAndroid Build Coastguard Worker		if value, ok := entries.EntryMap[k]; ok {
257*333d2b36SAndroid Build Coastguard Worker			android.AssertDeepEquals(t, k, expectedValue, value)
258*333d2b36SAndroid Build Coastguard Worker		} else {
259*333d2b36SAndroid Build Coastguard Worker			t.Errorf("No %s defined, saw %q", k, entries.EntryMap)
260*333d2b36SAndroid Build Coastguard Worker		}
261*333d2b36SAndroid Build Coastguard Worker	}
262*333d2b36SAndroid Build Coastguard Worker}
263*333d2b36SAndroid Build Coastguard Worker
264*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcRelativeInstallPathInstallDirPath(t *testing.T) {
265*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
266*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
267*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
268*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
269*333d2b36SAndroid Build Coastguard Worker			relative_install_path: "bar",
270*333d2b36SAndroid Build Coastguard Worker		}
271*333d2b36SAndroid Build Coastguard Worker	`)
272*333d2b36SAndroid Build Coastguard Worker
273*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
274*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/etc/bar"
275*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
276*333d2b36SAndroid Build Coastguard Worker}
277*333d2b36SAndroid Build Coastguard Worker
278*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcCannotSetRelativeInstallPathAndSubDir(t *testing.T) {
279*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.
280*333d2b36SAndroid Build Coastguard Worker		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("relative_install_path is set. Cannot set sub_dir")).
281*333d2b36SAndroid Build Coastguard Worker		RunTestWithBp(t, `
282*333d2b36SAndroid Build Coastguard Worker			prebuilt_etc {
283*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
284*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
285*333d2b36SAndroid Build Coastguard Worker				sub_dir: "bar",
286*333d2b36SAndroid Build Coastguard Worker				relative_install_path: "bar",
287*333d2b36SAndroid Build Coastguard Worker			}
288*333d2b36SAndroid Build Coastguard Worker		`)
289*333d2b36SAndroid Build Coastguard Worker}
290*333d2b36SAndroid Build Coastguard Worker
291*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcHost(t *testing.T) {
292*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
293*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc_host {
294*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
295*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
296*333d2b36SAndroid Build Coastguard Worker		}
297*333d2b36SAndroid Build Coastguard Worker	`)
298*333d2b36SAndroid Build Coastguard Worker
299*333d2b36SAndroid Build Coastguard Worker	buildOS := result.Config.BuildOS.String()
300*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", buildOS+"_common").(*PrebuiltEtc)
301*333d2b36SAndroid Build Coastguard Worker	if !p.Host() {
302*333d2b36SAndroid Build Coastguard Worker		t.Errorf("host bit is not set for a prebuilt_etc_host module.")
303*333d2b36SAndroid Build Coastguard Worker	}
304*333d2b36SAndroid Build Coastguard Worker}
305*333d2b36SAndroid Build Coastguard Worker
306*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcAllowMissingDependencies(t *testing.T) {
307*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
308*333d2b36SAndroid Build Coastguard Worker		prepareForPrebuiltEtcTest,
309*333d2b36SAndroid Build Coastguard Worker		android.PrepareForTestDisallowNonExistentPaths,
310*333d2b36SAndroid Build Coastguard Worker		android.FixtureModifyConfig(
311*333d2b36SAndroid Build Coastguard Worker			func(config android.Config) {
312*333d2b36SAndroid Build Coastguard Worker				config.TestProductVariables.Allow_missing_dependencies = proptools.BoolPtr(true)
313*333d2b36SAndroid Build Coastguard Worker			}),
314*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
315*333d2b36SAndroid Build Coastguard Worker		prebuilt_etc {
316*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
317*333d2b36SAndroid Build Coastguard Worker			filename_from_src: true,
318*333d2b36SAndroid Build Coastguard Worker			arch: {
319*333d2b36SAndroid Build Coastguard Worker				x86: {
320*333d2b36SAndroid Build Coastguard Worker					src: "x86.conf",
321*333d2b36SAndroid Build Coastguard Worker				},
322*333d2b36SAndroid Build Coastguard Worker			},
323*333d2b36SAndroid Build Coastguard Worker		}
324*333d2b36SAndroid Build Coastguard Worker	`)
325*333d2b36SAndroid Build Coastguard Worker
326*333d2b36SAndroid Build Coastguard Worker	android.AssertStringEquals(t, "expected error rule", "android/soong/android.Error",
327*333d2b36SAndroid Build Coastguard Worker		result.ModuleForTests("foo.conf", "android_arm64_armv8-a").Output("foo.conf").Rule.String())
328*333d2b36SAndroid Build Coastguard Worker}
329*333d2b36SAndroid Build Coastguard Worker
330*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltRootInstallDirPath(t *testing.T) {
331*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
332*333d2b36SAndroid Build Coastguard Worker		prebuilt_root {
333*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
334*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
335*333d2b36SAndroid Build Coastguard Worker			filename: "foo.conf",
336*333d2b36SAndroid Build Coastguard Worker		}
337*333d2b36SAndroid Build Coastguard Worker	`)
338*333d2b36SAndroid Build Coastguard Worker
339*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
340*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system"
341*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
342*333d2b36SAndroid Build Coastguard Worker}
343*333d2b36SAndroid Build Coastguard Worker
344*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltRootInstallDirPathValidate(t *testing.T) {
345*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("filename cannot contain separator")).RunTestWithBp(t, `
346*333d2b36SAndroid Build Coastguard Worker		prebuilt_root {
347*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
348*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
349*333d2b36SAndroid Build Coastguard Worker			filename: "foo/bar.conf",
350*333d2b36SAndroid Build Coastguard Worker		}
351*333d2b36SAndroid Build Coastguard Worker	`)
352*333d2b36SAndroid Build Coastguard Worker}
353*333d2b36SAndroid Build Coastguard Worker
354*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltAvbInstallDirPath(t *testing.T) {
355*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
356*333d2b36SAndroid Build Coastguard Worker		prebuilt_avb {
357*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
358*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
359*333d2b36SAndroid Build Coastguard Worker			filename: "foo.conf",
360*333d2b36SAndroid Build Coastguard Worker			//recovery: true,
361*333d2b36SAndroid Build Coastguard Worker		}
362*333d2b36SAndroid Build Coastguard Worker	`)
363*333d2b36SAndroid Build Coastguard Worker
364*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
365*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/root/avb"
366*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
367*333d2b36SAndroid Build Coastguard Worker}
368*333d2b36SAndroid Build Coastguard Worker
369*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltAvdInstallDirPathValidate(t *testing.T) {
370*333d2b36SAndroid Build Coastguard Worker	prepareForPrebuiltEtcTest.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern("filename cannot contain separator")).RunTestWithBp(t, `
371*333d2b36SAndroid Build Coastguard Worker		prebuilt_avb {
372*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
373*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
374*333d2b36SAndroid Build Coastguard Worker			filename: "foo/bar.conf",
375*333d2b36SAndroid Build Coastguard Worker		}
376*333d2b36SAndroid Build Coastguard Worker	`)
377*333d2b36SAndroid Build Coastguard Worker}
378*333d2b36SAndroid Build Coastguard Worker
379*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltUserShareInstallDirPath(t *testing.T) {
380*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
381*333d2b36SAndroid Build Coastguard Worker		prebuilt_usr_share {
382*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
383*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
384*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
385*333d2b36SAndroid Build Coastguard Worker		}
386*333d2b36SAndroid Build Coastguard Worker	`)
387*333d2b36SAndroid Build Coastguard Worker
388*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
389*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/usr/share/bar"
390*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
391*333d2b36SAndroid Build Coastguard Worker}
392*333d2b36SAndroid Build Coastguard Worker
393*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltUserShareHostInstallDirPath(t *testing.T) {
394*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
395*333d2b36SAndroid Build Coastguard Worker		prebuilt_usr_share_host {
396*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
397*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
398*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
399*333d2b36SAndroid Build Coastguard Worker		}
400*333d2b36SAndroid Build Coastguard Worker	`)
401*333d2b36SAndroid Build Coastguard Worker
402*333d2b36SAndroid Build Coastguard Worker	buildOS := result.Config.BuildOS.String()
403*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", buildOS+"_common").(*PrebuiltEtc)
404*333d2b36SAndroid Build Coastguard Worker	expected := filepath.Join("out/soong/host", result.Config.PrebuiltOS(), "usr", "share", "bar")
405*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
406*333d2b36SAndroid Build Coastguard Worker}
407*333d2b36SAndroid Build Coastguard Worker
408*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltPrebuiltUserHyphenDataInstallDirPath(t *testing.T) {
409*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
410*333d2b36SAndroid Build Coastguard Worker	prebuilt_usr_hyphendata {
411*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
412*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
413*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
414*333d2b36SAndroid Build Coastguard Worker		}
415*333d2b36SAndroid Build Coastguard Worker	`)
416*333d2b36SAndroid Build Coastguard Worker
417*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
418*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/usr/hyphen-data/bar"
419*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
420*333d2b36SAndroid Build Coastguard Worker}
421*333d2b36SAndroid Build Coastguard Worker
422*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltPrebuiltUserKeyLayoutInstallDirPath(t *testing.T) {
423*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
424*333d2b36SAndroid Build Coastguard Worker	prebuilt_usr_keylayout {
425*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
426*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
427*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
428*333d2b36SAndroid Build Coastguard Worker		}
429*333d2b36SAndroid Build Coastguard Worker	`)
430*333d2b36SAndroid Build Coastguard Worker
431*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
432*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/usr/keylayout/bar"
433*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
434*333d2b36SAndroid Build Coastguard Worker}
435*333d2b36SAndroid Build Coastguard Worker
436*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltPrebuiltUserKeyCharsInstallDirPath(t *testing.T) {
437*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
438*333d2b36SAndroid Build Coastguard Worker	prebuilt_usr_keychars {
439*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
440*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
441*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
442*333d2b36SAndroid Build Coastguard Worker		}
443*333d2b36SAndroid Build Coastguard Worker	`)
444*333d2b36SAndroid Build Coastguard Worker
445*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
446*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/usr/keychars/bar"
447*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
448*333d2b36SAndroid Build Coastguard Worker}
449*333d2b36SAndroid Build Coastguard Worker
450*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltPrebuiltUserIdcInstallDirPath(t *testing.T) {
451*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
452*333d2b36SAndroid Build Coastguard Worker	prebuilt_usr_idc {
453*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
454*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
455*333d2b36SAndroid Build Coastguard Worker			sub_dir: "bar",
456*333d2b36SAndroid Build Coastguard Worker		}
457*333d2b36SAndroid Build Coastguard Worker	`)
458*333d2b36SAndroid Build Coastguard Worker
459*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
460*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/usr/idc/bar"
461*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
462*333d2b36SAndroid Build Coastguard Worker}
463*333d2b36SAndroid Build Coastguard Worker
464*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltFontInstallDirPath(t *testing.T) {
465*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
466*333d2b36SAndroid Build Coastguard Worker		prebuilt_font {
467*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
468*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
469*333d2b36SAndroid Build Coastguard Worker		}
470*333d2b36SAndroid Build Coastguard Worker	`)
471*333d2b36SAndroid Build Coastguard Worker
472*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_common").(*PrebuiltEtc)
473*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/fonts"
474*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
475*333d2b36SAndroid Build Coastguard Worker}
476*333d2b36SAndroid Build Coastguard Worker
477*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltOverlayInstallDirPath(t *testing.T) {
478*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
479*333d2b36SAndroid Build Coastguard Worker		prebuilt_overlay {
480*333d2b36SAndroid Build Coastguard Worker			name: "foo.conf",
481*333d2b36SAndroid Build Coastguard Worker			src: "foo.conf",
482*333d2b36SAndroid Build Coastguard Worker		}
483*333d2b36SAndroid Build Coastguard Worker	`)
484*333d2b36SAndroid Build Coastguard Worker
485*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
486*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/system/overlay"
487*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
488*333d2b36SAndroid Build Coastguard Worker}
489*333d2b36SAndroid Build Coastguard Worker
490*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltFirmwareDirPath(t *testing.T) {
491*333d2b36SAndroid Build Coastguard Worker	targetPath := "out/soong/target/product/test_device"
492*333d2b36SAndroid Build Coastguard Worker	tests := []struct {
493*333d2b36SAndroid Build Coastguard Worker		description  string
494*333d2b36SAndroid Build Coastguard Worker		config       string
495*333d2b36SAndroid Build Coastguard Worker		expectedPath string
496*333d2b36SAndroid Build Coastguard Worker	}{{
497*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: system firmware",
498*333d2b36SAndroid Build Coastguard Worker		config: `
499*333d2b36SAndroid Build Coastguard Worker			prebuilt_firmware {
500*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
501*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
502*333d2b36SAndroid Build Coastguard Worker			}`,
503*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "system/etc/firmware"),
504*333d2b36SAndroid Build Coastguard Worker	}, {
505*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: vendor firmware",
506*333d2b36SAndroid Build Coastguard Worker		config: `
507*333d2b36SAndroid Build Coastguard Worker			prebuilt_firmware {
508*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
509*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
510*333d2b36SAndroid Build Coastguard Worker				soc_specific: true,
511*333d2b36SAndroid Build Coastguard Worker				sub_dir: "sub_dir",
512*333d2b36SAndroid Build Coastguard Worker			}`,
513*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "vendor/firmware/sub_dir"),
514*333d2b36SAndroid Build Coastguard Worker	}}
515*333d2b36SAndroid Build Coastguard Worker	for _, tt := range tests {
516*333d2b36SAndroid Build Coastguard Worker		t.Run(tt.description, func(t *testing.T) {
517*333d2b36SAndroid Build Coastguard Worker			result := prepareForPrebuiltEtcTest.RunTestWithBp(t, tt.config)
518*333d2b36SAndroid Build Coastguard Worker			p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
519*333d2b36SAndroid Build Coastguard Worker			android.AssertPathRelativeToTopEquals(t, "install dir", tt.expectedPath, p.installDirPaths[0])
520*333d2b36SAndroid Build Coastguard Worker		})
521*333d2b36SAndroid Build Coastguard Worker	}
522*333d2b36SAndroid Build Coastguard Worker}
523*333d2b36SAndroid Build Coastguard Worker
524*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltDSPDirPath(t *testing.T) {
525*333d2b36SAndroid Build Coastguard Worker	targetPath := "out/soong/target/product/test_device"
526*333d2b36SAndroid Build Coastguard Worker	tests := []struct {
527*333d2b36SAndroid Build Coastguard Worker		description  string
528*333d2b36SAndroid Build Coastguard Worker		config       string
529*333d2b36SAndroid Build Coastguard Worker		expectedPath string
530*333d2b36SAndroid Build Coastguard Worker	}{{
531*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: system dsp",
532*333d2b36SAndroid Build Coastguard Worker		config: `
533*333d2b36SAndroid Build Coastguard Worker			prebuilt_dsp {
534*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
535*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
536*333d2b36SAndroid Build Coastguard Worker			}`,
537*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "system/etc/dsp"),
538*333d2b36SAndroid Build Coastguard Worker	}, {
539*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: vendor dsp",
540*333d2b36SAndroid Build Coastguard Worker		config: `
541*333d2b36SAndroid Build Coastguard Worker			prebuilt_dsp {
542*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
543*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
544*333d2b36SAndroid Build Coastguard Worker				soc_specific: true,
545*333d2b36SAndroid Build Coastguard Worker				sub_dir: "sub_dir",
546*333d2b36SAndroid Build Coastguard Worker			}`,
547*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "vendor/dsp/sub_dir"),
548*333d2b36SAndroid Build Coastguard Worker	}}
549*333d2b36SAndroid Build Coastguard Worker	for _, tt := range tests {
550*333d2b36SAndroid Build Coastguard Worker		t.Run(tt.description, func(t *testing.T) {
551*333d2b36SAndroid Build Coastguard Worker			result := prepareForPrebuiltEtcTest.RunTestWithBp(t, tt.config)
552*333d2b36SAndroid Build Coastguard Worker			p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
553*333d2b36SAndroid Build Coastguard Worker			android.AssertPathRelativeToTopEquals(t, "install dir", tt.expectedPath, p.installDirPaths[0])
554*333d2b36SAndroid Build Coastguard Worker		})
555*333d2b36SAndroid Build Coastguard Worker	}
556*333d2b36SAndroid Build Coastguard Worker}
557*333d2b36SAndroid Build Coastguard Worker
558*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltRFSADirPath(t *testing.T) {
559*333d2b36SAndroid Build Coastguard Worker	targetPath := "out/soong/target/product/test_device"
560*333d2b36SAndroid Build Coastguard Worker	tests := []struct {
561*333d2b36SAndroid Build Coastguard Worker		description  string
562*333d2b36SAndroid Build Coastguard Worker		config       string
563*333d2b36SAndroid Build Coastguard Worker		expectedPath string
564*333d2b36SAndroid Build Coastguard Worker	}{{
565*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: system rfsa",
566*333d2b36SAndroid Build Coastguard Worker		config: `
567*333d2b36SAndroid Build Coastguard Worker			prebuilt_rfsa {
568*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
569*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
570*333d2b36SAndroid Build Coastguard Worker			}`,
571*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "system/lib/rfsa"),
572*333d2b36SAndroid Build Coastguard Worker	}, {
573*333d2b36SAndroid Build Coastguard Worker		description: "prebuilt: vendor rfsa",
574*333d2b36SAndroid Build Coastguard Worker		config: `
575*333d2b36SAndroid Build Coastguard Worker			prebuilt_rfsa {
576*333d2b36SAndroid Build Coastguard Worker				name: "foo.conf",
577*333d2b36SAndroid Build Coastguard Worker				src: "foo.conf",
578*333d2b36SAndroid Build Coastguard Worker				soc_specific: true,
579*333d2b36SAndroid Build Coastguard Worker				sub_dir: "sub_dir",
580*333d2b36SAndroid Build Coastguard Worker			}`,
581*333d2b36SAndroid Build Coastguard Worker		expectedPath: filepath.Join(targetPath, "vendor/lib/rfsa/sub_dir"),
582*333d2b36SAndroid Build Coastguard Worker	}}
583*333d2b36SAndroid Build Coastguard Worker	for _, tt := range tests {
584*333d2b36SAndroid Build Coastguard Worker		t.Run(tt.description, func(t *testing.T) {
585*333d2b36SAndroid Build Coastguard Worker			result := prepareForPrebuiltEtcTest.RunTestWithBp(t, tt.config)
586*333d2b36SAndroid Build Coastguard Worker			p := result.Module("foo.conf", "android_arm64_armv8-a").(*PrebuiltEtc)
587*333d2b36SAndroid Build Coastguard Worker			android.AssertPathRelativeToTopEquals(t, "install dir", tt.expectedPath, p.installDirPaths[0])
588*333d2b36SAndroid Build Coastguard Worker		})
589*333d2b36SAndroid Build Coastguard Worker	}
590*333d2b36SAndroid Build Coastguard Worker}
591*333d2b36SAndroid Build Coastguard Worker
592*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltMediaAutoDirPath(t *testing.T) {
593*333d2b36SAndroid Build Coastguard Worker	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
594*333d2b36SAndroid Build Coastguard Worker		prebuilt_media {
595*333d2b36SAndroid Build Coastguard Worker			name: "foo",
596*333d2b36SAndroid Build Coastguard Worker			src: "Alarm_Beep_01.ogg",
597*333d2b36SAndroid Build Coastguard Worker			product_specific: true,
598*333d2b36SAndroid Build Coastguard Worker			relative_install_path: "alarms"
599*333d2b36SAndroid Build Coastguard Worker		}
600*333d2b36SAndroid Build Coastguard Worker	`)
601*333d2b36SAndroid Build Coastguard Worker
602*333d2b36SAndroid Build Coastguard Worker	p := result.Module("foo", "android_common").(*PrebuiltEtc)
603*333d2b36SAndroid Build Coastguard Worker	expected := "out/soong/target/product/test_device/product/media/alarms"
604*333d2b36SAndroid Build Coastguard Worker	android.AssertPathRelativeToTopEquals(t, "install dir", expected, p.installDirPaths[0])
605*333d2b36SAndroid Build Coastguard Worker}
606