blob: 1409b28ae9a6ad96bf1c86626c4bbe4d71c93d30 [file] [log] [blame]
Aditya Choudharyb7b3de82023-11-17 12:37:41 +00001package java
2
3import (
4 "strings"
5 "testing"
6
7 "android/soong/android"
8 soongTesting "android/soong/testing"
9 "android/soong/testing/test_spec_proto"
10 "google.golang.org/protobuf/proto"
11)
12
13func TestTestSpec(t *testing.T) {
14 bp := `test_spec {
15 name: "module-name",
16 teamId: "12345",
17 tests: [
18 "java-test-module-name-one",
19 "java-test-module-name-two"
20 ]
21 }
22
23 java_test {
24 name: "java-test-module-name-one",
25 }
26
27 java_test {
28 name: "java-test-module-name-two",
29 }`
Aditya Choudhary8094b6b2023-10-12 19:40:17 +000030 result := runTestSpecTest(t, android.FixtureExpectsNoErrors, bp)
Aditya Choudharyb7b3de82023-11-17 12:37:41 +000031
32 module := result.ModuleForTests(
33 "module-name", "",
34 ).Module().(*soongTesting.TestSpecModule)
35
36 // Check that the provider has the right contents
37 data := result.ModuleProvider(
38 module, soongTesting.TestSpecProviderKey,
39 ).(soongTesting.TestSpecProviderData)
40 if !strings.HasSuffix(
41 data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb",
42 ) {
43 t.Errorf(
44 "Missing intermediates path in provider: %s",
45 data.IntermediatePath.String(),
46 )
47 }
48
49 buildParamsSlice := module.BuildParamsForTests()
50 var metadata = ""
51 for _, params := range buildParamsSlice {
52 if params.Rule.String() == "android/soong/android.writeFile" {
53 metadata = params.Args["content"]
54 }
55 }
56
57 metadataList := make([]*test_spec_proto.TestSpec_OwnershipMetadata, 0, 2)
58 teamId := "12345"
59 bpFilePath := "Android.bp"
60 targetNames := []string{
61 "java-test-module-name-one", "java-test-module-name-two",
62 }
63
64 for _, test := range targetNames {
65 targetName := test
66 metadata := test_spec_proto.TestSpec_OwnershipMetadata{
67 TrendyTeamId: &teamId,
68 TargetName: &targetName,
69 Path: &bpFilePath,
70 }
71 metadataList = append(metadataList, &metadata)
72 }
73 testSpecMetadata := test_spec_proto.TestSpec{OwnershipMetadataList: metadataList}
74 protoData, _ := proto.Marshal(&testSpecMetadata)
75 rawData := string(protoData)
76 formattedData := strings.ReplaceAll(rawData, "\n", "\\n")
77 expectedMetadata := "'" + formattedData + "\\n'"
78
79 if metadata != expectedMetadata {
80 t.Errorf(
Aditya Choudhary8094b6b2023-10-12 19:40:17 +000081 "Retrieved metadata: %s doesn't contain expectedMetadata: %s", metadata,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +000082 expectedMetadata,
83 )
84 }
85
86 // Tests for all_test_spec singleton.
87 singleton := result.SingletonForTests("all_test_specs")
88 rule := singleton.Rule("all_test_specs_rule")
Aditya Choudhary35629622023-11-21 22:40:27 +000089 prebuiltOs := result.Config.PrebuiltOS()
90 expectedCmd := "out/soong/host/" + prebuiltOs + "/bin/metadata -rule test_spec -inputFile out/soong/all_test_spec_paths.rsp -outputFile out/soong/ownership/all_test_specs.pb"
Aditya Choudharyb7b3de82023-11-17 12:37:41 +000091 expectedOutputFile := "out/soong/ownership/all_test_specs.pb"
92 expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb"
93 if !strings.Contains(
94 strings.TrimSpace(rule.Output.String()),
95 expectedOutputFile,
96 ) {
97 t.Errorf(
98 "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s",
99 rule.Output.String(), expectedOutputFile,
100 )
101 }
102
103 if !strings.Contains(
104 strings.TrimSpace(rule.Inputs[0].String()),
105 expectedInputFile,
106 ) {
107 t.Errorf(
108 "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s",
109 rule.Inputs[0].String(), expectedInputFile,
110 )
111 }
112
113 if !strings.Contains(
114 strings.TrimSpace(rule.RuleParams.Command),
115 expectedCmd,
116 ) {
117 t.Errorf(
118 "Retrieved cmd: %s is not equal to expectedCmd: %s",
119 rule.RuleParams.Command, expectedCmd,
120 )
121 }
122}
123
Aditya Choudhary8094b6b2023-10-12 19:40:17 +0000124func runTestSpecTest(
Colin Crossbc7d76c2023-12-12 16:39:03 -0800125 t *testing.T, errorHandler android.FixtureErrorHandler, bp string,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +0000126) *android.TestResult {
127 return android.GroupFixturePreparers(
Aditya Choudhary8094b6b2023-10-12 19:40:17 +0000128 soongTesting.PrepareForTestWithTestingBuildComponents,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +0000129 PrepareForIntegrationTestWithJava,
130 ).
131 ExtendWithErrorHandler(errorHandler).
132 RunTestWithBp(t, bp)
133}