@Test
 public void testContainsKey() throws Exception {
   assertThat(store.containsKey(1L), is(false));
   store.put(1L, "one");
   assertThat(store.containsKey(1L), is(true));
   validateStat(store, StoreOperationOutcomes.GetOutcome.HIT, 0);
   validateStat(store, StoreOperationOutcomes.GetOutcome.MISS, 0);
 }
  @Test
  public void testClear() throws Exception {
    assertThat(store.containsKey(1L), is(false));
    store.clear();
    assertThat(store.containsKey(1L), is(false));

    store.put(1L, "one");
    store.put(2L, "two");
    store.put(3L, "three");
    assertThat(store.containsKey(1L), is(true));

    store.clear();

    assertThat(store.containsKey(1L), is(false));
    assertThat(store.containsKey(2L), is(false));
    assertThat(store.containsKey(3L), is(false));
  }
 @Test(expected = StoreAccessException.class)
 public void testContainsKeyThrowsOnlySAE() throws Exception {
   OperationsCodec<Long, String> codec = mock(OperationsCodec.class);
   ChainResolver chainResolver = mock(ChainResolver.class);
   ServerStoreProxy serverStoreProxy = mock(ServerStoreProxy.class);
   when(serverStoreProxy.get(anyLong())).thenThrow(new RuntimeException());
   TestTimeSource testTimeSource = mock(TestTimeSource.class);
   ClusteredStore<Long, String> store =
       new ClusteredStore<Long, String>(codec, chainResolver, serverStoreProxy, testTimeSource);
   store.containsKey(1L);
 }
 @Test
 public void testRemove() throws Exception {
   assertThat(store.remove(1L), is(false));
   validateStats(store, EnumSet.of(StoreOperationOutcomes.RemoveOutcome.MISS));
   store.put(1L, "one");
   assertThat(store.remove(1L), is(true));
   assertThat(store.containsKey(1L), is(false));
   validateStats(
       store,
       EnumSet.of(
           StoreOperationOutcomes.RemoveOutcome.MISS,
           StoreOperationOutcomes.RemoveOutcome.REMOVED));
 }