@Test
  public void testInstallMapping() throws Exception {
    final TestTimeSource timeSource = new TestTimeSource();
    AbstractOffHeapStore<String, String> offHeapStore =
        createAndInitStore(
            timeSource, Expirations.timeToIdleExpiration(new Duration(15L, TimeUnit.MILLISECONDS)));

    try {
      assertThat(
          offHeapStore
              .installMapping(
                  "1",
                  new Function<String, Store.ValueHolder<String>>() {
                    @Override
                    public Store.ValueHolder<String> apply(String key) {
                      return new SimpleValueHolder<String>("one", timeSource.getTimeMillis(), 15);
                    }
                  })
              .value(),
          equalTo("one"));

      validateStats(
          offHeapStore, EnumSet.of(LowerCachingTierOperationsOutcome.InstallMappingOutcome.PUT));

      timeSource.advanceTime(20);

      try {
        offHeapStore.installMapping(
            "1",
            new Function<String, Store.ValueHolder<String>>() {
              @Override
              public Store.ValueHolder<String> apply(String key) {
                return new SimpleValueHolder<String>("un", timeSource.getTimeMillis(), 15);
              }
            });
        fail("expected AssertionError");
      } catch (AssertionError ae) {
        // expected
      }
    } finally {
      destroyStore(offHeapStore);
    }
  }