31a674571e
Writing raw files as rules in the ninja file unnecessarily bloats the ninja file. Write files immediately to disk instead to files based on the hash of the contents, and then emit ninja rules to copy the files into place during the build. Delete obsolete files in a singleton at the end of analysis. Bug: 306029038 Test: Run: m libc_musl_version.h touch build/soong/Android.bp m libc_musl_version.h libc_musl_version.h/genrule.sbox.textproto is not recopied. Test: Run: lunch aosp_cf_x86_64_phone-userdebug m libc_musl_version.h lunch aosp_x86_64-userdebug m libc_musl_version.h lunch aosp_cf_x86_64_phone-userdebug m libc_musl_version.h libc_musl_version.h/genrule.sbox.textproto is recopied but restat prevents rerunning the genrule. Test: Run: touch out/soong/raw-aosp_cf_x86_64_phone/00/foo touch build/soong/Android.bp m nothing out/soong/raw-aosp_cf_x86_64_phone/00/foo is removed. Change-Id: I172869c4d49565504794c051e2e8c1f7cf46486e
114 lines
3.3 KiB
Go
114 lines
3.3 KiB
Go
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", "")
|
|
|
|
// Check that the provider has the right contents
|
|
data, _ := android.SingletonModuleProvider(result, module.Module(), soongTesting.CodeMetadataProviderKey)
|
|
if !strings.HasSuffix(
|
|
data.IntermediatePath.String(), "/intermediateCodeMetadata.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([]*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)
|
|
expectedMetadata := string(protoData)
|
|
|
|
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)
|
|
}
|