service/sdk: add additional parameters to clean

BUG=b:273941464
TEST=./run_tests.py

Change-Id: I25ec19e87322e3ebae1b808ee3c2b0aff33fb86d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4404617
Auto-Submit: George Engelbrecht <engeg@google.com>
Commit-Queue: Alex Klein <saklein@chromium.org>
Tested-by: George Engelbrecht <engeg@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: George Engelbrecht <engeg@google.com>
diff --git a/api/controller/sdk_unittest.py b/api/controller/sdk_unittest.py
index 56b70c5..009a1bf 100644
--- a/api/controller/sdk_unittest.py
+++ b/api/controller/sdk_unittest.py
@@ -130,8 +130,66 @@
         )
 
 
+class SdkCleanTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
+    """Clean tests."""
+
+    def setUp(self):
+        """Setup method."""
+        # We need to run the command outside the chroot.
+        self.PatchObject(cros_build_lib, "IsInsideChroot", return_value=False)
+        self.response = sdk_pb2.CleanResponse()
+
+    def _GetRequest(self, chroot_path=None, incrementals=False):
+        """Helper to build a clean request message."""
+        request = sdk_pb2.CleanRequest()
+        if chroot_path:
+            request.chroot.path = chroot_path
+
+        request.incrementals = incrementals
+
+        return request
+
+    def testMockCall(self):
+        """Sanity check that a mock call does not execute any logic."""
+        patch = self.PatchObject(sdk_service, "Clean")
+
+        rc = sdk_controller.Clean(
+            self._GetRequest(), self.response, self.mock_call_config
+        )
+        patch.assert_not_called()
+        self.assertFalse(rc)
+
+    def testSuccess(self):
+        """Test the successful call by verifying service invocation."""
+        patch = self.PatchObject(sdk_service, "Clean", return_value=0)
+
+        request = self._GetRequest(incrementals=True)
+
+        sdk_controller.Clean(request, self.response, self.api_config)
+        patch.assert_called_once_with(
+            mock.ANY,
+            safe=False,
+            images=False,
+            sysroots=False,
+            tmp=False,
+            cache=False,
+            logs=False,
+            workdirs=False,
+            incrementals=True,
+        )
+
+    def testDefaults(self):
+        """Test the successful call by verifying service invocation."""
+        patch = self.PatchObject(sdk_service, "Clean", return_value=0)
+
+        request = self._GetRequest()
+
+        sdk_controller.Clean(request, self.response, self.api_config)
+        patch.assert_called_once_with(mock.ANY, safe=True, sysroots=True)
+
+
 class SdkDeleteTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
-    """Create tests."""
+    """Delete tests."""
 
     def setUp(self):
         """Setup method."""