toolchain: Implement Chrome VerifyReleaseAfdoFile endpoints

This adds the Chrome AFDO release verifier support.
Support PrepareForBuild(..., additional_args=)

Unimplemented toolchain (Prepare/Bundle) endpoints now raise errors.

BUG=chromium:1019868
TEST=unit tests pass.

Change-Id: Ifa8f3e9cece1dce88293c8f213dbfac3398ae05e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2054757
Tested-by: LaMont Jones <lamontjones@chromium.org>
Commit-Queue: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Tiancong Wang <tcwang@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/toolchain_unittest.py b/api/controller/toolchain_unittest.py
index a139c25..60f091d 100644
--- a/api/controller/toolchain_unittest.py
+++ b/api/controller/toolchain_unittest.py
@@ -197,16 +197,14 @@
                                 self.prep, self.bundle),
     })
 
-  def _GetRequest(self, artifact_types=None):
-    if artifact_types is None:
-      artifact_types = []
+  def _GetRequest(
+      self, artifact_types=None, input_artifacts=None, additional_args=None):
     chroot = common_pb2.Chroot(path=self.tempdir)
     sysroot = sysroot_pb2.Sysroot(
         path='/build/board', build_target=common_pb2.BuildTarget(name='board'))
     return toolchain_pb2.PrepareForToolchainBuildRequest(
-        artifact_types=artifact_types,
-        chroot=chroot, sysroot=sysroot,
-    )
+        artifact_types=artifact_types, chroot=chroot, sysroot=sysroot,
+        input_artifacts=input_artifacts, additional_args=additional_args)
 
   def testRaisesForUnknown(self):
     request = self._GetRequest([BuilderConfig.Artifacts.IMAGE_ARCHIVES])
@@ -220,7 +218,7 @@
         chroot=None, sysroot=None)
     toolchain.PrepareForBuild(request, self.response, self.api_config)
     self.prep.assert_called_once_with(
-        'UnverifiedOrderingFile', None, '', '', {})
+        'UnverifiedOrderingFile', None, '', '', {}, {})
 
   def testHandlesUnknownInputArtifacts(self):
     request = toolchain_pb2.PrepareForToolchainBuildRequest(
@@ -232,7 +230,30 @@
         ])
     toolchain.PrepareForBuild(request, self.response, self.api_config)
     self.prep.assert_called_once_with(
-        'UnverifiedOrderingFile', None, '', '', {})
+        'UnverifiedOrderingFile', None, '', '', {}, {})
+
+  def testPassesAdditionalArgs(self):
+    request = toolchain_pb2.PrepareForToolchainBuildRequest(
+        artifact_types=[BuilderConfig.Artifacts.UNVERIFIED_ORDERING_FILE],
+        chroot=None, sysroot=None, input_artifacts=[
+            BuilderConfig.Artifacts.InputArtifactInfo(
+                input_artifact_type=\
+                    BuilderConfig.Artifacts.UNVERIFIED_ORDERING_FILE,
+                input_artifact_gs_locations=['path1', 'path2']),
+            BuilderConfig.Artifacts.InputArtifactInfo(
+                input_artifact_type=\
+                    BuilderConfig.Artifacts.UNVERIFIED_ORDERING_FILE,
+                input_artifact_gs_locations=['path3']),
+        ],
+        additional_args=common_pb2.PrepareForBuildAdditionalArgs(
+            chrome_cwp_profile='CWPVERSION'),
+    )
+    toolchain.PrepareForBuild(request, self.response, self.api_config)
+    self.prep.assert_called_once_with(
+        'UnverifiedOrderingFile', None, '', '', {
+            'UnverifiedOrderingFile': [
+                'gs://path1', 'gs://path2', 'gs://path3']},
+        {'chrome_cwp_profile': 'CWPVERSION'})
 
   def testHandlesDuplicateInputArtifacts(self):
     request = toolchain_pb2.PrepareForToolchainBuildRequest(
@@ -251,7 +272,7 @@
     self.prep.assert_called_once_with(
         'UnverifiedOrderingFile', None, '', '', {
             'UnverifiedOrderingFile': [
-                'gs://path1', 'gs://path2', 'gs://path3']})
+                'gs://path1', 'gs://path2', 'gs://path3']}, {})
 
 
 class BundleToolchainTest(cros_test_lib.MockTempDirTestCase,