package com.ctriposs.bigcache.storage; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import org.junit.After; import org.junit.AfterClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import com.ctriposs.bigcache.utils.FileUtil; import com.ctriposs.bigcache.utils.TestUtil; @RunWith(Parameterized.class) public class StorageUnitTest { private static final String TEST_DIR = TestUtil.TEST_BASE_DIR + "unit/istorage_test/"; private static IStorage[][] storageData; @Parameter(value = 0) public IStorage storage; @Parameters public static Collection<IStorage[]> data() throws IOException { storageData = new IStorage[][] { { new FileChannelStorage(TEST_DIR, 0, 16 * 1024 * 1024) }, { new MemoryMappedStorage(TEST_DIR, 0, 16 * 1024 * 1024) }, { new OffHeapStorage(16 * 1024 * 1024) } }; return Arrays.asList(storageData); } public void storage6() throws IOException { storage.put(0, "A".getBytes()); storage.put(1, "B".getBytes()); storage.put(2, "C".getBytes()); storage.put(3, "D".getBytes()); storage.put(4, "E".getBytes()); storage.put(5, "F".getBytes()); } @Test public void testGet() throws IOException { storage6(); byte[] dest = new byte["A".getBytes().length]; storage.get(0, dest); assertEquals(new String(dest), "A"); storage.get(1, dest); assertEquals(new String(dest), "B"); storage.get(2, dest); assertEquals(new String(dest), "C"); storage.get(3, dest); assertEquals(new String(dest), "D"); storage.get(4, dest); assertEquals(new String(dest), "E"); storage.get(5, dest); assertEquals(new String(dest), "F"); } @Test public void testPut() throws IOException { storage6(); //test put new storage.put(6, "G".getBytes()); byte[] dest = new byte["A".getBytes().length]; storage.get(6, dest); assertEquals(new String(dest), "G"); //test replace old storage.put(0, "W".getBytes()); storage.get(0, dest); assertEquals(new String(dest), "W"); } @After public void clear() throws IOException { storage.free(); } @AfterClass public static void tearDown() throws IOException { for (IStorage[] storage : storageData) { storage[0].close(); } try { FileUtil.deleteDirectory(new File(TEST_DIR)); } catch (IllegalStateException e) { System.gc(); try { FileUtil.deleteDirectory(new File(TEST_DIR)); } catch (IllegalStateException e1) { try { Thread.sleep(3000); } catch (InterruptedException e2) { } FileUtil.deleteDirectory(new File(TEST_DIR)); } } } }