@Test
public void testReturnsOldValueIfDelegateFails() throws Throwable {

  // Initial load
  var a = sut.get();
  assertThat(a, is(INITIAL_VALUE));
  verify(delegate, times(1)).get();
  // Make the supplier fail and progress time enough to trigger refresh
  when(delegate.get()).thenThrow(new RuntimeException("Fail!"));
  now = now.plus(TIMEOUT).plusSeconds(1);
  // Trigger refresh
  var b = sut.get();
  assertThat(b, is(INITIAL_VALUE));
  // Ensure that the old value is still returned (never observe another value)
  exception.expect(ConditionTimeoutException.class);
  await().atMost(5, SECONDS).until(() -> sut.get() != INITIAL_VALUE);
}