diff --git a/pkg/controller/backup_deletion_controller.go b/pkg/controller/backup_deletion_controller.go index 87e4eaaf8..c52a8cc5c 100644 --- a/pkg/controller/backup_deletion_controller.go +++ b/pkg/controller/backup_deletion_controller.go @@ -133,6 +133,14 @@ func (c *backupDeletionController) processRequest(req *v1.DeleteBackupRequest) e "backup": req.Spec.BackupName, }) + if req.Spec.BackupName == "" { + _, err := c.patchDeleteBackupRequest(req, func(r *v1.DeleteBackupRequest) { + r.Status.Phase = v1.DeleteBackupRequestPhaseProcessed + r.Status.Errors = []string{"spec.backupName is required"} + }) + return err + } + var err error // Update status to InProgress diff --git a/pkg/controller/backup_deletion_controller_test.go b/pkg/controller/backup_deletion_controller_test.go index 46f4d6364..d91086586 100644 --- a/pkg/controller/backup_deletion_controller_test.go +++ b/pkg/controller/backup_deletion_controller_test.go @@ -207,6 +207,27 @@ func setupBackupDeletionControllerTest(objects ...runtime.Object) *backupDeletio } func TestBackupDeletionControllerProcessRequest(t *testing.T) { + t.Run("missing spec.backupName", func(t *testing.T) { + td := setupBackupDeletionControllerTest() + defer td.backupService.AssertExpectations(t) + + td.req.Spec.BackupName = "" + + err := td.controller.processRequest(td.req) + require.NoError(t, err) + + expectedActions := []core.Action{ + core.NewPatchAction( + v1.SchemeGroupVersion.WithResource("deletebackuprequests"), + td.req.Namespace, + td.req.Name, + []byte(`{"status":{"errors":["spec.backupName is required"],"phase":"Processed"}}`), + ), + } + + assert.Equal(t, expectedActions, td.client.Actions()) + }) + t.Run("patching to InProgress fails", func(t *testing.T) { td := setupBackupDeletionControllerTest() defer td.backupService.AssertExpectations(t)