xref: /aosp_15_r20/build/soong/android/all_teams_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
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