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 Workerpackage android 15*333d2b36SAndroid Build Coastguard Worker 16*333d2b36SAndroid Build Coastguard Workerimport ( 17*333d2b36SAndroid Build Coastguard Worker "android/soong/android/team_proto" 18*333d2b36SAndroid Build Coastguard Worker "log" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "google.golang.org/protobuf/proto" 22*333d2b36SAndroid Build Coastguard Worker) 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Workerfunc TestAllTeams(t *testing.T) { 25*333d2b36SAndroid Build Coastguard Worker t.Parallel() 26*333d2b36SAndroid Build Coastguard Worker ctx := GroupFixturePreparers( 27*333d2b36SAndroid Build Coastguard Worker prepareForTestWithTeamAndFakes, 28*333d2b36SAndroid Build Coastguard Worker // This adds two variants, one armv7-a-neon, one armv8-a 29*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithArchMutator, 30*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 31*333d2b36SAndroid Build Coastguard Worker ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) 32*333d2b36SAndroid Build Coastguard Worker }), 33*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 34*333d2b36SAndroid Build Coastguard Worker fake { 35*333d2b36SAndroid Build Coastguard Worker name: "main_test", 36*333d2b36SAndroid Build Coastguard Worker team: "someteam", 37*333d2b36SAndroid Build Coastguard Worker } 38*333d2b36SAndroid Build Coastguard Worker team { 39*333d2b36SAndroid Build Coastguard Worker name: "someteam", 40*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "cool_team", 41*333d2b36SAndroid Build Coastguard Worker } 42*333d2b36SAndroid Build Coastguard Worker 43*333d2b36SAndroid Build Coastguard Worker team { 44*333d2b36SAndroid Build Coastguard Worker name: "team2", 45*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "22222", 46*333d2b36SAndroid Build Coastguard Worker } 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Worker fake { 49*333d2b36SAndroid Build Coastguard Worker name: "tool", 50*333d2b36SAndroid Build Coastguard Worker team: "team2", 51*333d2b36SAndroid Build Coastguard Worker } 52*333d2b36SAndroid Build Coastguard Worker 53*333d2b36SAndroid Build Coastguard Worker fake { 54*333d2b36SAndroid Build Coastguard Worker name: "noteam", 55*333d2b36SAndroid Build Coastguard Worker test_only: true, 56*333d2b36SAndroid Build Coastguard Worker } 57*333d2b36SAndroid Build Coastguard Worker // write the test-only provider value once 58*333d2b36SAndroid Build Coastguard Worker fake { 59*333d2b36SAndroid Build Coastguard Worker name: "test-and-team-and-top1", 60*333d2b36SAndroid Build Coastguard Worker test_only: true, 61*333d2b36SAndroid Build Coastguard Worker team: "team2", 62*333d2b36SAndroid Build Coastguard Worker arch: {arm: { skip: false}, 63*333d2b36SAndroid Build Coastguard Worker arm64: { skip: true}}, 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker // write the test-only provider once, but on the other arch 66*333d2b36SAndroid Build Coastguard Worker fake { 67*333d2b36SAndroid Build Coastguard Worker name: "test-and-team-and-top2", 68*333d2b36SAndroid Build Coastguard Worker test_only: true, 69*333d2b36SAndroid Build Coastguard Worker team: "team2", 70*333d2b36SAndroid Build Coastguard Worker arch: {arm: { skip: true}, 71*333d2b36SAndroid Build Coastguard Worker arm64: { skip: false}}, 72*333d2b36SAndroid Build Coastguard Worker } 73*333d2b36SAndroid Build Coastguard Worker // write the test-only provider value twice 74*333d2b36SAndroid Build Coastguard Worker fake { 75*333d2b36SAndroid Build Coastguard Worker name: "test-and-team-and-top3", 76*333d2b36SAndroid Build Coastguard Worker test_only: true, 77*333d2b36SAndroid Build Coastguard Worker team: "team2", 78*333d2b36SAndroid Build Coastguard Worker } 79*333d2b36SAndroid Build Coastguard Worker // Don't write the test-only provider value 80*333d2b36SAndroid Build Coastguard Worker fake { 81*333d2b36SAndroid Build Coastguard Worker name: "test-and-team-and-top4", 82*333d2b36SAndroid Build Coastguard Worker test_only: true, 83*333d2b36SAndroid Build Coastguard Worker team: "team2", 84*333d2b36SAndroid Build Coastguard Worker arch: {arm: { skip: true}, 85*333d2b36SAndroid Build Coastguard Worker arm64: { skip: true}}, 86*333d2b36SAndroid Build Coastguard Worker } 87*333d2b36SAndroid Build Coastguard Worker `) 88*333d2b36SAndroid Build Coastguard Worker 89*333d2b36SAndroid Build Coastguard Worker var teams *team_proto.AllTeams 90*333d2b36SAndroid Build Coastguard Worker teams = getTeamProtoOutput(t, ctx) 91*333d2b36SAndroid Build Coastguard Worker 92*333d2b36SAndroid Build Coastguard Worker // map of module name -> trendy team name. 93*333d2b36SAndroid Build Coastguard Worker actualTeams := make(map[string]string) 94*333d2b36SAndroid Build Coastguard Worker actualTests := []string{} 95*333d2b36SAndroid Build Coastguard Worker actualTopLevelTests := []string{} 96*333d2b36SAndroid Build Coastguard Worker 97*333d2b36SAndroid Build Coastguard Worker for _, teamProto := range teams.Teams { 98*333d2b36SAndroid Build Coastguard Worker if teamProto.TrendyTeamId != nil { 99*333d2b36SAndroid Build Coastguard Worker actualTeams[teamProto.GetTargetName()] = *teamProto.TrendyTeamId 100*333d2b36SAndroid Build Coastguard Worker } else { 101*333d2b36SAndroid Build Coastguard Worker actualTeams[teamProto.GetTargetName()] = "" 102*333d2b36SAndroid Build Coastguard Worker } 103*333d2b36SAndroid Build Coastguard Worker if teamProto.GetTestOnly() { 104*333d2b36SAndroid Build Coastguard Worker actualTests = append(actualTests, teamProto.GetTargetName()) 105*333d2b36SAndroid Build Coastguard Worker } 106*333d2b36SAndroid Build Coastguard Worker if teamProto.GetTopLevelTarget() { 107*333d2b36SAndroid Build Coastguard Worker actualTopLevelTests = append(actualTopLevelTests, teamProto.GetTargetName()) 108*333d2b36SAndroid Build Coastguard Worker } 109*333d2b36SAndroid Build Coastguard Worker } 110*333d2b36SAndroid Build Coastguard Worker expectedTeams := map[string]string{ 111*333d2b36SAndroid Build Coastguard Worker "main_test": "cool_team", 112*333d2b36SAndroid Build Coastguard Worker "tool": "22222", 113*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top1": "22222", 114*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top2": "22222", 115*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top3": "22222", 116*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top4": "22222", 117*333d2b36SAndroid Build Coastguard Worker "noteam": "", 118*333d2b36SAndroid Build Coastguard Worker } 119*333d2b36SAndroid Build Coastguard Worker 120*333d2b36SAndroid Build Coastguard Worker expectedTests := []string{ 121*333d2b36SAndroid Build Coastguard Worker "noteam", 122*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top1", 123*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top2", 124*333d2b36SAndroid Build Coastguard Worker "test-and-team-and-top3", 125*333d2b36SAndroid Build Coastguard Worker // There should be no test-and-team-top4 as we skip writing all variants 126*333d2b36SAndroid Build Coastguard Worker // test-only for all variants 127*333d2b36SAndroid Build Coastguard Worker } 128*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) 129*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "test matchup", expectedTests, actualTests) 130*333d2b36SAndroid Build Coastguard Worker} 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Workerfunc getTeamProtoOutput(t *testing.T, ctx *TestResult) *team_proto.AllTeams { 133*333d2b36SAndroid Build Coastguard Worker teams := new(team_proto.AllTeams) 134*333d2b36SAndroid Build Coastguard Worker config := ctx.SingletonForTests("all_teams") 135*333d2b36SAndroid Build Coastguard Worker allOutputs := config.AllOutputs() 136*333d2b36SAndroid Build Coastguard Worker 137*333d2b36SAndroid Build Coastguard Worker protoPath := allOutputs[0] 138*333d2b36SAndroid Build Coastguard Worker 139*333d2b36SAndroid Build Coastguard Worker out := config.MaybeOutput(protoPath) 140*333d2b36SAndroid Build Coastguard Worker outProto := []byte(ContentFromFileRuleForTests(t, ctx.TestContext, out)) 141*333d2b36SAndroid Build Coastguard Worker if err := proto.Unmarshal(outProto, teams); err != nil { 142*333d2b36SAndroid Build Coastguard Worker log.Fatalln("Failed to parse teams proto:", err) 143*333d2b36SAndroid Build Coastguard Worker } 144*333d2b36SAndroid Build Coastguard Worker return teams 145*333d2b36SAndroid Build Coastguard Worker} 146*333d2b36SAndroid Build Coastguard Worker 147*333d2b36SAndroid Build Coastguard Worker// Android.bp 148*333d2b36SAndroid Build Coastguard Worker// 149*333d2b36SAndroid Build Coastguard Worker// team: team_top 150*333d2b36SAndroid Build Coastguard Worker// 151*333d2b36SAndroid Build Coastguard Worker// # dir1 has no modules with teams, 152*333d2b36SAndroid Build Coastguard Worker// # but has a dir with no Android.bp 153*333d2b36SAndroid Build Coastguard Worker// dir1/Android.bp 154*333d2b36SAndroid Build Coastguard Worker// 155*333d2b36SAndroid Build Coastguard Worker// module_dir1 156*333d2b36SAndroid Build Coastguard Worker// 157*333d2b36SAndroid Build Coastguard Worker// # dirs without and Android.bp should be fine. 158*333d2b36SAndroid Build Coastguard Worker// dir1/dir2/dir3/Android.bp 159*333d2b36SAndroid Build Coastguard Worker// 160*333d2b36SAndroid Build Coastguard Worker// package {} 161*333d2b36SAndroid Build Coastguard Worker// module_dir123 162*333d2b36SAndroid Build Coastguard Worker// 163*333d2b36SAndroid Build Coastguard Worker// teams_dir/Android.bp 164*333d2b36SAndroid Build Coastguard Worker// 165*333d2b36SAndroid Build Coastguard Worker// module_with_team1: team1 166*333d2b36SAndroid Build Coastguard Worker// team1: 111 167*333d2b36SAndroid Build Coastguard Worker// 168*333d2b36SAndroid Build Coastguard Worker// # team comes from upper package default 169*333d2b36SAndroid Build Coastguard Worker// teams_dir/deeper/Android.bp 170*333d2b36SAndroid Build Coastguard Worker// 171*333d2b36SAndroid Build Coastguard Worker// module2_with_team1: team1 172*333d2b36SAndroid Build Coastguard Worker// 173*333d2b36SAndroid Build Coastguard Worker// package_defaults/Android.bp 174*333d2b36SAndroid Build Coastguard Worker// package_defaults/pd2/Android.bp 175*333d2b36SAndroid Build Coastguard Worker// 176*333d2b36SAndroid Build Coastguard Worker// package{ default_team: team_top} 177*333d2b36SAndroid Build Coastguard Worker// module_pd2 ## should get team_top 178*333d2b36SAndroid Build Coastguard Worker// 179*333d2b36SAndroid Build Coastguard Worker// package_defaults/pd2/pd3/Android.bp 180*333d2b36SAndroid Build Coastguard Worker// 181*333d2b36SAndroid Build Coastguard Worker// module_pd3 ## should get team_top 182*333d2b36SAndroid Build Coastguard Workerfunc TestPackageLookup(t *testing.T) { 183*333d2b36SAndroid Build Coastguard Worker t.Parallel() 184*333d2b36SAndroid Build Coastguard Worker rootBp := ` 185*333d2b36SAndroid Build Coastguard Worker team { 186*333d2b36SAndroid Build Coastguard Worker name: "team_top", 187*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "trendy://team_top", 188*333d2b36SAndroid Build Coastguard Worker } ` 189*333d2b36SAndroid Build Coastguard Worker 190*333d2b36SAndroid Build Coastguard Worker dir1Bp := ` 191*333d2b36SAndroid Build Coastguard Worker fake { 192*333d2b36SAndroid Build Coastguard Worker name: "module_dir1", 193*333d2b36SAndroid Build Coastguard Worker } ` 194*333d2b36SAndroid Build Coastguard Worker dir3Bp := ` 195*333d2b36SAndroid Build Coastguard Worker package {} 196*333d2b36SAndroid Build Coastguard Worker fake { 197*333d2b36SAndroid Build Coastguard Worker name: "module_dir123", 198*333d2b36SAndroid Build Coastguard Worker } ` 199*333d2b36SAndroid Build Coastguard Worker teamsDirBp := ` 200*333d2b36SAndroid Build Coastguard Worker fake { 201*333d2b36SAndroid Build Coastguard Worker name: "module_with_team1", 202*333d2b36SAndroid Build Coastguard Worker team: "team1" 203*333d2b36SAndroid Build Coastguard Worker 204*333d2b36SAndroid Build Coastguard Worker } 205*333d2b36SAndroid Build Coastguard Worker team { 206*333d2b36SAndroid Build Coastguard Worker name: "team1", 207*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "111", 208*333d2b36SAndroid Build Coastguard Worker } ` 209*333d2b36SAndroid Build Coastguard Worker teamsDirDeeper := ` 210*333d2b36SAndroid Build Coastguard Worker fake { 211*333d2b36SAndroid Build Coastguard Worker name: "module2_with_team1", 212*333d2b36SAndroid Build Coastguard Worker team: "team1" 213*333d2b36SAndroid Build Coastguard Worker } ` 214*333d2b36SAndroid Build Coastguard Worker // create an empty one. 215*333d2b36SAndroid Build Coastguard Worker packageDefaultsBp := "" 216*333d2b36SAndroid Build Coastguard Worker packageDefaultspd2 := ` 217*333d2b36SAndroid Build Coastguard Worker package { default_team: "team_top"} 218*333d2b36SAndroid Build Coastguard Worker fake { 219*333d2b36SAndroid Build Coastguard Worker name: "modulepd2", 220*333d2b36SAndroid Build Coastguard Worker } ` 221*333d2b36SAndroid Build Coastguard Worker 222*333d2b36SAndroid Build Coastguard Worker packageDefaultspd3 := ` 223*333d2b36SAndroid Build Coastguard Worker fake { 224*333d2b36SAndroid Build Coastguard Worker name: "modulepd3", 225*333d2b36SAndroid Build Coastguard Worker } 226*333d2b36SAndroid Build Coastguard Worker fake { 227*333d2b36SAndroid Build Coastguard Worker name: "modulepd3b", 228*333d2b36SAndroid Build Coastguard Worker team: "team1" 229*333d2b36SAndroid Build Coastguard Worker } ` 230*333d2b36SAndroid Build Coastguard Worker 231*333d2b36SAndroid Build Coastguard Worker ctx := GroupFixturePreparers( 232*333d2b36SAndroid Build Coastguard Worker prepareForTestWithTeamAndFakes, 233*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithPackageModule, 234*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 235*333d2b36SAndroid Build Coastguard Worker ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) 236*333d2b36SAndroid Build Coastguard Worker }), 237*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("Android.bp", rootBp), 238*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("dir1/Android.bp", dir1Bp), 239*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("dir1/dir2/dir3/Android.bp", dir3Bp), 240*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("teams_dir/Android.bp", teamsDirBp), 241*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("teams_dir/deeper/Android.bp", teamsDirDeeper), 242*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("package_defaults/Android.bp", packageDefaultsBp), 243*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("package_defaults/pd2/Android.bp", packageDefaultspd2), 244*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("package_defaults/pd2/pd3/Android.bp", packageDefaultspd3), 245*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 246*333d2b36SAndroid Build Coastguard Worker 247*333d2b36SAndroid Build Coastguard Worker var teams *team_proto.AllTeams 248*333d2b36SAndroid Build Coastguard Worker teams = getTeamProtoOutput(t, ctx) 249*333d2b36SAndroid Build Coastguard Worker 250*333d2b36SAndroid Build Coastguard Worker // map of module name -> trendy team name. 251*333d2b36SAndroid Build Coastguard Worker actualTeams := make(map[string]*string) 252*333d2b36SAndroid Build Coastguard Worker for _, teamProto := range teams.Teams { 253*333d2b36SAndroid Build Coastguard Worker actualTeams[teamProto.GetTargetName()] = teamProto.TrendyTeamId 254*333d2b36SAndroid Build Coastguard Worker } 255*333d2b36SAndroid Build Coastguard Worker expectedTeams := map[string]*string{ 256*333d2b36SAndroid Build Coastguard Worker "module_with_team1": proto.String("111"), 257*333d2b36SAndroid Build Coastguard Worker "module2_with_team1": proto.String("111"), 258*333d2b36SAndroid Build Coastguard Worker "modulepd2": proto.String("trendy://team_top"), 259*333d2b36SAndroid Build Coastguard Worker "modulepd3": proto.String("trendy://team_top"), 260*333d2b36SAndroid Build Coastguard Worker "modulepd3b": proto.String("111"), 261*333d2b36SAndroid Build Coastguard Worker "module_dir1": nil, 262*333d2b36SAndroid Build Coastguard Worker "module_dir123": nil, 263*333d2b36SAndroid Build Coastguard Worker } 264*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) 265*333d2b36SAndroid Build Coastguard Worker} 266*333d2b36SAndroid Build Coastguard Worker 267*333d2b36SAndroid Build Coastguard Workerfunc TestPackageLookupForIncludedBlueprintFiles(t *testing.T) { 268*333d2b36SAndroid Build Coastguard Worker t.Parallel() 269*333d2b36SAndroid Build Coastguard Worker rootBp := ` 270*333d2b36SAndroid Build Coastguard Worker package { default_team: "team_top"} 271*333d2b36SAndroid Build Coastguard Worker team { 272*333d2b36SAndroid Build Coastguard Worker name: "team_top", 273*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "trendy://team_top", 274*333d2b36SAndroid Build Coastguard Worker } 275*333d2b36SAndroid Build Coastguard Worker build = ["include.bp"] 276*333d2b36SAndroid Build Coastguard Worker ` 277*333d2b36SAndroid Build Coastguard Worker includeBp := ` 278*333d2b36SAndroid Build Coastguard Worker fake { 279*333d2b36SAndroid Build Coastguard Worker name: "IncludedModule", 280*333d2b36SAndroid Build Coastguard Worker } ` 281*333d2b36SAndroid Build Coastguard Worker 282*333d2b36SAndroid Build Coastguard Worker ctx := GroupFixturePreparers( 283*333d2b36SAndroid Build Coastguard Worker prepareForTestWithTeamAndFakes, 284*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithPackageModule, 285*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 286*333d2b36SAndroid Build Coastguard Worker ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) 287*333d2b36SAndroid Build Coastguard Worker }), 288*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("Android.bp", rootBp), 289*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("include.bp", includeBp), 290*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 291*333d2b36SAndroid Build Coastguard Worker 292*333d2b36SAndroid Build Coastguard Worker var teams *team_proto.AllTeams 293*333d2b36SAndroid Build Coastguard Worker teams = getTeamProtoOutput(t, ctx) 294*333d2b36SAndroid Build Coastguard Worker 295*333d2b36SAndroid Build Coastguard Worker // map of module name -> trendy team name. 296*333d2b36SAndroid Build Coastguard Worker actualTeams := make(map[string]*string) 297*333d2b36SAndroid Build Coastguard Worker for _, teamProto := range teams.Teams { 298*333d2b36SAndroid Build Coastguard Worker actualTeams[teamProto.GetTargetName()] = teamProto.TrendyTeamId 299*333d2b36SAndroid Build Coastguard Worker } 300*333d2b36SAndroid Build Coastguard Worker expectedTeams := map[string]*string{ 301*333d2b36SAndroid Build Coastguard Worker "IncludedModule": proto.String("trendy://team_top"), 302*333d2b36SAndroid Build Coastguard Worker } 303*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) 304*333d2b36SAndroid Build Coastguard Worker} 305*333d2b36SAndroid Build Coastguard Worker 306*333d2b36SAndroid Build Coastguard Workerfunc TestPackageLookupForIncludedBlueprintFilesWithPackageInChildBlueprint(t *testing.T) { 307*333d2b36SAndroid Build Coastguard Worker t.Parallel() 308*333d2b36SAndroid Build Coastguard Worker rootBp := ` 309*333d2b36SAndroid Build Coastguard Worker team { 310*333d2b36SAndroid Build Coastguard Worker name: "team_top", 311*333d2b36SAndroid Build Coastguard Worker trendy_team_id: "trendy://team_top", 312*333d2b36SAndroid Build Coastguard Worker } 313*333d2b36SAndroid Build Coastguard Worker build = ["include.bp"] 314*333d2b36SAndroid Build Coastguard Worker ` 315*333d2b36SAndroid Build Coastguard Worker includeBp := ` 316*333d2b36SAndroid Build Coastguard Worker package { default_team: "team_top"} 317*333d2b36SAndroid Build Coastguard Worker fake { 318*333d2b36SAndroid Build Coastguard Worker name: "IncludedModule", 319*333d2b36SAndroid Build Coastguard Worker } ` 320*333d2b36SAndroid Build Coastguard Worker 321*333d2b36SAndroid Build Coastguard Worker ctx := GroupFixturePreparers( 322*333d2b36SAndroid Build Coastguard Worker prepareForTestWithTeamAndFakes, 323*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithPackageModule, 324*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 325*333d2b36SAndroid Build Coastguard Worker ctx.RegisterParallelSingletonType("all_teams", AllTeamsFactory) 326*333d2b36SAndroid Build Coastguard Worker }), 327*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("Android.bp", rootBp), 328*333d2b36SAndroid Build Coastguard Worker FixtureAddTextFile("include.bp", includeBp), 329*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 330*333d2b36SAndroid Build Coastguard Worker 331*333d2b36SAndroid Build Coastguard Worker var teams *team_proto.AllTeams 332*333d2b36SAndroid Build Coastguard Worker teams = getTeamProtoOutput(t, ctx) 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker // map of module name -> trendy team name. 335*333d2b36SAndroid Build Coastguard Worker actualTeams := make(map[string]*string) 336*333d2b36SAndroid Build Coastguard Worker for _, teamProto := range teams.Teams { 337*333d2b36SAndroid Build Coastguard Worker actualTeams[teamProto.GetTargetName()] = teamProto.TrendyTeamId 338*333d2b36SAndroid Build Coastguard Worker } 339*333d2b36SAndroid Build Coastguard Worker expectedTeams := map[string]*string{ 340*333d2b36SAndroid Build Coastguard Worker "IncludedModule": proto.String("trendy://team_top"), 341*333d2b36SAndroid Build Coastguard Worker } 342*333d2b36SAndroid Build Coastguard Worker AssertDeepEquals(t, "compare maps", expectedTeams, actualTeams) 343*333d2b36SAndroid Build Coastguard Worker} 344*333d2b36SAndroid Build Coastguard Worker 345*333d2b36SAndroid Build Coastguard Workertype fakeForTests struct { 346*333d2b36SAndroid Build Coastguard Worker ModuleBase 347*333d2b36SAndroid Build Coastguard Worker 348*333d2b36SAndroid Build Coastguard Worker sourceProperties SourceProperties 349*333d2b36SAndroid Build Coastguard Worker props struct { 350*333d2b36SAndroid Build Coastguard Worker // If true, don't write test-only value in provider 351*333d2b36SAndroid Build Coastguard Worker Skip bool `android:"arch_variant"` 352*333d2b36SAndroid Build Coastguard Worker } 353*333d2b36SAndroid Build Coastguard Worker} 354*333d2b36SAndroid Build Coastguard Worker 355*333d2b36SAndroid Build Coastguard Workerfunc fakeFactory() Module { 356*333d2b36SAndroid Build Coastguard Worker module := &fakeForTests{} 357*333d2b36SAndroid Build Coastguard Worker module.AddProperties(&module.sourceProperties, &module.props) 358*333d2b36SAndroid Build Coastguard Worker InitAndroidArchModule(module, HostAndDeviceSupported, MultilibBoth) 359*333d2b36SAndroid Build Coastguard Worker 360*333d2b36SAndroid Build Coastguard Worker return module 361*333d2b36SAndroid Build Coastguard Worker} 362*333d2b36SAndroid Build Coastguard Worker 363*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithTeamAndFakes = GroupFixturePreparers( 364*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(RegisterTeamBuildComponents), 365*333d2b36SAndroid Build Coastguard Worker FixtureRegisterWithContext(func(ctx RegistrationContext) { 366*333d2b36SAndroid Build Coastguard Worker ctx.RegisterModuleType("fake", fakeFactory) 367*333d2b36SAndroid Build Coastguard Worker }), 368*333d2b36SAndroid Build Coastguard Worker) 369*333d2b36SAndroid Build Coastguard Worker 370*333d2b36SAndroid Build Coastguard Workerfunc (f *fakeForTests) GenerateAndroidBuildActions(ctx ModuleContext) { 371*333d2b36SAndroid Build Coastguard Worker if Bool(f.sourceProperties.Test_only) { 372*333d2b36SAndroid Build Coastguard Worker SetProvider(ctx, TestOnlyProviderKey, TestModuleInformation{ 373*333d2b36SAndroid Build Coastguard Worker TestOnly: Bool(f.sourceProperties.Test_only) && !f.props.Skip, 374*333d2b36SAndroid Build Coastguard Worker TopLevelTarget: false, 375*333d2b36SAndroid Build Coastguard Worker }) 376*333d2b36SAndroid Build Coastguard Worker } 377*333d2b36SAndroid Build Coastguard Worker} 378