### Question:
KMSCacheKeyProvider extends KeyProvider { @Override public void deleteKey(String name) throws IOException { Metadata metadata = provider.getMetadata(name); List<String> versions = new ArrayList<String>(metadata.getVersions()); for (int i = 0; i < metadata.getVersions(); i++) { versions.add(KeyProvider.buildVersionName(name, i)); } provider.deleteKey(name); currentKeyCache.invalidate(name); keyVersionCache.invalidateAll(versions); } KMSCacheKeyProvider(KeyProvider prov, long timeoutMillis); @Override KeyVersion getCurrentKey(String name); @Override KeyVersion getKeyVersion(String versionName); @Override List<String> getKeys(); @Override List<KeyVersion> getKeyVersions(String name); @Override Metadata getMetadata(String name); @Override KeyVersion createKey(String name, byte[] material,
      Options options); @Override KeyVersion createKey(String name,
      Options options); @Override void deleteKey(String name); @Override KeyVersion rollNewVersion(String name, byte[] material); @Override KeyVersion rollNewVersion(String name); @Override void flush(); @Override Metadata[] getKeysMetadata(String ... keyNames); @Override boolean isTransient();  }### Answer:
@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"); 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")); }