@Test
public void testDeleteKey() throws Exception {

  KeyProvider.KeyVersion mockKey = Mockito.mock(KeyProvider.KeyVersion.class);
  KeyProvider mockProv = Mockito.mock(KeyProvider.class);
  Mockito.when(mockProv.getCurrentKey(Mockito.eq("k1"))).thenReturn(mockKey);
  Mockito.when(mockProv.getKeyVersion(Mockito.eq("k1@0"))).thenReturn(mockKey);
  Mockito.when(mockProv.getMetadata(Mockito.eq("k1"))).thenReturn(
      new KMSClientProvider.KMSMetadata("c", 0, "l", new Date(), 1));
  KeyProvider cache = new KMSCacheKeyProvider(mockProv, 100);
  Assert.assertEquals(mockKey, cache.getCurrentKey("k1"));
  Mockito.verify(mockProv, Mockito.times(1)).getCurrentKey(Mockito.eq("k1"));
  Assert.assertEquals(mockKey, cache.getKeyVersion("k1@0"));
  Mockito.verify(mockProv, Mockito.times(1)).getKeyVersion(Mockito.eq("k1@0"));
  cache.deleteKey("k1");
  // asserting the cache is purged
  Assert.assertEquals(mockKey, cache.getCurrentKey("k1"));
  Mockito.verify(mockProv, Mockito.times(2)).getCurrentKey(Mockito.eq("k1"));
  Assert.assertEquals(mockKey, cache.getKeyVersion("k1@0"));
  Mockito.verify(mockProv, Mockito.times(2)).getKeyVersion(Mockito.eq("k1@0"));
}