1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 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 fsgen 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 19*333d2b36SAndroid Build Coastguard Worker "android/soong/etc" 20*333d2b36SAndroid Build Coastguard Worker "android/soong/filesystem" 21*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 22*333d2b36SAndroid Build Coastguard Worker "testing" 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 25*333d2b36SAndroid Build Coastguard Worker) 26*333d2b36SAndroid Build Coastguard Worker 27*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithFsgenBuildComponents = android.FixtureRegisterWithContext(registerBuildComponents) 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Workerfunc TestFileSystemCreatorSystemImageProps(t *testing.T) { 30*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 31*333d2b36SAndroid Build Coastguard Worker android.PrepareForIntegrationTestWithAndroid, 32*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidBuildComponents, 33*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAllowMissingDependencies, 34*333d2b36SAndroid Build Coastguard Worker filesystem.PrepareForTestWithFilesystemBuildComponents, 35*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFsgenBuildComponents, 36*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 37*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.BoardAvbEnable = true 38*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.PartitionQualifiedVariables = 39*333d2b36SAndroid Build Coastguard Worker map[string]android.PartitionQualifiedVariablesType{ 40*333d2b36SAndroid Build Coastguard Worker "system": { 41*333d2b36SAndroid Build Coastguard Worker BoardAvbKeyPath: "external/avb/test/data/testkey_rsa4096.pem", 42*333d2b36SAndroid Build Coastguard Worker BoardAvbAlgorithm: "SHA256_RSA4096", 43*333d2b36SAndroid Build Coastguard Worker BoardAvbRollbackIndex: "0", 44*333d2b36SAndroid Build Coastguard Worker BoardFileSystemType: "ext4", 45*333d2b36SAndroid Build Coastguard Worker }, 46*333d2b36SAndroid Build Coastguard Worker } 47*333d2b36SAndroid Build Coastguard Worker }), 48*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 49*333d2b36SAndroid Build Coastguard Worker "external/avb/test/data/testkey_rsa4096.pem": nil, 50*333d2b36SAndroid Build Coastguard Worker "external/avb/test/Android.bp": []byte(` 51*333d2b36SAndroid Build Coastguard Worker filegroup { 52*333d2b36SAndroid Build Coastguard Worker name: "avb_testkey_rsa4096", 53*333d2b36SAndroid Build Coastguard Worker srcs: ["data/testkey_rsa4096.pem"], 54*333d2b36SAndroid Build Coastguard Worker } 55*333d2b36SAndroid Build Coastguard Worker `), 56*333d2b36SAndroid Build Coastguard Worker "build/soong/fsgen/Android.bp": []byte(` 57*333d2b36SAndroid Build Coastguard Worker soong_filesystem_creator { 58*333d2b36SAndroid Build Coastguard Worker name: "foo", 59*333d2b36SAndroid Build Coastguard Worker } 60*333d2b36SAndroid Build Coastguard Worker `), 61*333d2b36SAndroid Build Coastguard Worker }), 62*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 63*333d2b36SAndroid Build Coastguard Worker 64*333d2b36SAndroid Build Coastguard Worker fooSystem := result.ModuleForTests("test_product_generated_system_image", "android_common").Module().(interface { 65*333d2b36SAndroid Build Coastguard Worker FsProps() filesystem.FilesystemProperties 66*333d2b36SAndroid Build Coastguard Worker }) 67*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 68*333d2b36SAndroid Build Coastguard Worker t, 69*333d2b36SAndroid Build Coastguard Worker "Property expected to match the product variable 'BOARD_AVB_ENABLE'", 70*333d2b36SAndroid Build Coastguard Worker true, 71*333d2b36SAndroid Build Coastguard Worker proptools.Bool(fooSystem.FsProps().Use_avb), 72*333d2b36SAndroid Build Coastguard Worker ) 73*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals( 74*333d2b36SAndroid Build Coastguard Worker t, 75*333d2b36SAndroid Build Coastguard Worker "Property the avb_private_key property to be set to the existing filegroup", 76*333d2b36SAndroid Build Coastguard Worker ":avb_testkey_rsa4096", 77*333d2b36SAndroid Build Coastguard Worker proptools.String(fooSystem.FsProps().Avb_private_key), 78*333d2b36SAndroid Build Coastguard Worker ) 79*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals( 80*333d2b36SAndroid Build Coastguard Worker t, 81*333d2b36SAndroid Build Coastguard Worker "Property expected to match the product variable 'BOARD_AVB_ALGORITHM'", 82*333d2b36SAndroid Build Coastguard Worker "SHA256_RSA4096", 83*333d2b36SAndroid Build Coastguard Worker proptools.String(fooSystem.FsProps().Avb_algorithm), 84*333d2b36SAndroid Build Coastguard Worker ) 85*333d2b36SAndroid Build Coastguard Worker android.AssertIntEquals( 86*333d2b36SAndroid Build Coastguard Worker t, 87*333d2b36SAndroid Build Coastguard Worker "Property expected to match the product variable 'BOARD_AVB_SYSTEM_ROLLBACK_INDEX'", 88*333d2b36SAndroid Build Coastguard Worker 0, 89*333d2b36SAndroid Build Coastguard Worker proptools.Int(fooSystem.FsProps().Rollback_index), 90*333d2b36SAndroid Build Coastguard Worker ) 91*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals( 92*333d2b36SAndroid Build Coastguard Worker t, 93*333d2b36SAndroid Build Coastguard Worker "Property expected to match the product variable 'BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE'", 94*333d2b36SAndroid Build Coastguard Worker "ext4", 95*333d2b36SAndroid Build Coastguard Worker proptools.String(fooSystem.FsProps().Type), 96*333d2b36SAndroid Build Coastguard Worker ) 97*333d2b36SAndroid Build Coastguard Worker} 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Workerfunc TestFileSystemCreatorSetPartitionDeps(t *testing.T) { 100*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 101*333d2b36SAndroid Build Coastguard Worker android.PrepareForIntegrationTestWithAndroid, 102*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidBuildComponents, 103*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAllowMissingDependencies, 104*333d2b36SAndroid Build Coastguard Worker filesystem.PrepareForTestWithFilesystemBuildComponents, 105*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFsgenBuildComponents, 106*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaBuildComponents, 107*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaDefaultModules, 108*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 109*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.ProductPackages = []string{"bar", "baz"} 110*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.PartitionQualifiedVariables = 111*333d2b36SAndroid Build Coastguard Worker map[string]android.PartitionQualifiedVariablesType{ 112*333d2b36SAndroid Build Coastguard Worker "system": { 113*333d2b36SAndroid Build Coastguard Worker BoardFileSystemType: "ext4", 114*333d2b36SAndroid Build Coastguard Worker }, 115*333d2b36SAndroid Build Coastguard Worker } 116*333d2b36SAndroid Build Coastguard Worker }), 117*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 118*333d2b36SAndroid Build Coastguard Worker "external/avb/test/data/testkey_rsa4096.pem": nil, 119*333d2b36SAndroid Build Coastguard Worker "build/soong/fsgen/Android.bp": []byte(` 120*333d2b36SAndroid Build Coastguard Worker soong_filesystem_creator { 121*333d2b36SAndroid Build Coastguard Worker name: "foo", 122*333d2b36SAndroid Build Coastguard Worker } 123*333d2b36SAndroid Build Coastguard Worker `), 124*333d2b36SAndroid Build Coastguard Worker }), 125*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 126*333d2b36SAndroid Build Coastguard Worker java_library { 127*333d2b36SAndroid Build Coastguard Worker name: "bar", 128*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 129*333d2b36SAndroid Build Coastguard Worker } 130*333d2b36SAndroid Build Coastguard Worker java_library { 131*333d2b36SAndroid Build Coastguard Worker name: "baz", 132*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 133*333d2b36SAndroid Build Coastguard Worker product_specific: true, 134*333d2b36SAndroid Build Coastguard Worker } 135*333d2b36SAndroid Build Coastguard Worker `) 136*333d2b36SAndroid Build Coastguard Worker 137*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 138*333d2b36SAndroid Build Coastguard Worker t, 139*333d2b36SAndroid Build Coastguard Worker "Generated system image expected to depend on system partition installed \"bar\"", 140*333d2b36SAndroid Build Coastguard Worker true, 141*333d2b36SAndroid Build Coastguard Worker java.CheckModuleHasDependency(t, result.TestContext, "test_product_generated_system_image", "android_common", "bar"), 142*333d2b36SAndroid Build Coastguard Worker ) 143*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 144*333d2b36SAndroid Build Coastguard Worker t, 145*333d2b36SAndroid Build Coastguard Worker "Generated system image expected to not depend on product partition installed \"baz\"", 146*333d2b36SAndroid Build Coastguard Worker false, 147*333d2b36SAndroid Build Coastguard Worker java.CheckModuleHasDependency(t, result.TestContext, "test_product_generated_system_image", "android_common", "baz"), 148*333d2b36SAndroid Build Coastguard Worker ) 149*333d2b36SAndroid Build Coastguard Worker} 150*333d2b36SAndroid Build Coastguard Worker 151*333d2b36SAndroid Build Coastguard Workerfunc TestFileSystemCreatorDepsWithNamespace(t *testing.T) { 152*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 153*333d2b36SAndroid Build Coastguard Worker android.PrepareForIntegrationTestWithAndroid, 154*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidBuildComponents, 155*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAllowMissingDependencies, 156*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithNamespace, 157*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithArchMutator, 158*333d2b36SAndroid Build Coastguard Worker filesystem.PrepareForTestWithFilesystemBuildComponents, 159*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFsgenBuildComponents, 160*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaBuildComponents, 161*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaDefaultModules, 162*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 163*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.ProductPackages = []string{"bar"} 164*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.NamespacesToExport = []string{"a/b"} 165*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.PartitionQualifiedVariables = 166*333d2b36SAndroid Build Coastguard Worker map[string]android.PartitionQualifiedVariablesType{ 167*333d2b36SAndroid Build Coastguard Worker "system": { 168*333d2b36SAndroid Build Coastguard Worker BoardFileSystemType: "ext4", 169*333d2b36SAndroid Build Coastguard Worker }, 170*333d2b36SAndroid Build Coastguard Worker } 171*333d2b36SAndroid Build Coastguard Worker }), 172*333d2b36SAndroid Build Coastguard Worker android.PrepareForNativeBridgeEnabled, 173*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 174*333d2b36SAndroid Build Coastguard Worker "external/avb/test/data/testkey_rsa4096.pem": nil, 175*333d2b36SAndroid Build Coastguard Worker "build/soong/fsgen/Android.bp": []byte(` 176*333d2b36SAndroid Build Coastguard Worker soong_filesystem_creator { 177*333d2b36SAndroid Build Coastguard Worker name: "foo", 178*333d2b36SAndroid Build Coastguard Worker } 179*333d2b36SAndroid Build Coastguard Worker `), 180*333d2b36SAndroid Build Coastguard Worker "a/b/Android.bp": []byte(` 181*333d2b36SAndroid Build Coastguard Worker soong_namespace{ 182*333d2b36SAndroid Build Coastguard Worker } 183*333d2b36SAndroid Build Coastguard Worker java_library { 184*333d2b36SAndroid Build Coastguard Worker name: "bar", 185*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 186*333d2b36SAndroid Build Coastguard Worker compile_multilib: "64", 187*333d2b36SAndroid Build Coastguard Worker } 188*333d2b36SAndroid Build Coastguard Worker `), 189*333d2b36SAndroid Build Coastguard Worker "c/d/Android.bp": []byte(` 190*333d2b36SAndroid Build Coastguard Worker soong_namespace{ 191*333d2b36SAndroid Build Coastguard Worker } 192*333d2b36SAndroid Build Coastguard Worker java_library { 193*333d2b36SAndroid Build Coastguard Worker name: "bar", 194*333d2b36SAndroid Build Coastguard Worker srcs: ["A.java"], 195*333d2b36SAndroid Build Coastguard Worker } 196*333d2b36SAndroid Build Coastguard Worker `), 197*333d2b36SAndroid Build Coastguard Worker }), 198*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 199*333d2b36SAndroid Build Coastguard Worker 200*333d2b36SAndroid Build Coastguard Worker var packagingProps android.PackagingProperties 201*333d2b36SAndroid Build Coastguard Worker for _, prop := range result.ModuleForTests("test_product_generated_system_image", "android_common").Module().GetProperties() { 202*333d2b36SAndroid Build Coastguard Worker if packagingPropStruct, ok := prop.(*android.PackagingProperties); ok { 203*333d2b36SAndroid Build Coastguard Worker packagingProps = *packagingPropStruct 204*333d2b36SAndroid Build Coastguard Worker } 205*333d2b36SAndroid Build Coastguard Worker } 206*333d2b36SAndroid Build Coastguard Worker moduleDeps := packagingProps.Multilib.Lib64.Deps 207*333d2b36SAndroid Build Coastguard Worker 208*333d2b36SAndroid Build Coastguard Worker eval := result.ModuleForTests("test_product_generated_system_image", "android_common").Module().ConfigurableEvaluator(android.PanickingConfigAndErrorContext(result.TestContext)) 209*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains( 210*333d2b36SAndroid Build Coastguard Worker t, 211*333d2b36SAndroid Build Coastguard Worker "Generated system image expected to depend on \"bar\" defined in \"a/b\" namespace", 212*333d2b36SAndroid Build Coastguard Worker moduleDeps.GetOrDefault(eval, nil), 213*333d2b36SAndroid Build Coastguard Worker "//a/b:bar", 214*333d2b36SAndroid Build Coastguard Worker ) 215*333d2b36SAndroid Build Coastguard Worker android.AssertStringListDoesNotContain( 216*333d2b36SAndroid Build Coastguard Worker t, 217*333d2b36SAndroid Build Coastguard Worker "Generated system image expected to not depend on \"bar\" defined in \"c/d\" namespace", 218*333d2b36SAndroid Build Coastguard Worker moduleDeps.GetOrDefault(eval, nil), 219*333d2b36SAndroid Build Coastguard Worker "//c/d:bar", 220*333d2b36SAndroid Build Coastguard Worker ) 221*333d2b36SAndroid Build Coastguard Worker} 222*333d2b36SAndroid Build Coastguard Worker 223*333d2b36SAndroid Build Coastguard Workerfunc TestRemoveOverriddenModulesFromDeps(t *testing.T) { 224*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 225*333d2b36SAndroid Build Coastguard Worker android.PrepareForIntegrationTestWithAndroid, 226*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidBuildComponents, 227*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAllowMissingDependencies, 228*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFsgenBuildComponents, 229*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaBuildComponents, 230*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 231*333d2b36SAndroid Build Coastguard Worker "external/avb/test/data/testkey_rsa4096.pem": nil, 232*333d2b36SAndroid Build Coastguard Worker "build/soong/fsgen/Android.bp": []byte(` 233*333d2b36SAndroid Build Coastguard Worker soong_filesystem_creator { 234*333d2b36SAndroid Build Coastguard Worker name: "foo", 235*333d2b36SAndroid Build Coastguard Worker } 236*333d2b36SAndroid Build Coastguard Worker `), 237*333d2b36SAndroid Build Coastguard Worker }), 238*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 239*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.ProductPackages = []string{"libfoo", "libbar"} 240*333d2b36SAndroid Build Coastguard Worker }), 241*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 242*333d2b36SAndroid Build Coastguard Workerjava_library { 243*333d2b36SAndroid Build Coastguard Worker name: "libfoo", 244*333d2b36SAndroid Build Coastguard Worker} 245*333d2b36SAndroid Build Coastguard Workerjava_library { 246*333d2b36SAndroid Build Coastguard Worker name: "libbar", 247*333d2b36SAndroid Build Coastguard Worker required: ["libbaz"], 248*333d2b36SAndroid Build Coastguard Worker} 249*333d2b36SAndroid Build Coastguard Workerjava_library { 250*333d2b36SAndroid Build Coastguard Worker name: "libbaz", 251*333d2b36SAndroid Build Coastguard Worker overrides: ["libfoo"], // overrides libfoo 252*333d2b36SAndroid Build Coastguard Worker} 253*333d2b36SAndroid Build Coastguard Worker `) 254*333d2b36SAndroid Build Coastguard Worker resolvedSystemDeps := result.TestContext.Config().Get(fsGenStateOnceKey).(*FsGenState).fsDeps["system"] 255*333d2b36SAndroid Build Coastguard Worker _, libFooInDeps := (*resolvedSystemDeps)["libfoo"] 256*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "libfoo should not appear in deps because it has been overridden by libbaz. The latter is a required dep of libbar, which is listed in PRODUCT_PACKAGES", false, libFooInDeps) 257*333d2b36SAndroid Build Coastguard Worker} 258*333d2b36SAndroid Build Coastguard Worker 259*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltEtcModuleGen(t *testing.T) { 260*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 261*333d2b36SAndroid Build Coastguard Worker android.PrepareForIntegrationTestWithAndroid, 262*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAndroidBuildComponents, 263*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithAllowMissingDependencies, 264*333d2b36SAndroid Build Coastguard Worker filesystem.PrepareForTestWithFilesystemBuildComponents, 265*333d2b36SAndroid Build Coastguard Worker prepareForTestWithFsgenBuildComponents, 266*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 267*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.ProductCopyFiles = []string{ 268*333d2b36SAndroid Build Coastguard Worker "frameworks/base/config/preloaded-classes:system/etc/preloaded-classes", 269*333d2b36SAndroid Build Coastguard Worker "frameworks/base/data/keyboards/Vendor_0079_Product_0011.kl:system/usr/keylayout/subdir/Vendor_0079_Product_0011.kl", 270*333d2b36SAndroid Build Coastguard Worker "frameworks/base/data/keyboards/Vendor_0079_Product_18d4.kl:system/usr/keylayout/subdir/Vendor_0079_Product_18d4.kl", 271*333d2b36SAndroid Build Coastguard Worker "some/non/existing/file.txt:system/etc/file.txt", 272*333d2b36SAndroid Build Coastguard Worker "device/sample/etc/apns-full-conf.xml:product/etc/apns-conf.xml:google", 273*333d2b36SAndroid Build Coastguard Worker "device/sample/etc/apns-full-conf.xml:product/etc/apns-conf-2.xml", 274*333d2b36SAndroid Build Coastguard Worker } 275*333d2b36SAndroid Build Coastguard Worker config.TestProductVariables.PartitionVarsForSoongMigrationOnlyDoNotUse.PartitionQualifiedVariables = 276*333d2b36SAndroid Build Coastguard Worker map[string]android.PartitionQualifiedVariablesType{ 277*333d2b36SAndroid Build Coastguard Worker "system": { 278*333d2b36SAndroid Build Coastguard Worker BoardFileSystemType: "ext4", 279*333d2b36SAndroid Build Coastguard Worker }, 280*333d2b36SAndroid Build Coastguard Worker } 281*333d2b36SAndroid Build Coastguard Worker }), 282*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 283*333d2b36SAndroid Build Coastguard Worker "external/avb/test/data/testkey_rsa4096.pem": nil, 284*333d2b36SAndroid Build Coastguard Worker "build/soong/fsgen/Android.bp": []byte(` 285*333d2b36SAndroid Build Coastguard Worker soong_filesystem_creator { 286*333d2b36SAndroid Build Coastguard Worker name: "foo", 287*333d2b36SAndroid Build Coastguard Worker } 288*333d2b36SAndroid Build Coastguard Worker `), 289*333d2b36SAndroid Build Coastguard Worker "frameworks/base/config/preloaded-classes": nil, 290*333d2b36SAndroid Build Coastguard Worker "frameworks/base/data/keyboards/Vendor_0079_Product_0011.kl": nil, 291*333d2b36SAndroid Build Coastguard Worker "frameworks/base/data/keyboards/Vendor_0079_Product_18d4.kl": nil, 292*333d2b36SAndroid Build Coastguard Worker "device/sample/etc/apns-full-conf.xml": nil, 293*333d2b36SAndroid Build Coastguard Worker }), 294*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 295*333d2b36SAndroid Build Coastguard Worker 296*333d2b36SAndroid Build Coastguard Worker checkModuleProp := func(m android.Module, matcher func(actual interface{}) bool) bool { 297*333d2b36SAndroid Build Coastguard Worker for _, prop := range m.GetProperties() { 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker if matcher(prop) { 300*333d2b36SAndroid Build Coastguard Worker return true 301*333d2b36SAndroid Build Coastguard Worker } 302*333d2b36SAndroid Build Coastguard Worker } 303*333d2b36SAndroid Build Coastguard Worker return false 304*333d2b36SAndroid Build Coastguard Worker } 305*333d2b36SAndroid Build Coastguard Worker 306*333d2b36SAndroid Build Coastguard Worker // check generated prebuilt_* module type install path and install partition 307*333d2b36SAndroid Build Coastguard Worker generatedModule := result.ModuleForTests("system-frameworks_base_config-etc-0", "android_arm64_armv8-a").Module() 308*333d2b36SAndroid Build Coastguard Worker etcModule, _ := generatedModule.(*etc.PrebuiltEtc) 309*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals( 310*333d2b36SAndroid Build Coastguard Worker t, 311*333d2b36SAndroid Build Coastguard Worker "module expected to have etc install path", 312*333d2b36SAndroid Build Coastguard Worker "etc", 313*333d2b36SAndroid Build Coastguard Worker etcModule.BaseDir(), 314*333d2b36SAndroid Build Coastguard Worker ) 315*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 316*333d2b36SAndroid Build Coastguard Worker t, 317*333d2b36SAndroid Build Coastguard Worker "module expected to be installed in system partition", 318*333d2b36SAndroid Build Coastguard Worker true, 319*333d2b36SAndroid Build Coastguard Worker !generatedModule.InstallInProduct() && 320*333d2b36SAndroid Build Coastguard Worker !generatedModule.InstallInVendor() && 321*333d2b36SAndroid Build Coastguard Worker !generatedModule.InstallInSystemExt(), 322*333d2b36SAndroid Build Coastguard Worker ) 323*333d2b36SAndroid Build Coastguard Worker 324*333d2b36SAndroid Build Coastguard Worker // check generated prebuilt_* module specifies correct relative_install_path property 325*333d2b36SAndroid Build Coastguard Worker generatedModule = result.ModuleForTests("system-frameworks_base_data_keyboards-usr_keylayout_subdir-0", "android_arm64_armv8-a").Module() 326*333d2b36SAndroid Build Coastguard Worker etcModule, _ = generatedModule.(*etc.PrebuiltEtc) 327*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals( 328*333d2b36SAndroid Build Coastguard Worker t, 329*333d2b36SAndroid Build Coastguard Worker "module expected to set correct relative_install_path properties", 330*333d2b36SAndroid Build Coastguard Worker "subdir", 331*333d2b36SAndroid Build Coastguard Worker etcModule.SubDir(), 332*333d2b36SAndroid Build Coastguard Worker ) 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker // check that prebuilt_* module is not generated for non existing source file 335*333d2b36SAndroid Build Coastguard Worker android.AssertPanicMessageContains( 336*333d2b36SAndroid Build Coastguard Worker t, 337*333d2b36SAndroid Build Coastguard Worker "prebuilt_* module not generated for non existing source file", 338*333d2b36SAndroid Build Coastguard Worker "failed to find module \"system-some_non_existing-etc-0\"", 339*333d2b36SAndroid Build Coastguard Worker func() { result.ModuleForTests("system-some_non_existing-etc-0", "android_arm64_armv8-a") }, 340*333d2b36SAndroid Build Coastguard Worker ) 341*333d2b36SAndroid Build Coastguard Worker 342*333d2b36SAndroid Build Coastguard Worker // check that duplicate src file can exist in PRODUCT_COPY_FILES and generates separate modules 343*333d2b36SAndroid Build Coastguard Worker generatedModule0 := result.ModuleForTests("product-device_sample_etc-etc-0", "android_arm64_armv8-a").Module() 344*333d2b36SAndroid Build Coastguard Worker generatedModule1 := result.ModuleForTests("product-device_sample_etc-etc-1", "android_arm64_armv8-a").Module() 345*333d2b36SAndroid Build Coastguard Worker 346*333d2b36SAndroid Build Coastguard Worker // check that generated prebuilt_* module sets correct srcs and dsts property 347*333d2b36SAndroid Build Coastguard Worker eval := generatedModule0.ConfigurableEvaluator(android.PanickingConfigAndErrorContext(result.TestContext)) 348*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 349*333d2b36SAndroid Build Coastguard Worker t, 350*333d2b36SAndroid Build Coastguard Worker "module expected to set correct srcs and dsts properties", 351*333d2b36SAndroid Build Coastguard Worker true, 352*333d2b36SAndroid Build Coastguard Worker checkModuleProp(generatedModule0, func(actual interface{}) bool { 353*333d2b36SAndroid Build Coastguard Worker if p, ok := actual.(*etc.PrebuiltEtcProperties); ok { 354*333d2b36SAndroid Build Coastguard Worker srcs := p.Srcs.GetOrDefault(eval, nil) 355*333d2b36SAndroid Build Coastguard Worker dsts := p.Dsts.GetOrDefault(eval, nil) 356*333d2b36SAndroid Build Coastguard Worker return len(srcs) == 1 && 357*333d2b36SAndroid Build Coastguard Worker srcs[0] == "apns-full-conf.xml" && 358*333d2b36SAndroid Build Coastguard Worker len(dsts) == 1 && 359*333d2b36SAndroid Build Coastguard Worker dsts[0] == "apns-conf.xml" 360*333d2b36SAndroid Build Coastguard Worker } 361*333d2b36SAndroid Build Coastguard Worker return false 362*333d2b36SAndroid Build Coastguard Worker }), 363*333d2b36SAndroid Build Coastguard Worker ) 364*333d2b36SAndroid Build Coastguard Worker 365*333d2b36SAndroid Build Coastguard Worker // check that generated prebuilt_* module sets correct srcs and dsts property 366*333d2b36SAndroid Build Coastguard Worker eval = generatedModule1.ConfigurableEvaluator(android.PanickingConfigAndErrorContext(result.TestContext)) 367*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals( 368*333d2b36SAndroid Build Coastguard Worker t, 369*333d2b36SAndroid Build Coastguard Worker "module expected to set correct srcs and dsts properties", 370*333d2b36SAndroid Build Coastguard Worker true, 371*333d2b36SAndroid Build Coastguard Worker checkModuleProp(generatedModule1, func(actual interface{}) bool { 372*333d2b36SAndroid Build Coastguard Worker if p, ok := actual.(*etc.PrebuiltEtcProperties); ok { 373*333d2b36SAndroid Build Coastguard Worker srcs := p.Srcs.GetOrDefault(eval, nil) 374*333d2b36SAndroid Build Coastguard Worker dsts := p.Dsts.GetOrDefault(eval, nil) 375*333d2b36SAndroid Build Coastguard Worker return len(srcs) == 1 && 376*333d2b36SAndroid Build Coastguard Worker srcs[0] == "apns-full-conf.xml" && 377*333d2b36SAndroid Build Coastguard Worker len(dsts) == 1 && 378*333d2b36SAndroid Build Coastguard Worker dsts[0] == "apns-conf-2.xml" 379*333d2b36SAndroid Build Coastguard Worker } 380*333d2b36SAndroid Build Coastguard Worker return false 381*333d2b36SAndroid Build Coastguard Worker }), 382*333d2b36SAndroid Build Coastguard Worker ) 383*333d2b36SAndroid Build Coastguard Worker} 384