1package java 2 3import ( 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 13func 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 }` 30 result := runTestSpecTest(t, android.FixtureExpectsNoErrors, bp) 31 32 module := result.ModuleForTests("module-name", "") 33 34 // Check that the provider has the right contents 35 data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.TestSpecProviderKey) 36 if !strings.HasSuffix( 37 data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb", 38 ) { 39 t.Errorf( 40 "Missing intermediates path in provider: %s", 41 data.IntermediatePath.String(), 42 ) 43 } 44 45 metadata := android.ContentFromFileRuleForTests(t, result.TestContext, 46 module.Output(data.IntermediatePath.String())) 47 48 metadataList := make([]*test_spec_proto.TestSpec_OwnershipMetadata, 0, 2) 49 teamId := "12345" 50 bpFilePath := "Android.bp" 51 targetNames := []string{ 52 "java-test-module-name-one", "java-test-module-name-two", 53 } 54 55 for _, test := range targetNames { 56 targetName := test 57 metadata := test_spec_proto.TestSpec_OwnershipMetadata{ 58 TrendyTeamId: &teamId, 59 TargetName: &targetName, 60 Path: &bpFilePath, 61 } 62 metadataList = append(metadataList, &metadata) 63 } 64 testSpecMetadata := test_spec_proto.TestSpec{OwnershipMetadataList: metadataList} 65 protoData, _ := proto.Marshal(&testSpecMetadata) 66 expectedMetadata := string(protoData) 67 68 if metadata != expectedMetadata { 69 t.Errorf( 70 "Retrieved metadata: %s doesn't contain expectedMetadata: %s", metadata, 71 expectedMetadata, 72 ) 73 } 74 75 // Tests for all_test_spec singleton. 76 singleton := result.SingletonForTests("all_test_specs") 77 rule := singleton.Rule("all_test_specs_rule") 78 prebuiltOs := result.Config.PrebuiltOS() 79 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" 80 expectedOutputFile := "out/soong/ownership/all_test_specs.pb" 81 expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.pb" 82 if !strings.Contains( 83 strings.TrimSpace(rule.Output.String()), 84 expectedOutputFile, 85 ) { 86 t.Errorf( 87 "Retrieved singletonOutputFile: %s is not equal to expectedSingletonOutputFile: %s", 88 rule.Output.String(), expectedOutputFile, 89 ) 90 } 91 92 if !strings.Contains( 93 strings.TrimSpace(rule.Inputs[0].String()), 94 expectedInputFile, 95 ) { 96 t.Errorf( 97 "Retrieved singletonInputFile: %s is not equal to expectedSingletonInputFile: %s", 98 rule.Inputs[0].String(), expectedInputFile, 99 ) 100 } 101 102 if !strings.Contains( 103 strings.TrimSpace(rule.RuleParams.Command), 104 expectedCmd, 105 ) { 106 t.Errorf( 107 "Retrieved cmd: %s is not equal to expectedCmd: %s", 108 rule.RuleParams.Command, expectedCmd, 109 ) 110 } 111} 112 113func runTestSpecTest( 114 t *testing.T, errorHandler android.FixtureErrorHandler, bp string, 115) *android.TestResult { 116 return android.GroupFixturePreparers( 117 soongTesting.PrepareForTestWithTestingBuildComponents, 118 PrepareForIntegrationTestWithJava, 119 ). 120 ExtendWithErrorHandler(errorHandler). 121 RunTestWithBp(t, bp) 122} 123