@Override
    public Mono<Void> cleanup(Backup backup) {
        return Mono.<Void>create(sink -> {
            var status = backup.getStatus();
            if (status == null || !StringUtils.hasText(status.getFilename())) {
                sink.success();
                return;
            }
            var filename = status.getFilename();
            var backupsRoot = getBackupsRoot();
            var backupFile = backupsRoot.resolve(filename);
            try {
                checkDirectoryTraversal(backupsRoot, backupFile);
                deleteIfExists(backupFile);
                sink.success();
            } catch (IOException e) {
                sink.error(e);
            }
        }).subscribeOn(scheduler);
    }
@Test
    void cleanupBackupWithNoFilename() {
        var backup = createSucceededBackup("fake-backup", null);
        StepVerifier.create(migrationService.cleanup(backup))
            .verifyComplete();
        verify(haloProperties, never()).getWorkDir();
        verify(backupRoot, never()).get();
    }