Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +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/code_metadata_internal_proto" |
Jihoon Kang | a3a0546 | 2024-04-05 00:36:44 +0000 | [diff] [blame^] | 10 | |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 11 | "google.golang.org/protobuf/proto" |
| 12 | ) |
| 13 | |
| 14 | func TestCodeMetadata(t *testing.T) { |
| 15 | bp := `code_metadata { |
| 16 | name: "module-name", |
| 17 | teamId: "12345", |
| 18 | code: [ |
| 19 | "foo", |
| 20 | ] |
| 21 | } |
| 22 | |
| 23 | java_sdk_library { |
| 24 | name: "foo", |
| 25 | srcs: ["a.java"], |
| 26 | }` |
| 27 | result := runCodeMetadataTest(t, android.FixtureExpectsNoErrors, bp) |
| 28 | |
Colin Cross | 31a6745 | 2023-11-02 16:57:08 -0700 | [diff] [blame] | 29 | module := result.ModuleForTests("module-name", "") |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 30 | |
| 31 | // Check that the provider has the right contents |
Colin Cross | 31a6745 | 2023-11-02 16:57:08 -0700 | [diff] [blame] | 32 | data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.CodeMetadataProviderKey) |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 33 | if !strings.HasSuffix( |
| 34 | data.IntermediatePath.String(), "/intermediateCodeMetadata.pb", |
| 35 | ) { |
| 36 | t.Errorf( |
| 37 | "Missing intermediates path in provider: %s", |
| 38 | data.IntermediatePath.String(), |
| 39 | ) |
| 40 | } |
| 41 | |
Colin Cross | 31a6745 | 2023-11-02 16:57:08 -0700 | [diff] [blame] | 42 | metadata := android.ContentFromFileRuleForTests(t, result.TestContext, |
| 43 | module.Output(data.IntermediatePath.String())) |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 44 | |
| 45 | metadataList := make([]*code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership, 0, 2) |
| 46 | teamId := "12345" |
| 47 | bpFilePath := "Android.bp" |
| 48 | targetName := "foo" |
| 49 | srcFile := []string{"a.java"} |
| 50 | expectedMetadataProto := code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{ |
| 51 | TrendyTeamId: &teamId, |
| 52 | TargetName: &targetName, |
| 53 | Path: &bpFilePath, |
| 54 | SourceFiles: srcFile, |
| 55 | } |
| 56 | metadataList = append(metadataList, &expectedMetadataProto) |
| 57 | |
| 58 | CodeMetadataMetadata := code_metadata_internal_proto.CodeMetadataInternal{TargetOwnershipList: metadataList} |
| 59 | protoData, _ := proto.Marshal(&CodeMetadataMetadata) |
Colin Cross | 31a6745 | 2023-11-02 16:57:08 -0700 | [diff] [blame] | 60 | expectedMetadata := string(protoData) |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 61 | |
| 62 | if metadata != expectedMetadata { |
| 63 | t.Errorf( |
| 64 | "Retrieved metadata: %s is not equal to expectedMetadata: %s", metadata, |
| 65 | expectedMetadata, |
| 66 | ) |
| 67 | } |
| 68 | |
| 69 | // Tests for all_test_spec singleton. |
| 70 | singleton := result.SingletonForTests("all_code_metadata") |
| 71 | rule := singleton.Rule("all_code_metadata_rule") |
| 72 | prebuiltOs := result.Config.PrebuiltOS() |
| 73 | expectedCmd := "out/soong/host/" + prebuiltOs + "/bin/metadata -rule code_metadata -inputFile out/soong/all_code_metadata_paths.rsp -outputFile out/soong/ownership/all_code_metadata.pb" |
| 74 | expectedOutputFile := "out/soong/ownership/all_code_metadata.pb" |
| 75 | expectedInputFile := "out/soong/.intermediates/module-name/intermediateCodeMetadata.pb" |
| 76 | if !strings.Contains( |
| 77 | strings.TrimSpace(rule.Output.String()), |
| 78 | expectedOutputFile, |
| 79 | ) { |
| 80 | t.Errorf( |
| 81 | "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s", |
| 82 | rule.Output.String(), expectedOutputFile, |
| 83 | ) |
| 84 | } |
| 85 | |
| 86 | if !strings.Contains( |
| 87 | strings.TrimSpace(rule.Inputs[0].String()), |
| 88 | expectedInputFile, |
| 89 | ) { |
| 90 | t.Errorf( |
| 91 | "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s", |
| 92 | rule.Inputs[0].String(), expectedInputFile, |
| 93 | ) |
| 94 | } |
| 95 | |
| 96 | if !strings.Contains( |
| 97 | strings.TrimSpace(rule.RuleParams.Command), |
| 98 | expectedCmd, |
| 99 | ) { |
| 100 | t.Errorf( |
| 101 | "Retrieved cmd: %s doesn't contain expectedCmd: %s", |
| 102 | rule.RuleParams.Command, expectedCmd, |
| 103 | ) |
| 104 | } |
| 105 | } |
| 106 | func runCodeMetadataTest( |
Colin Cross | bc7d76c | 2023-12-12 16:39:03 -0800 | [diff] [blame] | 107 | t *testing.T, errorHandler android.FixtureErrorHandler, bp string, |
Aditya Choudhary | 8094b6b | 2023-10-12 19:40:17 +0000 | [diff] [blame] | 108 | ) *android.TestResult { |
| 109 | return android.GroupFixturePreparers( |
| 110 | soongTesting.PrepareForTestWithTestingBuildComponents, prepareForJavaTest, |
| 111 | PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), |
| 112 | ). |
| 113 | ExtendWithErrorHandler(errorHandler). |
| 114 | RunTestWithBp(t, bp) |
| 115 | } |