1package java 2 3import ( 4 "strings" 5 "testing" 6 7 "android/soong/android" 8 soongTesting "android/soong/testing" 9 "android/soong/testing/code_metadata_internal_proto" 10 11 "google.golang.org/protobuf/proto" 12) 13 14func 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 29 module := result.ModuleForTests("module-name", "") 30 31 // Check that the provider has the right contents 32 data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.CodeMetadataProviderKey) 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 42 metadata := android.ContentFromFileRuleForTests(t, result.TestContext, 43 module.Output(data.IntermediatePath.String())) 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) 60 expectedMetadata := string(protoData) 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} 106func runCodeMetadataTest( 107 t *testing.T, errorHandler android.FixtureErrorHandler, bp string, 108) *android.TestResult { 109 return android.GroupFixturePreparers( 110 soongTesting.PrepareForTestWithTestingBuildComponents, prepareForJavaTest, 111 PrepareForTestWithJavaSdkLibraryFiles, FixtureWithLastReleaseApis("foo"), 112 ). 113 ExtendWithErrorHandler(errorHandler). 114 RunTestWithBp(t, bp) 115} 116