@Override @Nonnull
    public ProgressState call() {
        assert state != END : "already in terminal state";
        progTracker.reset();
        progTracker.notDone();
        outbox.reset();
        stateMachineStep();
        return progTracker.toProgressState();
    }
@Test
    public void when_closeBlocked_then_waitUntilDone() {
        processor.doneLatch = new CountDownLatch(1);
        ProcessorTasklet tasklet = createTasklet(ForkJoinPool.commonPool());
        callUntil(tasklet, NO_PROGRESS);
        processor.doneLatch.countDown();
        assertTrueEventually(() -> assertEquals(DONE, tasklet.call()), 2);
    }