@Override
  public void deleteKey(String name) throws IOException {
    getKeyProvider().deleteKey(name);
    getExtension().currentKeyCache.invalidate(name);
    getExtension().keyMetadataCache.invalidate(name);
    // invalidating all key versions as we don't know
    // which ones belonged to the deleted key
    getExtension().keyVersionCache.invalidateAll();
  }
@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", null, new Date(), 1));
    Mockito.when(mockProv.getConf()).thenReturn(new Configuration());
    KeyProvider cache = new CachingKeyProvider(mockProv, 100, 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"));
  }