PackagesService: Add HasChromePrebuilt method.

BUG=chromium:950006
TEST=./run_tests

Change-Id: Ide1b570ebe0b3c770c04e3ab60848c8db608e625
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1808394
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 56db4ab..404d80b 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -9,7 +9,7 @@
 
 import mock
 
-from chromite.api import api_config
+from chromite.api.api_config import ApiConfigMixin
 from chromite.api.controller import packages as packages_controller
 from chromite.api.gen.chromite.api import binhost_pb2
 from chromite.api.gen.chromite.api import packages_pb2
@@ -20,7 +20,7 @@
 from chromite.service import packages as packages_service
 
 
-class UprevTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
+class UprevTest(cros_test_lib.MockTestCase, ApiConfigMixin):
   """Uprev tests."""
 
   _PUBLIC = binhost_pb2.OVERLAYTYPE_PUBLIC
@@ -88,8 +88,7 @@
     self.assertFalse(changed)
 
 
-class UprevVersionedPackageTest(cros_test_lib.MockTestCase,
-                                api_config.ApiConfigMixin):
+class UprevVersionedPackageTest(cros_test_lib.MockTestCase, ApiConfigMixin):
   """UprevVersionedPackage tests."""
 
   def setUp(self):
@@ -168,7 +167,7 @@
         [ebuild.path for ebuild in self.response.modified_ebuilds])
 
 
-class GetBestVisibleTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
+class GetBestVisibleTest(cros_test_lib.MockTestCase, ApiConfigMixin):
   """GetBestVisible tests."""
 
   def setUp(self):
@@ -224,3 +223,36 @@
     self.assertEqual(package_info.category, cpv.category)
     self.assertEqual(package_info.package_name, cpv.package)
     self.assertEqual(package_info.version, cpv.version)
+
+
+class HasChromePrebuiltTest(cros_test_lib.MockTestCase, ApiConfigMixin):
+  """HasChromePrebuilt tests."""
+
+  def setUp(self):
+    self.response = packages_pb2.HasChromePrebuiltResponse()
+
+  def _GetRequest(self, board=None):
+    """Helper to build out a request."""
+    request = packages_pb2.HasChromePrebuiltRequest()
+
+    if board:
+      request.build_target.name = board
+
+    return request
+
+  def testValidateOnly(self):
+    """Sanity check that a validate only call does not execute any logic."""
+    patch = self.PatchObject(packages_service, 'has_prebuilt')
+
+    request = self._GetRequest(board='betty')
+    packages_controller.HasChromePrebuilt(request, self.response,
+                                          self.validate_only_config)
+    patch.assert_not_called()
+
+  def testNoBuildTargetFails(self):
+    """No build target argument should fail."""
+    request = self._GetRequest()
+
+    with self.assertRaises(cros_build_lib.DieSystemExit):
+      packages_controller.HasChromePrebuilt(request, self.response,
+                                            self.api_config)