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