BuildTargetUnitTest: Add empty sysroot option.

BUG=None
TEST=run_tests

Cq-Depend: chromium:1606067
Change-Id: I2ff9d3bbc8b4f00fc869cfaebc0a58b63471e449
Reviewed-on: https://chromium-review.googlesource.com/1605368
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Alex Klein <saklein@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Evan Hernandez <evanhernandez@chromium.org>
diff --git a/api/controller/test.py b/api/controller/test.py
index 428a8b1..aa0d541 100644
--- a/api/controller/test.py
+++ b/api/controller/test.py
@@ -55,6 +55,10 @@
   if not result_path:
     cros_build_lib.Die('result_path is required.')
 
+  # Method flags.
+  # An empty sysroot means build packages was not run.
+  was_built = not input_proto.flags.empty_sysroot
+
   # Chroot handling.
   chroot = input_proto.chroot.path
   cache_dir = input_proto.chroot.cache_dir
@@ -80,7 +84,7 @@
 
     try:
       commands.RunUnitTests(constants.SOURCE_ROOT, board, extra_env=extra_env,
-                            chroot_args=chroot_args)
+                            chroot_args=chroot_args, build_stage=was_built)
     except failures_lib.PackageBuildFailure as e:
       # Add the failed packages.
       for pkg in e.failed_packages:
diff --git a/api/controller/test_unittest.py b/api/controller/test_unittest.py
index 07daa6c..4ffdf34 100644
--- a/api/controller/test_unittest.py
+++ b/api/controller/test_unittest.py
@@ -7,11 +7,14 @@
 
 from __future__ import print_function
 
+import mock
+
 from chromite.api.controller import test as test_controller
 from chromite.api.gen.chromiumos import common_pb2
 from chromite.api.gen.chromite.api import image_pb2
 from chromite.api.gen.chromite.api import test_pb2
 from chromite.cbuildbot import commands
+from chromite.lib import constants
 from chromite.lib import cros_build_lib
 from chromite.lib import cros_test_lib
 from chromite.lib import failures_lib
@@ -23,11 +26,12 @@
   """Tests for the UnitTest function."""
 
   def _GetInput(self, board=None, result_path=None, chroot_path=None,
-                cache_dir=None):
+                cache_dir=None, empty_sysroot=None):
     """Helper to build an input message instance."""
     return test_pb2.BuildTargetUnitTestRequest(
         build_target={'name': board}, result_path=result_path,
-        chroot={'path': chroot_path, 'cache_dir': cache_dir}
+        chroot={'path': chroot_path, 'cache_dir': cache_dir},
+        flags={'empty_sysroot': empty_sysroot}
     )
 
   def _GetOutput(self):
@@ -115,17 +119,20 @@
     rce = cros_build_lib.RunCommandError('error',
                                          cros_build_lib.CommandResult())
     error = failures_lib.BuildScriptFailure(rce, 'shortname')
-    self.PatchObject(commands, 'RunUnitTests', side_effect=error)
+    patch = self.PatchObject(commands, 'RunUnitTests', side_effect=error)
     self.PatchObject(portage_util, 'ParseParallelEmergeStatusFile',
                      return_value=[])
 
-    input_msg = self._GetInput(board='board', result_path=self.tempdir)
+    input_msg = self._GetInput(board='board', result_path=self.tempdir,
+                               empty_sysroot=True)
     output_msg = self._GetOutput()
 
     rc = test_controller.BuildTargetUnitTest(input_msg, output_msg)
 
     self.assertNotEqual(0, rc)
     self.assertFalse(output_msg.failed_packages)
+    patch.assert_called_with(constants.SOURCE_ROOT, 'board', extra_env=mock.ANY,
+                             chroot_args=mock.ANY, build_stage=False)
 
 
 class VmTestTest(cros_test_lib.MockTestCase):