PackagesService: Add BuildsChrome endpoint.
Endpoint to check if a particular build target has chrome in
its depgraph. A more interesting implementation will come
later. Always returning True allows the endpoint to be called
by the recipes and doesn't change its behavior.
BUG=chromium:1009610
TEST=run_tests
Change-Id: I0dfe1ba6e3fa234459ad1de72e80de6139e0b1ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1832563
Tested-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
Reviewed-by: David Burger <dburger@chromium.org>
diff --git a/api/controller/packages.py b/api/controller/packages.py
index 12c8b7e..17b8263 100644
--- a/api/controller/packages.py
+++ b/api/controller/packages.py
@@ -127,3 +127,21 @@
exists = packages.has_prebuilt(constants.CHROME_CP, build_target=build_target)
output_proto.has_prebuilt = exists
+
+
+def _BuildsChromeSuccess(_input_proto, output_proto, _config):
+ """Mock success case for BuildsChrome."""
+ output_proto.builds_chrome = True
+
+
+@faux.success(_BuildsChromeSuccess)
+@faux.empty_error
+@validate.require('build_target.name')
+@validate.validation_complete
+def BuildsChrome(input_proto, output_proto, _config):
+ """Check if the board builds chrome."""
+ _build_target = controller_util.ParseBuildTarget(input_proto.build_target)
+
+ # TODO(saklein): Call implementation once it's been completed and add tests
+ # for successful endpoint executions.
+ output_proto.builds_chrome = True
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 58fe3d1..0d75d0c 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -258,3 +258,35 @@
with self.assertRaises(cros_build_lib.DieSystemExit):
packages_controller.HasChromePrebuilt(request, self.response,
self.api_config)
+
+
+class BuildsChromeTest(cros_test_lib.MockTestCase, ApiConfigMixin):
+ """BuildsChrome tests."""
+
+ def setUp(self):
+ self.response = packages_pb2.BuildsChromeResponse()
+
+ def _GetRequest(self, board=None):
+ """Helper to build out a request."""
+ request = packages_pb2.BuildsChromeRequest()
+
+ 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.BuildsChrome(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.BuildsChrome(request, self.response, self.api_config)