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