diff options
author | 2023-10-12 19:40:17 +0000 | |
---|---|---|
committer | 2023-12-05 18:10:03 +0000 | |
commit | 8094b6bf9dc368f080c6455261ebe1d999772de0 (patch) | |
tree | 6ed50d1ed0a82c641bd5083343244a0635224cd9 /java/code_metadata_test.go | |
parent | 14e1149195e7a71a1a939856935b99009c7cc5a0 (diff) |
Add Code Metadata rule to soong/testing.
This Cl adds a new rule to Soong to generate code ownership metadata. Also, this CL adds a provider in the Java SDK library to provide generated source files to the Code_metadata rule. Will add providers to other libraries in the future changes.
Bug: 296873595
Change-Id: Ic2e43aa9b161231fea4416d1f0d36b778361d7c5
Diffstat (limited to 'java/code_metadata_test.go')
-rw-r--r-- | java/code_metadata_test.go | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/java/code_metadata_test.go b/java/code_metadata_test.go new file mode 100644 index 000000000..4b05d9ea6 --- /dev/null +++ b/java/code_metadata_test.go @@ -0,0 +1,125 @@ +package java + +import ( + "strings" + "testing" + + "android/soong/android" + soongTesting "android/soong/testing" + "android/soong/testing/code_metadata_internal_proto" + "google.golang.org/protobuf/proto" +) + +func TestCodeMetadata(t *testing.T) { + bp := `code_metadata { + name: "module-name", + teamId: "12345", + code: [ + "foo", + ] + } + + java_sdk_library { + name: "foo", + srcs: ["a.java"], + }` + result := runCodeMetadataTest(t, android.FixtureExpectsNoErrors, bp) + + module := result.ModuleForTests( + "module-name", "", + ).Module().(*soongTesting.CodeMetadataModule) + + // Check that the provider has the right contents + data := result.ModuleProvider( + module, soongTesting.CodeMetadataProviderKey, + ).(soongTesting.CodeMetadataProviderData) + if !strings.HasSuffix( + data.IntermediatePath.String(), "/intermediateCodeMetadata.pb", + ) { + t.Errorf( + "Missing intermediates path in provider: %s", + data.IntermediatePath.String(), + ) + } + + buildParamsSlice := module.BuildParamsForTests() + var metadata = "" + for _, params := range buildParamsSlice { + if params.Rule.String() == "android/soong/android.writeFile" { + metadata = params.Args["content"] + } + } + + metadataList := make([]*code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership, 0, 2) + teamId := "12345" + bpFilePath := "Android.bp" + targetName := "foo" + srcFile := []string{"a.java"} + expectedMetadataProto := code_metadata_internal_proto.CodeMetadataInternal_TargetOwnership{ + TrendyTeamId: &teamId, + TargetName: &targetName, + Path: &bpFilePath, + SourceFiles: srcFile, + } + metadataList = append(metadataList, &expectedMetadataProto) + + CodeMetadataMetadata := code_metadata_internal_proto.CodeMetadataInternal{TargetOwnershipList: metadataList} + protoData, _ := proto.Marshal(&CodeMetadataMetadata) + rawData := string(protoData) + formattedData := strings.ReplaceAll(rawData, "\n", "\\n") + expectedMetadata := "'" + formattedData + "\\n'" + + if metadata != expectedMetadata { + t.Errorf( + "Retrieved metadata: %s is not equal to expectedMetadata: %s", metadata, + expectedMetadata, + ) + } + + // Tests for all_test_spec singleton. + singleton := result.SingletonForTests("all_code_metadata") + rule := singleton.Rule("all_code_metadata_rule") + prebuiltOs := result.Config.PrebuiltOS() + 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" + expectedOutputFile := "out/soong/ownership/all_code_metadata.pb" + expectedInputFile := "out/soong/.intermediates/module-name/intermediateCodeMetadata.pb" + if !strings.Contains( + strings.TrimSpace(rule.Output.String()), + expectedOutputFile, + ) { + t.Errorf( + "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s", + rule.Output.String(), expectedOutputFile, + ) + } + + if !strings.Contains( + strings.TrimSpace(rule.Inputs[0].String()), + expectedInputFile, + ) { + t.Errorf( + "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s", + rule.Inputs[0].String(), expectedInputFile, + ) + } + + if !strings.Contains( + strings.TrimSpace(rule.RuleParams.Command), + expectedCmd, + ) { + t.Errorf( + "Retrieved cmd: %s doesn't contain expectedCmd: %s", + rule.RuleParams.Command, expectedCmd, + ) + } +} +func runCodeMetadataTest( + t *testing.T, errorHandler android.FixtureErrorHandler, bp string, +) *android.TestResult { + return android.GroupFixturePreparers( + soongTesting.PrepareForTestWithTestingBuildComponents, prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), + ). + ExtendWithErrorHandler(errorHandler). + RunTestWithBp(t, bp) +} |