blob: f628b4b74ed932e09088c85f4b0b0f170fa9b58f [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
Colin Cross5a377182023-12-14 14:46:23 -080037 data, _ := android.SingletonModuleProvider(result, module, soongTesting.TestSpecProviderKey)
Aditya Choudharyb7b3de82023-11-17 12:37:41 +000038 if !strings.HasSuffix(
39 data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb",
40 ) {
41 t.Errorf(
42 "Missing intermediates path in provider: %s",
43 data.IntermediatePath.String(),
44 )
45 }
46
47 buildParamsSlice := module.BuildParamsForTests()
48 var metadata = ""
49 for _, params := range buildParamsSlice {
50 if params.Rule.String() == "android/soong/android.writeFile" {
51 metadata = params.Args["content"]
52 }
53 }
54
55 metadataList := make([]*test_spec_proto.TestSpec_OwnershipMetadata, 0, 2)
56 teamId := "12345"
57 bpFilePath := "Android.bp"
58 targetNames := []string{
59 "java-test-module-name-one", "java-test-module-name-two",
60 }
61
62 for _, test := range targetNames {
63 targetName := test
64 metadata := test_spec_proto.TestSpec_OwnershipMetadata{
65 TrendyTeamId: &teamId,
66 TargetName: &targetName,
67 Path: &bpFilePath,
68 }
69 metadataList = append(metadataList, &metadata)
70 }
71 testSpecMetadata := test_spec_proto.TestSpec{OwnershipMetadataList: metadataList}
72 protoData, _ := proto.Marshal(&testSpecMetadata)
73 rawData := string(protoData)
74 formattedData := strings.ReplaceAll(rawData, "\n", "\\n")
75 expectedMetadata := "'" + formattedData + "\\n'"
76
77 if metadata != expectedMetadata {
78 t.Errorf(
Aditya Choudhary8094b6b2023-10-12 19:40:17 +000079 "Retrieved metadata: %s doesn't contain expectedMetadata: %s", metadata,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +000080 expectedMetadata,
81 )
82 }
83
84 // Tests for all_test_spec singleton.
85 singleton := result.SingletonForTests("all_test_specs")
86 rule := singleton.Rule("all_test_specs_rule")
Aditya Choudhary35629622023-11-21 22:40:27 +000087 prebuiltOs := result.Config.PrebuiltOS()
88 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 +000089 expectedOutputFile := "out/soong/ownership/all_test_specs.pb"
90 expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb"
91 if !strings.Contains(
92 strings.TrimSpace(rule.Output.String()),
93 expectedOutputFile,
94 ) {
95 t.Errorf(
96 "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s",
97 rule.Output.String(), expectedOutputFile,
98 )
99 }
100
101 if !strings.Contains(
102 strings.TrimSpace(rule.Inputs[0].String()),
103 expectedInputFile,
104 ) {
105 t.Errorf(
106 "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s",
107 rule.Inputs[0].String(), expectedInputFile,
108 )
109 }
110
111 if !strings.Contains(
112 strings.TrimSpace(rule.RuleParams.Command),
113 expectedCmd,
114 ) {
115 t.Errorf(
116 "Retrieved cmd: %s is not equal to expectedCmd: %s",
117 rule.RuleParams.Command, expectedCmd,
118 )
119 }
120}
121
Aditya Choudhary8094b6b2023-10-12 19:40:17 +0000122func runTestSpecTest(
Colin Crossbc7d76c2023-12-12 16:39:03 -0800123 t *testing.T, errorHandler android.FixtureErrorHandler, bp string,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +0000124) *android.TestResult {
125 return android.GroupFixturePreparers(
Aditya Choudhary8094b6b2023-10-12 19:40:17 +0000126 soongTesting.PrepareForTestWithTestingBuildComponents,
Aditya Choudharyb7b3de82023-11-17 12:37:41 +0000127 PrepareForIntegrationTestWithJava,
128 ).
129 ExtendWithErrorHandler(errorHandler).
130 RunTestWithBp(t, bp)
131}