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('/', '.');