blob: 22a8e60eeb9980e1204b7f16addec4d464cd7cf7 [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 }`
30 result := runTest(t, android.FixtureExpectsNoErrors, bp)
31
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(
81 "Retrieved metadata: %s is not equal to expectedMetadata: %s", metadata,
82 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")
89 expectedCmd := "out/soong/host/linux-x86/bin/metadata -rule test_spec -inputFile out/soong/all_test_spec_paths.rsp -outputFile out/soong/ownership/all_test_specs.pb"
90 expectedOutputFile := "out/soong/ownership/all_test_specs.pb"
91 expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb"
92 if !strings.Contains(
93 strings.TrimSpace(rule.Output.String()),
94 expectedOutputFile,
95 ) {
96 t.Errorf(
97 "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s",
98 rule.Output.String(), expectedOutputFile,
99 )
100 }
101
102 if !strings.Contains(
103 strings.TrimSpace(rule.Inputs[0].String()),
104 expectedInputFile,
105 ) {
106 t.Errorf(
107 "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s",
108 rule.Inputs[0].String(), expectedInputFile,
109 )
110 }
111
112 if !strings.Contains(
113 strings.TrimSpace(rule.RuleParams.Command),
114 expectedCmd,
115 ) {
116 t.Errorf(
117 "Retrieved cmd: %s is not equal to expectedCmd: %s",
118 rule.RuleParams.Command, expectedCmd,
119 )
120 }
121}
122
123func runTest(
124 t *testing.T, errorHandler android.FixtureErrorHandler, bp string,
125) *android.TestResult {
126 return android.GroupFixturePreparers(
127 soongTesting.PrepareForTestWithTestSpecBuildComponents,
128 PrepareForIntegrationTestWithJava,
129 ).
130 ExtendWithErrorHandler(errorHandler).
131 RunTestWithBp(t, bp)
132}