package java import ( "strings" "testing" "android/soong/android" soongTesting "android/soong/testing" "android/soong/testing/test_spec_proto" "google.golang.org/protobuf/proto" ) func TestTestSpec(t *testing.T) { bp := `test_spec { name: "module-name", teamId: "12345", tests: [ "java-test-module-name-one", "java-test-module-name-two" ] } java_test { name: "java-test-module-name-one", } java_test { name: "java-test-module-name-two", }` result := runTestSpecTest(t, android.FixtureExpectsNoErrors, bp) module := result.ModuleForTests("module-name", "") // Check that the provider has the right contents data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.TestSpecProviderKey) if !strings.HasSuffix( data.IntermediatePath.String(), "/intermediateTestSpecMetadata.pb", ) { t.Errorf( "Missing intermediates path in provider: %s", data.IntermediatePath.String(), ) } metadata := android.ContentFromFileRuleForTests(t, result.TestContext, module.Output(data.IntermediatePath.String())) metadataList := make([]*test_spec_proto.TestSpec_OwnershipMetadata, 0, 2) teamId := "12345" bpFilePath := "Android.bp" targetNames := []string{ "java-test-module-name-one", "java-test-module-name-two", } for _, test := range targetNames { targetName := test metadata := test_spec_proto.TestSpec_OwnershipMetadata{ TrendyTeamId: &teamId, TargetName: &targetName, Path: &bpFilePath, } metadataList = append(metadataList, &metadata) } testSpecMetadata := test_spec_proto.TestSpec{OwnershipMetadataList: metadataList} protoData, _ := proto.Marshal(&testSpecMetadata) expectedMetadata := string(protoData) if metadata != expectedMetadata { t.Errorf( "Retrieved metadata: %s doesn't contain expectedMetadata: %s", metadata, expectedMetadata, ) } // Tests for all_test_spec singleton. singleton := result.SingletonForTests("all_test_specs") rule := singleton.Rule("all_test_specs_rule") prebuiltOs := result.Config.PrebuiltOS() 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" expectedOutputFile := "out/soong/ownership/all_test_specs.pb" expectedInputFile := "out/soong/.intermediates/module-name/intermediateTestSpecMetadata.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 is not equal to expectedCmd: %s", rule.RuleParams.Command, expectedCmd, ) } } func runTestSpecTest( t *testing.T, errorHandler android.FixtureErrorHandler, bp string, ) *android.TestResult { return android.GroupFixturePreparers( soongTesting.PrepareForTestWithTestingBuildComponents, PrepareForIntegrationTestWithJava, ). ExtendWithErrorHandler(errorHandler). RunTestWithBp(t, bp) }