Add Singleton class to collect and validate test spec metadata.
Bug: 296873595 Test: Manual testing (Will add unit test case in the next change.) Change-Id: Ic4177c5f76602088d52a31ca8d9fbaa703855837
This commit is contained in:
@@ -12,6 +12,7 @@ bootstrap_go_package {
|
||||
|
||||
],
|
||||
srcs: [
|
||||
"all_test_specs.go",
|
||||
"test_spec.go",
|
||||
"init.go",
|
||||
],
|
||||
|
45
testing/all_test_specs.go
Normal file
45
testing/all_test_specs.go
Normal file
@@ -0,0 +1,45 @@
|
||||
package testing
|
||||
|
||||
import (
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
const ownershipDirectory = "ownership"
|
||||
const fileContainingFilePaths = "all_test_spec_paths.rsp"
|
||||
const allTestSpecsFile = "all_test_specs.pb"
|
||||
|
||||
func AllTestSpecsFactory() android.Singleton {
|
||||
return &allTestSpecsSingleton{}
|
||||
}
|
||||
|
||||
type allTestSpecsSingleton struct {
|
||||
// Path where the collected metadata is stored after successful validation.
|
||||
outputPath android.OutputPath
|
||||
}
|
||||
|
||||
func (this *allTestSpecsSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
||||
var intermediateMetadataPaths android.Paths
|
||||
|
||||
ctx.VisitAllModules(func(module android.Module) {
|
||||
if !ctx.ModuleHasProvider(module, testSpecProviderKey) {
|
||||
return
|
||||
}
|
||||
intermediateMetadataPaths = append(intermediateMetadataPaths, ctx.ModuleProvider(module, testSpecProviderKey).(testSpecProviderData).IntermediatePath)
|
||||
})
|
||||
|
||||
rspFile := android.PathForOutput(ctx, fileContainingFilePaths)
|
||||
this.outputPath = android.PathForOutput(ctx, ownershipDirectory, allTestSpecsFile)
|
||||
|
||||
rule := android.NewRuleBuilder(pctx, ctx)
|
||||
cmd := rule.Command().
|
||||
BuiltTool("metadata").
|
||||
FlagWithArg("-rule ", "test_spec").
|
||||
FlagWithRspFileInputList("-inputFile ", rspFile, intermediateMetadataPaths)
|
||||
cmd.FlagWithOutput("-outputFile ", this.outputPath)
|
||||
rule.Build("all_test_specs_rule", "Generate all test specifications")
|
||||
ctx.Phony("all_test_specs", this.outputPath)
|
||||
}
|
||||
|
||||
func (this *allTestSpecsSingleton) MakeVars(ctx android.MakeVarsContext) {
|
||||
ctx.DistForGoal("test_specs", this.outputPath)
|
||||
}
|
@@ -18,10 +18,16 @@ import (
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
var (
|
||||
pctx = android.NewPackageContext("android/soong/testing")
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterBuildComponents(android.InitRegistrationContext)
|
||||
pctx.HostBinToolVariable("metadata", "metadata")
|
||||
}
|
||||
|
||||
func RegisterBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("test_spec", TestSpecFactory)
|
||||
ctx.RegisterParallelSingletonType("all_test_specs", AllTestSpecsFactory)
|
||||
}
|
||||
|
Reference in New Issue
Block a user