Ensure Yaml commands can parse with args
Test: unit tests
Bug: 157091025
Change-Id: I5011f8cf6b0aee248e5539022e04e26956634bcf
diff --git a/src/com/android/tradefed/build/DependenciesResolver.java b/src/com/android/tradefed/build/DependenciesResolver.java
index d724508..942faa2 100644
--- a/src/com/android/tradefed/build/DependenciesResolver.java
+++ b/src/com/android/tradefed/build/DependenciesResolver.java
@@ -61,6 +61,7 @@
IDeviceBuildInfo build =
new DeviceBuildInfo(
mBuildId, String.format("%s-%s-%s", mBranch, mBuildOs, mBuildFlavor));
+ build.setBuildBranch(mBranch);
build.setBuildFlavor(mBuildFlavor);
for (File dependency : mDependencies) {
File f =
diff --git a/src/com/android/tradefed/config/ConfigurationFactory.java b/src/com/android/tradefed/config/ConfigurationFactory.java
index c682694..eed134d 100644
--- a/src/com/android/tradefed/config/ConfigurationFactory.java
+++ b/src/com/android/tradefed/config/ConfigurationFactory.java
@@ -520,6 +520,7 @@
if (arrayArgs.length == 0) {
throw new ConfigurationException("Configuration to run was not specified");
}
+
List<String> listArgs = new ArrayList<String>(arrayArgs.length);
// FIXME: Update parsing to not care about arg order.
String[] reorderedArrayArgs = reorderArgs(arrayArgs);
@@ -616,6 +617,14 @@
}
}
return parserSettings.templateMap.getUniqueMap();
+ case ".tf_yaml":
+ // We parse the arguments but don't support template for YAML
+ final ArgsOptionParser allArgsParser = new ArgsOptionParser();
+ if (keyStoreClient != null) {
+ allArgsParser.setKeyStore(keyStoreClient);
+ }
+ optionArgsRef.addAll(allArgsParser.parseBestEffort(listArgs));
+ return new HashMap<>();
default:
return new HashMap<>();
}
diff --git a/src/com/android/tradefed/config/yaml/OpenObjectLoader.java b/src/com/android/tradefed/config/yaml/OpenObjectLoader.java
index f5c5d06..a5c43ad 100644
--- a/src/com/android/tradefed/config/yaml/OpenObjectLoader.java
+++ b/src/com/android/tradefed/config/yaml/OpenObjectLoader.java
@@ -18,6 +18,7 @@
import com.android.tradefed.build.DependenciesResolver;
import com.android.tradefed.config.Configuration;
import com.android.tradefed.config.OptionSetter;
+import com.android.tradefed.log.FileLogger;
import com.android.tradefed.result.suite.SuiteResultReporter;
/** Loader for the default objects available in AOSP. */
@@ -25,11 +26,17 @@
@Override
public void addDefaultObjects(LoaderConfiguration loadConfiguration) {
+ // Logger
+ loadConfiguration
+ .getConfigDef()
+ .addConfigObjectDef(Configuration.LOGGER_TYPE_NAME, FileLogger.class.getName());
+ // Result Reporters
loadConfiguration
.getConfigDef()
.addConfigObjectDef(
Configuration.RESULT_REPORTER_TYPE_NAME,
SuiteResultReporter.class.getName());
+ // Build
int classCount =
loadConfiguration
.getConfigDef()
diff --git a/tests/src/com/android/tradefed/config/ConfigurationFactoryTest.java b/tests/src/com/android/tradefed/config/ConfigurationFactoryTest.java
index 53e268c..ffa3255 100644
--- a/tests/src/com/android/tradefed/config/ConfigurationFactoryTest.java
+++ b/tests/src/com/android/tradefed/config/ConfigurationFactoryTest.java
@@ -16,6 +16,9 @@
package com.android.tradefed.config;
import com.android.ddmlib.Log.LogLevel;
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.build.IBuildProvider;
+import com.android.tradefed.build.IDeviceBuildProvider;
import com.android.tradefed.build.LocalDeviceBuildProvider;
import com.android.tradefed.config.ConfigurationDef.ConfigObjectDef;
import com.android.tradefed.config.ConfigurationFactory.ConfigId;
@@ -1801,6 +1804,28 @@
}
}
+ /** Test that a YAML config command line parse correctly. */
+ public void testCreateConfigurationFromArgs_yaml() throws Exception {
+ IConfiguration config =
+ mFactory.createConfigurationFromArgs(
+ new String[] {
+ "yaml/test-config.tf_yaml",
+ "--build-id",
+ "5",
+ "--build-flavor",
+ "test",
+ "--branch",
+ "main"
+ });
+ assertNotNull(config);
+ IBuildProvider provider = config.getBuildProvider();
+ assertTrue(provider instanceof IDeviceBuildProvider);
+ IBuildInfo info = ((IDeviceBuildProvider) provider).getBuild(null);
+ assertEquals("5", info.getBuildId());
+ assertEquals("test", info.getBuildFlavor());
+ assertEquals("main", info.getBuildBranch());
+ }
+
private static String getClassName(String name) {
// -6 because of .class
return name.substring(0, name.length() - 6).replace('/', '.');