api: create dlc controller
Create DLC service, and call out to generate DLC artifacts. This
includes regenerating the protos to pick up the new service definitions.
BUG=b:286327155
TEST=unit-test
Change-Id: Ie56507c6f83a55f4323a9c2c7050057fba43dab0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4799328
Commit-Queue: Alex Klein <saklein@chromium.org>
Auto-Submit: Benjamin Shai <bshai@google.com>
Reviewed-by: Jae Hoon Kim <kimjae@chromium.org>
Tested-by: Benjamin Shai <bshai@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/dlc_unittest.py b/api/controller/dlc_unittest.py
new file mode 100644
index 0000000..ac5f969
--- /dev/null
+++ b/api/controller/dlc_unittest.py
@@ -0,0 +1,68 @@
+# Copyright 2023 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""DLC service tests."""
+
+from chromite.api import api_config
+from chromite.api.controller import dlc as dlc_controller
+from chromite.api.gen.chromite.api import dlc_pb2
+from chromite.api.gen.chromite.api import sysroot_pb2
+from chromite.lib import cros_test_lib
+from chromite.service import image
+
+
+class GenerateDlcArtifactsListTest(
+ cros_test_lib.MockTempDirTestCase, api_config.ApiConfigMixin
+):
+ """Tests for GenerateDLcArtifactsList."""
+
+ def setUp(self):
+ self.response = dlc_pb2.GenerateDlcArtifactsListResponse()
+ self.sysroot_path = "/build/target"
+
+ def _InputProto(self):
+ in_proto = dlc_pb2.GenerateDlcArtifactsListRequest(
+ sysroot=sysroot_pb2.Sysroot(path=self.sysroot_path),
+ )
+ in_proto.chroot.path = "path"
+ return in_proto
+
+ def testNoDlcArtifacts(self):
+ """Test for no artifacts being returned."""
+ self.PatchObject(
+ image, "generate_dlc_artifacts_metadata_list", return_value=[]
+ )
+ in_proto = self._InputProto()
+ dlc_controller.GenerateDlcArtifactsList(
+ in_proto, self.response, self.api_config
+ )
+
+ self.assertEqual(len(self.response.dlc_artifacts), 0)
+
+ def testDlcArtifactsSuccess(self):
+ """Test for successfully returning artifacts."""
+ self.PatchObject(
+ image,
+ "generate_dlc_artifacts_metadata_list",
+ return_value=[
+ image.DlcArtifactsMetadata(
+ image_hash="deadbeef",
+ image_name="dlc.img",
+ uri_path="gs://some/uri/prefix/for/dlc-1",
+ )
+ ],
+ )
+ in_proto = self._InputProto()
+ dlc_controller.GenerateDlcArtifactsList(
+ in_proto, self.response, self.api_config
+ )
+
+ self.assertEqual(
+ self.response.dlc_artifacts[0],
+ dlc_pb2.GenerateDlcArtifactsListResponse.DlcArtifact(
+ image_hash="deadbeef",
+ image_name="dlc.img",
+ gs_uri_path="gs://some/uri/prefix/for/dlc-1",
+ ),
+ )