/**
*
*/
package com.github.mrcritical.ironcache;
import java.net.URISyntaxException;
import java.util.List;
import java.util.UUID;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.github.mrcritical.ironcache.model.Cache;
import com.github.mrcritical.ironcache.model.CacheItemRequest;
import com.github.mrcritical.ironcache.model.CachedItem;
import com.google.api.client.util.Strings;
import com.google.common.base.Optional;
/**
* @author pjarrell
*
*/
public class DefaultIronCacheProviderIntegrationTest {
private static DefaultIronCacheProvider cacheProvider;
private static final int EXPIRATION_IN_SECONDS = 60 * 5;
private static final String TEST_CACHE_NAME_PREFIX = "Cache-Test-";
private static final String TEST_CACHE_PREFIX_KEY = "key-";
private static final String TEST_CACHE_PREFIX_NAME = "Test Item ";
private String cacheName;
private int index;
private void addToCache(final String cacheName, final int index, Object value) {
final CacheItemRequest request = CacheItemRequest.create().key(TEST_CACHE_PREFIX_KEY + index).value(value)
.expireAfter(EXPIRATION_IN_SECONDS).onlyIfNotExists();
cacheProvider.putItem(cacheName, request);
}
private void primeTheCache(final String cacheName) {
for (int i = 0; i < 10; i++) {
addToCache(cacheName, i, TEST_CACHE_PREFIX_NAME + index);
}
}
@Before
public void setUp() {
cacheProvider = new DefaultIronCacheProvider(System.getProperty("token"), System.getProperty("project_id"));
cacheName = TEST_CACHE_NAME_PREFIX + UUID.randomUUID().toString();
index++;
}
@After
public void tearDownAfter() {
try {
cacheProvider.deleteCache(cacheName);
} catch (Exception e) {
// Ignore since we are just trying to cleanup a bit
}
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#clearCache(java.lang.String)}
* .
*
* @throws URISyntaxException
*/
@Test
public void testClearCache() throws URISyntaxException {
// Add items to the cache first
primeTheCache(cacheName);
Assert.assertTrue(cacheProvider.getCache(cacheName).or(new Cache()).getSize() > 0);
cacheProvider.clearCache(cacheName);
Assert.assertTrue(cacheProvider.getCache(cacheName).get().getSize() == 0);
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#deleteCache(java.lang.String)}
* .
*/
@Test
public void testDeleteCache() {
addToCache(cacheName, index, TEST_CACHE_PREFIX_NAME + index);
cacheProvider.deleteCache(cacheName);
Assert.assertFalse(cacheProvider.getCache(cacheName).isPresent());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#deleteItem(java.lang.String, java.lang.String)}
* .
*/
@Test
public void testDeleteItem() {
addToCache(cacheName, index, TEST_CACHE_PREFIX_NAME + index);
Assert.assertTrue(cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index).isPresent());
cacheProvider.deleteItem(cacheName, TEST_CACHE_PREFIX_KEY + index);
Assert.assertFalse(cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index).isPresent());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#getCache(java.lang.String)}
* .
*/
@Test
public void testGetCache() {
addToCache(cacheName, index, TEST_CACHE_PREFIX_NAME + index);
Assert.assertTrue(cacheProvider.getCache(cacheName).isPresent());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#getItem(java.lang.String, java.lang.String)}
* .
*/
@Test
public void testGetItem() {
addToCache(cacheName, index, TEST_CACHE_PREFIX_NAME + index);
final Optional<CachedItem> item = cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index);
Assert.assertTrue(item.isPresent());
Assert.assertEquals(TEST_CACHE_PREFIX_KEY + index, item.get().getKey());
Assert.assertEquals(TEST_CACHE_PREFIX_NAME + index, item.get().getValue());
Assert.assertFalse(Strings.isNullOrEmpty(item.get().getCas()));
Assert.assertNotNull(item.get().getExpires());
}
@Test
public void testGetItem_UTF8() {
String hebrew = "אני אוהב שוקולד";
addToCache(cacheName, index, hebrew);
final Optional<CachedItem> item = cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index);
Assert.assertTrue(item.isPresent());
Assert.assertEquals(TEST_CACHE_PREFIX_KEY + index, item.get().getKey());
Assert.assertEquals(hebrew, item.get().getValue());
Assert.assertFalse(Strings.isNullOrEmpty(item.get().getCas()));
Assert.assertNotNull(item.get().getExpires());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#incrementItem(java.lang.String, java.lang.String, int)}
* .
*/
@Test
public void testIncrementItem() {
cacheProvider.putItem(cacheName, CacheItemRequest.create().key(TEST_CACHE_PREFIX_KEY + index).value(1)
.expireAfter(EXPIRATION_IN_SECONDS).onlyIfNotExists());
cacheProvider.incrementItem(cacheName, TEST_CACHE_PREFIX_KEY + index, 1);
final Optional<CachedItem> item = cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index);
Assert.assertEquals(2, item.get().getValue());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#listCaches()}
* .
*/
@Test
public void testListCaches() {
addToCache(cacheName, index, TEST_CACHE_PREFIX_NAME + index);
final List<Cache> caches = cacheProvider.listCaches();
Assert.assertTrue(caches.size() > 0);
Assert.assertNotNull(caches.get(0).getName());
Assert.assertNotNull(caches.get(0).getId());
Assert.assertNotNull(caches.get(0).getProjectId());
Assert.assertNull(caches.get(0).getSize());
}
/**
* Test method for
* {@link com.github.mrcritical.ironcache.DefaultIronCacheProvider#putItem(java.lang.String, com.github.mrcritical.ironcache.model.CacheItemRequest)}
* .
*/
@Test
public void testPutItem() {
cacheProvider.putItem(cacheName, CacheItemRequest.create().key(TEST_CACHE_PREFIX_KEY + index).value("1")
.expireAfter(EXPIRATION_IN_SECONDS).onlyIfNotExists());
Assert.assertTrue(cacheProvider.getItem(cacheName, TEST_CACHE_PREFIX_KEY + index).isPresent());
}
}