Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 1 | package java |
| 2 | |
| 3 | import ( |
| 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 | |
| 13 | func 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 Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 30 | result := runTestSpecTest(t, android.FixtureExpectsNoErrors, bp) |
Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 31 | |
| 32 | module := result.ModuleForTests( |
| 33 | "module-name", "", |
| 34 | ).Module().(*soongTesting.TestSpecModule) |
| 35 | |
| 36 | // Check that the provider has the right contents |
Colin Cross | 5a37718 | 2023-12-14 14:46:23 -0800 | [diff] [blame] | 37 | data, _ := android.SingletonModuleProvider(result, module, soongTesting.TestSpecProviderKey) |
Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 38 | 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 Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 79 | "Retrieved metadata: %s doesn't contain expectedMetadata: %s", metadata, |
Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 80 | 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 Choudhary | 3562962 | 2023-11-21 22:40:27 +0000 | [diff] [blame] | 87 | 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 Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 89 | 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 Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 122 | func runTestSpecTest( |
Colin Cross | bc7d76c | 2023-12-12 16:39:03 -0800 | [diff] [blame] | 123 | t *testing.T, errorHandler android.FixtureErrorHandler, bp string, |
Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 124 | ) *android.TestResult { |
| 125 | return android.GroupFixturePreparers( |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 126 | soongTesting.PrepareForTestWithTestingBuildComponents, |
Aditya Choudhary | b7b3de8 | 2023-11-17 12:37:41 +0000 | [diff] [blame] | 127 | PrepareForIntegrationTestWithJava, |
| 128 | ). |
| 129 | ExtendWithErrorHandler(errorHandler). |
| 130 | RunTestWithBp(t, bp) |
| 131 | } |