Add tradefed attributes to cc_test bazel macro
The BUILD file will now have the needed attributes to run the tradefed
test rules.
Test: b test //packages/modules/adb:adbd_test --platforms=//build/bazel/platforms:android_target
Change-Id: I5cb84ccdde27a7fadbef479269df594344a29187
diff --git a/tradefed/autogen_bazel.go b/tradefed/autogen_bazel.go
new file mode 100644
index 0000000..d3109d9
--- /dev/null
+++ b/tradefed/autogen_bazel.go
@@ -0,0 +1,105 @@
+// Copyright 2022 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package tradefed
+
+import (
+ "android/soong/android"
+ "android/soong/bazel"
+
+ "github.com/google/blueprint/proptools"
+)
+
+const (
+ InstrumentationTestConfigTemplate = "build/make/core/instrumentation_test_config_template.xml"
+ JavaTestConfigTemplate = "build/make/core/java_test_config_template.xml"
+ JavaHostTestConfigTemplate = "build/make/core/java_host_test_config_template.xml"
+ JavaHostUnitTestConfigTemplate = "build/make/core/java_host_unit_test_config_template.xml"
+ NativeBenchmarkTestConfigTemplate = "build/make/core/native_benchmark_test_config_template.xml"
+ NativeHostTestConfigTemplate = "build/make/core/native_host_test_config_template.xml"
+ NativeTestConfigTemplate = "build/make/core/native_test_config_template.xml"
+ PythonBinaryHostTestConfigTemplate = "build/make/core/python_binary_host_test_config_template.xml"
+ RustDeviceTestConfigTemplate = "build/make/core/rust_device_test_config_template.xml"
+ RustHostTestConfigTemplate = "build/make/core/rust_host_test_config_template.xml"
+ RustDeviceBenchmarkConfigTemplate = "build/make/core/rust_device_benchmark_config_template.xml"
+ RustHostBenchmarkConfigTemplate = "build/make/core/rust_host_benchmark_config_template.xml"
+ RobolectricTestConfigTemplate = "build/make/core/robolectric_test_config_template.xml"
+ ShellTestConfigTemplate = "build/make/core/shell_test_config_template.xml"
+)
+
+type TestConfigAttributes struct {
+ Test_config *bazel.Label
+
+ Auto_generate_test_config *bool
+ Template_test_config *bazel.Label
+ Template_configs []string
+ Template_install_base *string
+}
+
+func GetTestConfigAttributes(
+ ctx android.TopDownMutatorContext,
+ testConfig *string,
+ extraTestConfigs []string,
+ autoGenConfig *bool,
+ testSuites []string,
+ template *string,
+ templateConfigs []Config,
+ templateInstallBase *string) TestConfigAttributes {
+
+ attrs := TestConfigAttributes{}
+ attrs.Test_config = GetTestConfig(ctx, testConfig)
+ // do not generate a test config if
+ // 1) test config already found
+ // 2) autoGenConfig == false
+ // 3) CTS tests and no template specified.
+ // CTS Modules can be used for test data, so test config files must be explicitly specified.
+ if (attrs.Template_test_config != nil) ||
+ proptools.Bool(autoGenConfig) == false ||
+ (template == nil && !android.InList("cts", testSuites)) {
+
+ return attrs
+ }
+
+ // Add properties for the bazel rule to generate a test config
+ // since a test config was not specified.
+ templateLabel := android.BazelLabelForModuleSrcSingle(ctx, *template)
+ attrs.Template_test_config = &templateLabel
+ attrs.Auto_generate_test_config = autoGenConfig
+ var configStrings []string
+ for _, c := range templateConfigs {
+ configString := proptools.NinjaAndShellEscape(c.Config())
+ configStrings = append(configStrings, configString)
+ }
+ attrs.Template_configs = configStrings
+ attrs.Template_install_base = templateInstallBase
+ return attrs
+}
+
+func GetTestConfig(
+ ctx android.TopDownMutatorContext,
+ testConfig *string,
+) *bazel.Label {
+
+ if testConfig != nil {
+ c, _ := android.BazelStringOrLabelFromProp(ctx, testConfig)
+ if c.Value != nil {
+ return c.Value
+ }
+ }
+
+ // check for default AndroidTest.xml
+ defaultTestConfigPath := ctx.ModuleDir() + "/AndroidTest.xml"
+ c, _ := android.BazelStringOrLabelFromProp(ctx, &defaultTestConfigPath)
+ return c.Value
+}