Initial impl of BuildTestServiceContainers

Runs all of the docker test container builds outside of the chroot.

BUG=b:190822895
TEST=unit

Change-Id: I1cba3a2184d324e0c7dbe2eaf809a805fb6f9f7a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2970303
Tested-by: C Shapiro <shapiroc@chromium.org>
Auto-Submit: C Shapiro <shapiroc@chromium.org>
Commit-Queue: C Shapiro <shapiroc@chromium.org>
Reviewed-by: Mike Nichols <mikenichols@chromium.org>
diff --git a/api/controller/test_unittest.py b/api/controller/test_unittest.py
index 180aea0..9c08098 100644
--- a/api/controller/test_unittest.py
+++ b/api/controller/test_unittest.py
@@ -266,6 +266,50 @@
                      os.path.join(input_msg.result_path, 'unit_tests.tar'))
 
 
+class BuildTestServiceContainers(cros_test_lib.MockTestCase,
+                           api_config.ApiConfigMixin):
+  """Tests for the BuildTestServiceContainers function."""
+
+  def setUp(self):
+    self.request = test_pb2.BuildTestServiceContainersRequest(
+        chroot={'path': '/path/to/chroot'},
+        build_target={'name': 'build_target'},
+        version = 'R93-14033.0.0',
+    )
+
+
+  def testSuccess(self):
+    """Check passing case with mocked cros_build_lib.run."""
+    patch = self.PatchObject(
+        cros_build_lib, 'run',
+        return_value=cros_build_lib.CommandResult(returncode=0))
+
+    response = test_pb2.BuildTestServiceContainersResponse()
+    test_controller.BuildTestServiceContainers(
+        self.request,
+        response,
+        self.api_config)
+    patch.assert_called()
+    for result in response.results:
+      self.assertEqual(result.WhichOneof('result'), 'success')
+
+
+  def testFailure(self):
+    """Check failure case with mocked cros_build_lib.run."""
+    patch = self.PatchObject(
+        cros_build_lib, 'run',
+        return_value=cros_build_lib.CommandResult(returncode=1))
+
+    response = test_pb2.BuildTestServiceContainersResponse()
+    test_controller.BuildTestServiceContainers(
+        self.request,
+        response,
+        self.api_config)
+    patch.assert_called()
+    for result in response.results:
+      self.assertEqual(result.WhichOneof('result'), 'failure')
+
+
 class ChromiteUnitTestTest(cros_test_lib.MockTestCase,
                            api_config.ApiConfigMixin):
   """Tests for the ChromiteInfoTest function."""