@@ -0,0 +1,1133 @@
+package replicant;%0A%0Aimport java.util.HashMap;%0Aimport java.util.Map;%0Aimport javax.annotation.Nonnull;%0Aimport javax.annotation.Nullable;%0Aimport replicant.spi.CacheEntry;%0Aimport replicant.spi.CacheService;%0A%0Apublic class TestCacheService%0A  implements CacheService%0A%7B%0A  private final Map%3CString, String%3E _data = new HashMap%3C%3E();%0A%0A  @Nullable%0A  @Override%0A  public CacheEntry lookup( @Nonnull final String key )%0A  %7B%0A    final String eTag = _data.get( key + %22ETAG%22 );%0A    final String content = _data.get( key );%0A    if ( null != eTag && null != content )%0A    %7B%0A      return new CacheEntry( key, eTag, content );%0A    %7D%0A    else%0A    %7B%0A      return null;%0A    %7D%0A  %7D%0A%0A  @Override%0A  public boolean store( @Nonnull final String key, @Nonnull final String eTag, @Nonnull final String content )%0A  %7B%0A    _data.put( key + %22ETAG%22, eTag );%0A    _data.put( key, content );%0A    return true;%0A%0A  %7D%0A%0A  @Override%0A  public boolean invalidate( @Nonnull final String key )%0A  %7B%0A    if ( !_data.containsKey( key + %22ETAG%22 ) )%0A    %7B%0A      return false;%0A    %7D%0A    else%0A    %7B%0A      _data.remove( key + %22ETAG%22 );%0A      _data.remove( key );%0A      return true;%0A    %7D%0A  %7D%0A%7D%0A

Add test CacheService