xref: /aosp_15_r20/build/soong/tradefed_modules/test_suite_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 tradefed_modules
15*333d2b36SAndroid Build Coastguard Worker
16*333d2b36SAndroid Build Coastguard Workerimport (
17*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
18*333d2b36SAndroid Build Coastguard Worker	"android/soong/java"
19*333d2b36SAndroid Build Coastguard Worker	"encoding/json"
20*333d2b36SAndroid Build Coastguard Worker	"slices"
21*333d2b36SAndroid Build Coastguard Worker	"testing"
22*333d2b36SAndroid Build Coastguard Worker)
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Workerfunc TestTestSuites(t *testing.T) {
25*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
26*333d2b36SAndroid Build Coastguard Worker	ctx := android.GroupFixturePreparers(
27*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
28*333d2b36SAndroid Build Coastguard Worker		android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
29*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
30*333d2b36SAndroid Build Coastguard Worker		android_test {
31*333d2b36SAndroid Build Coastguard Worker			name: "TestModule1",
32*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
33*333d2b36SAndroid Build Coastguard Worker		}
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Worker		android_test {
36*333d2b36SAndroid Build Coastguard Worker			name: "TestModule2",
37*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
38*333d2b36SAndroid Build Coastguard Worker		}
39*333d2b36SAndroid Build Coastguard Worker
40*333d2b36SAndroid Build Coastguard Worker		test_suite {
41*333d2b36SAndroid Build Coastguard Worker			name: "my-suite",
42*333d2b36SAndroid Build Coastguard Worker			description: "a test suite",
43*333d2b36SAndroid Build Coastguard Worker			tests: [
44*333d2b36SAndroid Build Coastguard Worker				"TestModule1",
45*333d2b36SAndroid Build Coastguard Worker				"TestModule2",
46*333d2b36SAndroid Build Coastguard Worker			]
47*333d2b36SAndroid Build Coastguard Worker		}
48*333d2b36SAndroid Build Coastguard Worker	`)
49*333d2b36SAndroid Build Coastguard Worker	manifestPath := ctx.ModuleForTests("my-suite", "android_common").Output("out/soong/test_suites/my-suite/my-suite.json")
50*333d2b36SAndroid Build Coastguard Worker	var actual testSuiteManifest
51*333d2b36SAndroid Build Coastguard Worker	if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil {
52*333d2b36SAndroid Build Coastguard Worker		t.Errorf("failed to unmarshal manifest: %v", err)
53*333d2b36SAndroid Build Coastguard Worker	}
54*333d2b36SAndroid Build Coastguard Worker	slices.Sort(actual.Files)
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker	expected := testSuiteManifest{
57*333d2b36SAndroid Build Coastguard Worker		Name: "my-suite",
58*333d2b36SAndroid Build Coastguard Worker		Files: []string{
59*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule1/TestModule1.config",
60*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule1/arm64/TestModule1.apk",
61*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule2/TestModule2.config",
62*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule2/arm64/TestModule2.apk",
63*333d2b36SAndroid Build Coastguard Worker		},
64*333d2b36SAndroid Build Coastguard Worker	}
65*333d2b36SAndroid Build Coastguard Worker
66*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "manifests differ", expected, actual)
67*333d2b36SAndroid Build Coastguard Worker}
68*333d2b36SAndroid Build Coastguard Worker
69*333d2b36SAndroid Build Coastguard Workerfunc TestTestSuitesWithNested(t *testing.T) {
70*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
71*333d2b36SAndroid Build Coastguard Worker	ctx := android.GroupFixturePreparers(
72*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
73*333d2b36SAndroid Build Coastguard Worker		android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
74*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, `
75*333d2b36SAndroid Build Coastguard Worker		android_test {
76*333d2b36SAndroid Build Coastguard Worker			name: "TestModule1",
77*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
78*333d2b36SAndroid Build Coastguard Worker		}
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Worker		android_test {
81*333d2b36SAndroid Build Coastguard Worker			name: "TestModule2",
82*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
83*333d2b36SAndroid Build Coastguard Worker		}
84*333d2b36SAndroid Build Coastguard Worker
85*333d2b36SAndroid Build Coastguard Worker		android_test {
86*333d2b36SAndroid Build Coastguard Worker			name: "TestModule3",
87*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
88*333d2b36SAndroid Build Coastguard Worker		}
89*333d2b36SAndroid Build Coastguard Worker
90*333d2b36SAndroid Build Coastguard Worker		test_suite {
91*333d2b36SAndroid Build Coastguard Worker			name: "my-child-suite",
92*333d2b36SAndroid Build Coastguard Worker			description: "a child test suite",
93*333d2b36SAndroid Build Coastguard Worker			tests: [
94*333d2b36SAndroid Build Coastguard Worker				"TestModule1",
95*333d2b36SAndroid Build Coastguard Worker				"TestModule2",
96*333d2b36SAndroid Build Coastguard Worker			]
97*333d2b36SAndroid Build Coastguard Worker		}
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker		test_suite {
100*333d2b36SAndroid Build Coastguard Worker			name: "my-all-tests-suite",
101*333d2b36SAndroid Build Coastguard Worker			description: "a parent test suite",
102*333d2b36SAndroid Build Coastguard Worker			tests: [
103*333d2b36SAndroid Build Coastguard Worker				"TestModule1",
104*333d2b36SAndroid Build Coastguard Worker				"TestModule3",
105*333d2b36SAndroid Build Coastguard Worker				"my-child-suite",
106*333d2b36SAndroid Build Coastguard Worker			]
107*333d2b36SAndroid Build Coastguard Worker		}
108*333d2b36SAndroid Build Coastguard Worker	`)
109*333d2b36SAndroid Build Coastguard Worker	manifestPath := ctx.ModuleForTests("my-all-tests-suite", "android_common").Output("out/soong/test_suites/my-all-tests-suite/my-all-tests-suite.json")
110*333d2b36SAndroid Build Coastguard Worker	var actual testSuiteManifest
111*333d2b36SAndroid Build Coastguard Worker	if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil {
112*333d2b36SAndroid Build Coastguard Worker		t.Errorf("failed to unmarshal manifest: %v", err)
113*333d2b36SAndroid Build Coastguard Worker	}
114*333d2b36SAndroid Build Coastguard Worker	slices.Sort(actual.Files)
115*333d2b36SAndroid Build Coastguard Worker
116*333d2b36SAndroid Build Coastguard Worker	expected := testSuiteManifest{
117*333d2b36SAndroid Build Coastguard Worker		Name: "my-all-tests-suite",
118*333d2b36SAndroid Build Coastguard Worker		Files: []string{
119*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule1/TestModule1.config",
120*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule1/arm64/TestModule1.apk",
121*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule2/TestModule2.config",
122*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule2/arm64/TestModule2.apk",
123*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule3/TestModule3.config",
124*333d2b36SAndroid Build Coastguard Worker			"target/testcases/TestModule3/arm64/TestModule3.apk",
125*333d2b36SAndroid Build Coastguard Worker		},
126*333d2b36SAndroid Build Coastguard Worker	}
127*333d2b36SAndroid Build Coastguard Worker
128*333d2b36SAndroid Build Coastguard Worker	android.AssertDeepEquals(t, "manifests differ", expected, actual)
129*333d2b36SAndroid Build Coastguard Worker}
130*333d2b36SAndroid Build Coastguard Worker
131*333d2b36SAndroid Build Coastguard Workerfunc TestTestSuitesNotInstalledInTestcases(t *testing.T) {
132*333d2b36SAndroid Build Coastguard Worker	t.Parallel()
133*333d2b36SAndroid Build Coastguard Worker	android.GroupFixturePreparers(
134*333d2b36SAndroid Build Coastguard Worker		java.PrepareForTestWithJavaDefaultModules,
135*333d2b36SAndroid Build Coastguard Worker		android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
136*333d2b36SAndroid Build Coastguard Worker	).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern([]string{
137*333d2b36SAndroid Build Coastguard Worker		`"SomeHostTest" is not installed in testcases`,
138*333d2b36SAndroid Build Coastguard Worker	})).RunTestWithBp(t, `
139*333d2b36SAndroid Build Coastguard Worker			java_test_host {
140*333d2b36SAndroid Build Coastguard Worker				name: "SomeHostTest",
141*333d2b36SAndroid Build Coastguard Worker				srcs: ["a.java"],
142*333d2b36SAndroid Build Coastguard Worker			}
143*333d2b36SAndroid Build Coastguard Worker			test_suite {
144*333d2b36SAndroid Build Coastguard Worker				name: "my-suite",
145*333d2b36SAndroid Build Coastguard Worker				description: "a test suite",
146*333d2b36SAndroid Build Coastguard Worker				tests: [
147*333d2b36SAndroid Build Coastguard Worker					"SomeHostTest",
148*333d2b36SAndroid Build Coastguard Worker				]
149*333d2b36SAndroid Build Coastguard Worker			}
150*333d2b36SAndroid Build Coastguard Worker	`)
151*333d2b36SAndroid Build Coastguard Worker}
152