public Duration getServerTimeoutOrThrow() {
        // readTimeout = DOWNSTREAM_OVERHEAD + serverTimeout
        TimeBudget serverBudget = readBudget().withReserved(DOWNSTREAM_OVERHEAD);
        if (serverBudget.timeLeft().get().compareTo(MIN_SERVER_TIMEOUT) < 0)
            throw new UncheckedTimeoutException("Timed out after " + timeBudget.originalTimeout().get());

        return serverBudget.timeLeft().get();
    }
@Test
    public void justEnoughTime() {
        clock.advance(originalTimeout.minus(MINIMUM_TIME_LEFT));
        timeouts.getServerTimeoutOrThrow();
    }