[infinispan-commits] Infinispan SVN: r2199 - trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Aug 11 10:22:59 EDT 2010


Author: mircea.markus
Date: 2010-08-11 10:22:58 -0400 (Wed, 11 Aug 2010)
New Revision: 2199

Added:
   trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapperTest.java
   trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyPreloadTest.java
   trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyStateTransferTest.java
   trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/TwoWayPersonKey2StringMapper.java
Log:
migrated 2186 from trunk

Copied: trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapperTest.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapperTest.java)
===================================================================
--- trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapperTest.java	                        (rev 0)
+++ trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/DefaultTwoWayKey2StringMapperTest.java	2010-08-11 14:22:58 UTC (rev 2199)
@@ -0,0 +1,67 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test (groups = "functional", testName = "jdbc.stringbased.DefaultTwoWayKey2StringMapperTest")
+public class DefaultTwoWayKey2StringMapperTest {
+
+   DefaultTwoWayKey2StringMapper mapper = new DefaultTwoWayKey2StringMapper();
+
+   public void testAssumption() {
+      //even if they have the same value, they have a different type
+      assert ! new Float(3.0f).equals(new Integer(3));
+   }
+
+   public void testString() {
+      assert mapper.isSupportedType(String.class);
+      assert assertWorks("");
+      assert assertWorks("mircea");
+   }
+
+   public void testShort() {
+      assert mapper.isSupportedType(Short.class);
+      assert assertWorks((short) 2);
+   }
+
+   public void testByte() {
+      assert mapper.isSupportedType(Byte.class);
+      assert assertWorks((byte) 2);
+   }
+
+   public void testLong() {
+      assert mapper.isSupportedType(Long.class);
+      assert assertWorks(new Long(2));
+   }
+
+   public void testInteger() {
+      assert mapper.isSupportedType(Integer.class);
+      assert assertWorks(2);
+   }
+
+   public void testDouble() {
+      assert mapper.isSupportedType(Double.class);
+      assert assertWorks(2.4d);
+
+   }
+
+   public void testFloat() {
+      assert mapper.isSupportedType(Float.class);
+      assert assertWorks(2.1f);
+
+   }
+
+   public void testBoolean() {
+      assert mapper.isSupportedType(Boolean.class);
+      assert assertWorks(true);
+      assert assertWorks(false);
+   }
+
+   private boolean assertWorks(Object key) {
+      return mapper.getKeyMapping(mapper.getStringMapping(key)).equals(key);
+   }
+}

Copied: trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyPreloadTest.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyPreloadTest.java)
===================================================================
--- trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyPreloadTest.java	                        (rev 0)
+++ trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyPreloadTest.java	2010-08-11 14:22:58 UTC (rev 2199)
@@ -0,0 +1,147 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+import org.infinispan.AdvancedCache;
+import org.infinispan.Cache;
+import org.infinispan.CacheException;
+import org.infinispan.config.CacheLoaderManagerConfig;
+import org.infinispan.config.Configuration;
+import org.infinispan.eviction.EvictionStrategy;
+import org.infinispan.loaders.CacheLoaderException;
+import org.infinispan.loaders.jdbc.TableManipulation;
+import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactory;
+import org.infinispan.loaders.jdbc.connectionfactory.ConnectionFactoryConfig;
+import org.infinispan.loaders.jdbc.connectionfactory.PooledConnectionFactory;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.test.AbstractInfinispanTest;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.infinispan.test.fwk.UnitTestDatabaseManager;
+import org.testng.annotations.Test;
+
+import java.sql.Connection;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * Tester for https://jira.jboss.org/browse/ISPN-579.
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test(groups = "functional", testName = "loaders.jdbc.stringbased.AbstractInfinispanTest")
+public class NonStringKeyPreloadTest extends AbstractInfinispanTest {
+
+   public void testPreloadWithKey2StringMapper() throws Exception {
+      String mapperName = PersonKey2StringMapper.class.getName();
+      Configuration cfg = createCacheStoreConfig(mapperName, false, true);
+
+      EmbeddedCacheManager cacheManager = TestCacheManagerFactory.createCacheManager(cfg);
+      try {
+         cacheManager.getCache();
+         assert false : " Preload with Key2StringMapper is not supported. Specify an TwoWayKey2StringMapper if you want to support it (or disable preload).";
+      } catch (CacheException ce) {
+         //expected
+      } finally {
+         cacheManager.stop();
+      }
+   }
+
+   public void testPreloadWithTwoWayKey2StringMapper() throws Exception {
+      String mapperName = TwoWayPersonKey2StringMapper.class.getName();
+      Configuration config = createCacheStoreConfig(mapperName, true, true);
+      EmbeddedCacheManager cm = TestCacheManagerFactory.createCacheManager(config);
+      Cache<Object, Object> cache = cm.getCache();
+      Person mircea = new Person("Markus", "Mircea", 30);
+      cache.put(mircea, "me");
+      Person dan = new Person("Dan", "Dude", 30);
+      cache.put(dan, "mate");
+      cache.stop();
+      cm.stop();
+
+      cm = TestCacheManagerFactory.createCacheManager(config);
+      try {
+         cache = cm.getCache();
+         assert cache.containsKey(mircea);
+         assert cache.containsKey(dan);
+      } finally {
+         cache.stop();
+         cm.stop();
+      }
+   }
+   public void testPreloadWithTwoWayKey2StringMapperAndBoundedCache() throws Exception {
+      String mapperName = TwoWayPersonKey2StringMapper.class.getName();
+      Configuration config = createCacheStoreConfig(mapperName, true, true);
+      config.setEvictionStrategy(EvictionStrategy.FIFO);
+      config.setEvictionMaxEntries(3);
+      EmbeddedCacheManager cm = TestCacheManagerFactory.createCacheManager(config);
+      AdvancedCache<Object, Object> cache = cm.getCache().getAdvancedCache();
+      for (int i = 0; i < 10; i++) {
+         Person p = new Person("name" + i, "surname" + i, 30);
+         cache.put(p, "" + i);
+      }
+      cache.stop();
+      cm.stop();
+
+      cm = TestCacheManagerFactory.createCacheManager(config);
+      try {
+         cache = cm.getCache().getAdvancedCache();
+         assertEquals(3, cache.size());
+         int found = 0;
+         for (int i = 0; i < 10; i++) {
+            Person p = new Person("name" + i, "surname" + i, 30);
+            if (cache.getDataContainer().containsKey(p)) {
+               found++;
+            }
+         }
+         assertEquals(3, found);
+      } finally {
+         cache.stop();
+         cm.stop();
+      }
+   }
+
+   static Configuration createCacheStoreConfig(String mapperName, boolean wrap, boolean preload) {
+      ConnectionFactoryConfig connectionFactoryConfig = UnitTestDatabaseManager.getUniqueConnectionFactoryConfig();
+      if (wrap) {
+         connectionFactoryConfig.setConnectionFactoryClass(SharedConnectionFactory.class.getName());
+      }
+      TableManipulation tm = UnitTestDatabaseManager.buildDefaultTableManipulation();
+      JdbcStringBasedCacheStoreConfig csConfig = new JdbcStringBasedCacheStoreConfig(connectionFactoryConfig, tm);
+      csConfig.setFetchPersistentState(true);
+      csConfig.setKey2StringMapperClass(mapperName);
+
+      CacheLoaderManagerConfig cacheLoaders = new CacheLoaderManagerConfig();
+      cacheLoaders.setPreload(preload);
+      cacheLoaders.addCacheLoaderConfig(csConfig);
+      Configuration cfg = TestCacheManagerFactory.getDefaultConfiguration(false);
+      cfg.setCacheLoaderManagerConfig(cacheLoaders);
+      return cfg;
+   }
+
+   public static class SharedConnectionFactory extends ConnectionFactory {
+      static PooledConnectionFactory sharedFactory;
+      static boolean started = false;
+
+      @Override
+      public void start(ConnectionFactoryConfig config) throws CacheLoaderException {
+         if (!started) {
+            sharedFactory = new PooledConnectionFactory();
+            sharedFactory.start(config);
+         }
+      }
+
+      @Override
+      public void stop() {
+         //ignore
+      }
+
+      @Override
+      public Connection getConnection() throws CacheLoaderException {
+         return sharedFactory.getConnection();
+      }
+
+      @Override
+      public void releaseConnection(Connection conn) {
+         sharedFactory.releaseConnection(conn);
+      }
+   }
+}

Copied: trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyStateTransferTest.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyStateTransferTest.java)
===================================================================
--- trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyStateTransferTest.java	                        (rev 0)
+++ trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/NonStringKeyStateTransferTest.java	2010-08-11 14:22:58 UTC (rev 2199)
@@ -0,0 +1,84 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+import org.infinispan.Cache;
+import org.infinispan.config.Configuration;
+import org.infinispan.manager.EmbeddedCacheManager;
+import org.infinispan.test.AbstractCacheTest;
+import org.infinispan.test.TestingUtil;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.testng.annotations.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test(groups = "functional", testName = "jdbc.stringbased.NonStringKeyStateTransferTest")
+public class NonStringKeyStateTransferTest extends AbstractCacheTest {
+
+   public void testReplicatedStateTransfer() {
+      EmbeddedCacheManager cm1 = null, cm2 = null;
+      try {
+         Configuration conf = NonStringKeyPreloadTest.createCacheStoreConfig(TwoWayPersonKey2StringMapper.class.getName(), false, true);
+         conf.setCacheMode(Configuration.CacheMode.REPL_SYNC);
+
+         cm1 = TestCacheManagerFactory.createClusteredCacheManager(conf);
+         Cache c1 = cm1.getCache();
+         Person mircea = new Person("markus", "mircea", 30);
+         Person mircea2 = new Person("markus2", "mircea2", 30);
+
+         c1.put(mircea, "mircea");
+         c1.put(mircea2, "mircea2");
+
+         cm2 = TestCacheManagerFactory.createClusteredCacheManager(conf);
+         Cache c2 = cm2.getCache();
+         assertEquals("mircea", c2.get(mircea));
+         assertEquals("mircea2", c2.get(mircea2));
+         c2.get(mircea2);
+      } finally {
+         TestingUtil.killCacheManagers(cm1, cm2);
+      }
+   }
+
+   public void testDistributedStateTransfer() {
+      EmbeddedCacheManager cm1 = null, cm2 = null;
+      try {
+         Configuration conf = NonStringKeyPreloadTest.createCacheStoreConfig(TwoWayPersonKey2StringMapper.class.getName(), false, false);
+         conf.setCacheMode(Configuration.CacheMode.DIST_SYNC);
+
+         cm1 = TestCacheManagerFactory.createClusteredCacheManager(conf);
+         Cache c1 = cm1.getCache();
+
+         for (int i = 0; i < 100; i++) {
+            Person mircea = new Person("markus" +i , "mircea"+i, 30);
+            c1.put(mircea, "mircea"+i);
+         }
+
+         cm2 = TestCacheManagerFactory.createClusteredCacheManager(conf);
+         Cache c2 = cm2.getCache();
+         assert c2.size() > 0;
+         for (Object key: c2.getAdvancedCache().getDataContainer().keySet()) {
+            assert key instanceof Person: "expected key to be person but obtained " + key;
+         }
+         
+      } finally {
+         TestingUtil.killCacheManagers(cm1, cm2);
+      }
+   }
+
+   public void testDistributedAndNoTwoWay() {
+      EmbeddedCacheManager cm1 = null;
+
+      Configuration conf = NonStringKeyPreloadTest.createCacheStoreConfig(TwoWayPersonKey2StringMapper.class.getName(), false, false);
+      conf.setCacheMode(Configuration.CacheMode.DIST_SYNC);
+
+      cm1 = TestCacheManagerFactory.createClusteredCacheManager(conf);
+      try {
+         Cache c1 = cm1.getCache();
+      } finally {
+         TestingUtil.killCacheManagers(cm1);
+      }
+
+   }
+}

Copied: trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/TwoWayPersonKey2StringMapper.java (from rev 2186, branches/4.1.x/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/TwoWayPersonKey2StringMapper.java)
===================================================================
--- trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/TwoWayPersonKey2StringMapper.java	                        (rev 0)
+++ trunk/cachestore/jdbc/src/test/java/org/infinispan/loaders/jdbc/stringbased/TwoWayPersonKey2StringMapper.java	2010-08-11 14:22:58 UTC (rev 2199)
@@ -0,0 +1,20 @@
+package org.infinispan.loaders.jdbc.stringbased;
+
+import java.util.StringTokenizer;
+
+/**
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public class TwoWayPersonKey2StringMapper extends PersonKey2StringMapper implements TwoWayKey2StringMapper {
+
+   @Override
+   public Object getKeyMapping(String key) {
+      //person.getName() + "_" + person.getSurname() + "_" + person.getAge();
+      StringTokenizer tkz = new StringTokenizer(key, "_");
+      String name = tkz.nextToken();
+      String surname = tkz.nextToken();
+      String age = tkz.nextToken();
+      return new Person(name, surname, Integer.parseInt(age));
+   }
+}



More information about the infinispan-commits mailing list