[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