| // 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 |
| Dynamic_config *bazel.Label |
| |
| Auto_generate_test_config *bool |
| Template_test_config *bazel.Label |
| Template_configs []string |
| Template_install_base *string |
| } |
| |
| func GetTestConfigAttributes( |
| ctx android.Bp2buildMutatorContext, |
| testConfig *string, |
| extraTestConfigs []string, |
| autoGenConfig *bool, |
| testSuites []string, |
| template *string, |
| templateConfigs []Config, |
| templateInstallBase *string) TestConfigAttributes { |
| |
| attrs := TestConfigAttributes{} |
| |
| dynamicConfig := "DynamicConfig.xml" |
| c, _ := android.BazelStringOrLabelFromProp(ctx, &dynamicConfig) |
| attrs.Dynamic_config = c.Value |
| |
| 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.Bp2buildMutatorContext, |
| 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 := "AndroidTest.xml" |
| c, _ := android.BazelStringOrLabelFromProp(ctx, &defaultTestConfigPath) |
| return c.Value |
| } |