Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d30b940d authored by yelinhsieh's avatar yelinhsieh
Browse files

ATest: GTest auto gen config support run_test_as in Android.bp .

Feature request from developer, support setting uid in Android.bp.

Bug:113359343

Test: source build/envsetup.sh ; lunch
    vim platform_testing/tests/example/native/Android.bp
    add
    test_options: {
        run_test_as: "1234",
    },
    in cc_test
    make hello_world_test
    cat out/target/product/xxxx/testcases/hello_world_test/hello_world_test.config
    Will see  <option name="run-test-as" value="1234" />
    below <test class="com.android.tradefed.testtype.GTest" >

Change-Id: I5604af5f20c45728d19f4c01396a20a74997f8a8
parent 109029fb
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -31,6 +31,12 @@ type TestProperties struct {
	Isolated *bool
}

// Test option struct.
type TestOptions struct {
	// the UID that you want to run in device.
	Run_test_as string `android:"arch_variant"`
}

type TestBinaryProperties struct {
	// Create a separate binary for each source file.  Useful when there is
	// global state that can not be torn down and reset between each test suite.
@@ -56,6 +62,9 @@ type TestBinaryProperties struct {
	// the name of the test configuration template (for example "AndroidTestTemplate.xml") that
	// should be installed with the module.
	Test_config_template *string `android:"arch_variant"`

	// Test options.
	Test_options *TestOptions
}

func init() {
@@ -244,8 +253,16 @@ func (test *testBinary) linkerFlags(ctx ModuleContext, flags Flags) Flags {

func (test *testBinary) install(ctx ModuleContext, file android.Path) {
	test.data = ctx.ExpandSources(test.Properties.Data, nil)

	// Append new line in template like below
	// <option name="run-test-as" value="1234" />
	optionsMap := map[string]string{}
	if test.Properties.Test_options != nil {
		optionsMap["run-test-as"] = string(test.Properties.Test_options.Run_test_as)
	}

	test.testConfig = tradefed.AutoGenNativeTestConfig(ctx, test.Properties.Test_config,
		test.Properties.Test_config_template)
		test.Properties.Test_config_template, optionsMap)

	test.binaryDecorator.baseInstaller.dir = "nativetest"
	test.binaryDecorator.baseInstaller.dir64 = "nativetest64"
+30 −14
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
package tradefed

import (
	"fmt"
	"strings"

	"github.com/google/blueprint"
@@ -36,9 +37,10 @@ func getTestConfig(ctx android.ModuleContext, prop *string) android.Path {
}

var autogenTestConfig = pctx.StaticRule("autogenTestConfig", blueprint.RuleParams{
	Command:     "sed 's&{MODULE}&${name}&g' $template > $out",
	Command: "sed 's&{MODULE}&${name}&g' $template > $out &&" +
		"${optionCmd} $out",
	CommandDeps: []string{"$template"},
}, "name", "template")
}, "name", "template", "optionCmd")

func testConfigPath(ctx android.ModuleContext, prop *string) (path android.Path, autogenPath android.WritablePath) {
	if p := getTestConfig(ctx, prop); p != nil {
@@ -54,7 +56,20 @@ func testConfigPath(ctx android.ModuleContext, prop *string) (path android.Path,
	}
}

func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string) {
func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, optionsMap map[string]string) {
	// If no test option found, delete {UID_OPTION} line.
	// If found, replace it with corresponding options format.
	optionCmd := "sed -i '/{UID_OPTION}/d'"
	if optionsMap != nil {
		//Append options
		var options []string
		for optionName, value := range optionsMap {
			if value != "" {
				options = append(options, fmt.Sprintf("<option name=\"%s\" value=\"%s\" />", optionName, value))
			}
		}
		optionCmd = fmt.Sprintf("sed -i 's&{UID_OPTION}&%s&g'", strings.Join(options, "\\n        "))
	}
	ctx.Build(pctx, android.BuildParams{
		Rule:        autogenTestConfig,
		Description: "test config",
@@ -62,22 +77,23 @@ func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, tem
		Args: map[string]string{
			"name":      ctx.ModuleName(),
			"template":  template,
			"optionCmd": optionCmd,
		},
	})
}

func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string,
	testConfigTemplateProp *string) android.Path {
	testConfigTemplateProp *string, optionsMap map[string]string) android.Path {
	path, autogenPath := testConfigPath(ctx, testConfigProp)
	if autogenPath != nil {
		templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp)
		if templatePath.Valid() {
			autogenTemplate(ctx, autogenPath, templatePath.String())
			autogenTemplate(ctx, autogenPath, templatePath.String(), optionsMap)
		} else {
			if ctx.Device() {
				autogenTemplate(ctx, autogenPath, "${NativeTestConfigTemplate}")
				autogenTemplate(ctx, autogenPath, "${NativeTestConfigTemplate}", optionsMap)
			} else {
				autogenTemplate(ctx, autogenPath, "${NativeHostTestConfigTemplate}")
				autogenTemplate(ctx, autogenPath, "${NativeHostTestConfigTemplate}", optionsMap)
			}
		}
		return autogenPath
@@ -91,9 +107,9 @@ func AutoGenNativeBenchmarkTestConfig(ctx android.ModuleContext, testConfigProp
	if autogenPath != nil {
		templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp)
		if templatePath.Valid() {
			autogenTemplate(ctx, autogenPath, templatePath.String())
			autogenTemplate(ctx, autogenPath, templatePath.String(), nil)
		} else {
			autogenTemplate(ctx, autogenPath, "${NativeBenchmarkTestConfigTemplate}")
			autogenTemplate(ctx, autogenPath, "${NativeBenchmarkTestConfigTemplate}", nil)
		}
		return autogenPath
	}
@@ -105,12 +121,12 @@ func AutoGenJavaTestConfig(ctx android.ModuleContext, testConfigProp *string, te
	if autogenPath != nil {
		templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp)
		if templatePath.Valid() {
			autogenTemplate(ctx, autogenPath, templatePath.String())
			autogenTemplate(ctx, autogenPath, templatePath.String(), nil)
		} else {
			if ctx.Device() {
				autogenTemplate(ctx, autogenPath, "${JavaTestConfigTemplate}")
				autogenTemplate(ctx, autogenPath, "${JavaTestConfigTemplate}", nil)
			} else {
				autogenTemplate(ctx, autogenPath, "${JavaHostTestConfigTemplate}")
				autogenTemplate(ctx, autogenPath, "${JavaHostTestConfigTemplate}", nil)
			}
		}
		return autogenPath