package cn.org.rapid_framework.web.session.store; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Test; import cn.org.rapid_framework.cache.MapBackendCache; import com.thimbleware.jmemcached.MemCacheDaemon; public class CacheSessionStoreTest { CacheSessionStore store = new CacheSessionStore(); Map sessionData = new HashMap(); Process memcachedProcess; List<Process> process = new ArrayList(); @Before public void setUp() throws Exception { startMemcachedServer(11633); startMemcachedServer(11933); Thread.sleep(1000); System.out.println("memcached started"); sessionData.put("empty", ""); sessionData.put("blank", " "); sessionData.put("null", null); sessionData.put("string", "string"); store.setCache(new MapBackendCache()); store.afterPropertiesSet(); } @After public void tearDown() throws Exception { for(Process p : process) { p.destroy(); p.waitFor(); System.out.println(" exit:"+p.exitValue()); } Thread.sleep(1000); for(MemCacheDaemon d : daemons) { d.stop(); } } List<MemCacheDaemon> daemons = new ArrayList(); private void startMemcachedServer(int port) throws IOException { try { // LRUCacheStorageDelegate cacheStorage = new LRUCacheStorageDelegate(Integer.MAX_VALUE, Integer.MAX_VALUE, 1024000); // MemCacheDaemon daemon = new MemCacheDaemon(); // daemon.setCache(new Cache(cacheStorage)); // daemon.setAddr(new InetSocketAddress(port)); // daemon.setIdleTime(1000 * 600); // daemon.setVerbose(true); // daemon.start(); // daemons.add(daemon); // File file = ResourceUtils.getFile("classpath:fortest_memcached/memcached.exe"); // String cmd = file.getAbsolutePath()+" -p "+port; // System.out.println("exec:"+cmd); // process.add(Runtime.getRuntime().exec(cmd)); }catch(Error e) { throw new IllegalStateException("start memcached error",e); } } @Test public void test_get_and_delete() { Map map = store.getSession("123",100); assertEquals(map.size(), 0); store.saveSession("123", sessionData,1000); //test get map = store.getSession("123",5); assertEquals(map.size(), 4); //test delete store.deleteSession("123"); map = store.getSession("123",100); assertEquals(map.size(), 0); } @Test public void test_timeout() throws InterruptedException { store.saveSession("for_test_timeout_1", sessionData,3); Thread.sleep(5 * 1000); //test get Map map = store.getSession("for_test_timeout_1",0); assertEquals(0,map.size()); } }