api: Implement ToolchainService/SetupToolchains
It's a fancy pass-through to `cros_setup_toolchains`.
BUG=b:289436363
TEST=./run_tests
Change-Id: Ia5e0dffa002e389a8031e116a3b857b194199b3d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4659850
Commit-Queue: Greg Edelston <gredelston@google.com>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Auto-Submit: Greg Edelston <gredelston@google.com>
Tested-by: Greg Edelston <gredelston@google.com>
diff --git a/api/controller/toolchain_unittest.py b/api/controller/toolchain_unittest.py
index 8ab8c3d..1f4332a 100644
--- a/api/controller/toolchain_unittest.py
+++ b/api/controller/toolchain_unittest.py
@@ -19,6 +19,7 @@
from chromite.lib import osutils
from chromite.lib import toolchain as toolchain_lib
from chromite.lib import toolchain_util
+from chromite.service import toolchain as toolchain_service
# pylint: disable=protected-access
@@ -460,3 +461,49 @@
self.response.nondefault_toolchains,
["nondefault-a", "nondefault-b"],
)
+
+
+class SetupToolchainsTest(cros_test_lib.MockTestCase,
+ api_config.ApiConfigMixin):
+ """Unit tests for ToolchainService.SetupToolchains."""
+ def setUp(self) -> None:
+ self.response = toolchain_pb2.SetupToolchainsResponse()
+ self.chroot = common_pb2.Chroot(path='/path/to/chroot')
+
+ def test_outside_chroot(self) -> None:
+ """Test the behavior if run from outside the chroot."""
+ self.PatchObject(cros_build_lib, "IsInsideChroot", return_value=False)
+ self.PatchObject(toolchain_service, "setup_toolchains")
+ request = toolchain_pb2.SetupToolchainsRequest(chroot=self.chroot)
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ toolchain.SetupToolchains(request, self.response, self.api_config)
+
+ def test_with_empty_request(self) -> None:
+ """Test the behavior if the request object is empty."""
+ self.PatchObject(cros_build_lib, "IsInsideChroot", return_value=True)
+ service_mock = self.PatchObject(toolchain_service, "setup_toolchains")
+ request = toolchain_pb2.SetupToolchainsRequest(chroot=self.chroot)
+ toolchain.SetupToolchains(
+ request,
+ self.response,
+ self.api_config,
+ )
+ service_mock.assert_called_once_with(include_boards=[])
+
+ def test_with_boards(self) -> None:
+ """Test the behavior if the request object specifies boards."""
+ self.PatchObject(cros_build_lib, "IsInsideChroot", return_value=True)
+ service_mock = self.PatchObject(toolchain_service, "setup_toolchains")
+ request = toolchain_pb2.SetupToolchainsRequest(
+ chroot=self.chroot,
+ boards=[
+ common_pb2.BuildTarget(name="amd64-generic"),
+ common_pb2.BuildTarget(name="arm-generic"),
+ ])
+ toolchain.SetupToolchains(
+ request,
+ self.response,
+ self.api_config,
+ )
+ service_mock.assert_called_once_with(
+ include_boards=["amd64-generic", "arm-generic"], )