Repository: commons-pool
Updated Branches:
  refs/heads/master b7d06237f -> 4e57e7767


Testing POOL-324

org.apache.commons.pool2.impl.GenericObjectPool.getFactoryType() throws
java.lang.ClassCastException

Project: http://git-wip-us.apache.org/repos/asf/commons-pool/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-pool/commit/68b86c2c
Tree: http://git-wip-us.apache.org/repos/asf/commons-pool/tree/68b86c2c
Diff: http://git-wip-us.apache.org/repos/asf/commons-pool/diff/68b86c2c

Branch: refs/heads/master
Commit: 68b86c2c2c9071e7a07f72645d39b658a210f955
Parents: b7d0623
Author: Gary Gregory <[email protected]>
Authored: Mon Mar 27 09:31:30 2017 -0700
Committer: Gary Gregory <[email protected]>
Committed: Mon Mar 27 09:31:30 2017 -0700

----------------------------------------------------------------------
 .../pool2/impl/TestGenericObjectPool.java       |  61 ++++++++++
 .../TestSynchronizedPooledObjectFactory.java    | 119 +++++++++++++++++++
 2 files changed, 180 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-pool/blob/68b86c2c/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java 
b/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
index 11a335d..f88b421 100644
--- a/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
+++ b/src/test/java/org/apache/commons/pool2/impl/TestGenericObjectPool.java
@@ -54,6 +54,7 @@ import org.apache.commons.pool2.WaiterFactory;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -2643,4 +2644,64 @@ public class TestGenericObjectPool extends 
TestBaseObjectPool {
             return semaphore.hasQueuedThreads();
         }
     }
+    
+       @Test
+       public void testGetFactoryType() {
+               GenericObjectPool<String> pool = new GenericObjectPool<String>(
+                               new BasePooledObjectFactory<String>() {
+                                       @Override
+                                       public String create() {
+                                               // fake
+                                               return null;
+                                       }
+
+                                       @Override
+                                       public PooledObject<String> wrap(String 
obj) {
+                                               // fake
+                                               return null;
+                                       }
+                               });
+               Assert.assertNotNull((pool.getFactoryType()));
+       }
+
+       @Test
+       @Ignore
+       public void testGetFactoryType_PoolUtilssynchronizedPooledFactory() {
+               GenericObjectPool<String> pool = new GenericObjectPool<String>(
+                               PoolUtils.synchronizedPooledFactory(new 
BasePooledObjectFactory<String>() {
+                                       @Override
+                                       public String create() {
+                                               // fake
+                                               return null;
+                                       }
+
+                                       @Override
+                                       public PooledObject<String> wrap(String 
obj) {
+                                               // fake
+                                               return null;
+                                       }
+                               }));
+               Assert.assertNotNull((pool.getFactoryType()));
+       }
+
+       @Test
+       @Ignore
+       public void testGetFactoryType_SynchronizedPooledObjectFactory() {
+               GenericObjectPool<String> pool = new GenericObjectPool<String>(
+                               new 
TestSynchronizedPooledObjectFactory<String>(new 
BasePooledObjectFactory<String>() {
+                                       @Override
+                                       public String create() {
+                                               // fake
+                                               return null;
+                                       }
+
+                                       @Override
+                                       public PooledObject<String> wrap(String 
obj) {
+                                               // fake
+                                               return null;
+                                       }
+                               }));
+               Assert.assertNotNull((pool.getFactoryType()));
+       }
+
 }

http://git-wip-us.apache.org/repos/asf/commons-pool/blob/68b86c2c/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java
 
b/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java
new file mode 100644
index 0000000..13d0b24
--- /dev/null
+++ 
b/src/test/java/org/apache/commons/pool2/impl/TestSynchronizedPooledObjectFactory.java
@@ -0,0 +1,119 @@
+package org.apache.commons.pool2.impl;
+
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
+
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.PooledObjectFactory;
+
+/**
+ * Copies PoolUtil's private static class SynchronizedPooledObjectFactory.
+ * 
+ * A fully synchronized PooledObjectFactory that wraps a PooledObjectFactory 
and
+ * synchronizes access to the wrapped factory methods.
+ * <p>
+ * <b>Note:</b> This should not be used on pool implementations that already
+ * provide proper synchronization such as the pools provided in the Commons 
Pool
+ * library.
+ * </p>
+ */
+final class TestSynchronizedPooledObjectFactory<T> implements 
PooledObjectFactory<T> {
+       
+       /** Synchronization lock */
+       private final WriteLock writeLock = new 
ReentrantReadWriteLock().writeLock();
+
+       /** Wrapped factory */
+       private final PooledObjectFactory<T> factory;
+
+       /**
+        * Create a SynchronizedPoolableObjectFactory wrapping the given 
factory.
+        *
+        * @param factory
+        *            underlying factory to wrap
+        * @throws IllegalArgumentException
+        *             if the factory is null
+        */
+       TestSynchronizedPooledObjectFactory(final PooledObjectFactory<T> 
factory) throws IllegalArgumentException {
+               if (factory == null) {
+                       throw new IllegalArgumentException("factory must not be 
null.");
+               }
+               this.factory = factory;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public PooledObject<T> makeObject() throws Exception {
+               writeLock.lock();
+               try {
+                       return factory.makeObject();
+               } finally {
+                       writeLock.unlock();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void destroyObject(final PooledObject<T> p) throws Exception {
+               writeLock.lock();
+               try {
+                       factory.destroyObject(p);
+               } finally {
+                       writeLock.unlock();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public boolean validateObject(final PooledObject<T> p) {
+               writeLock.lock();
+               try {
+                       return factory.validateObject(p);
+               } finally {
+                       writeLock.unlock();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void activateObject(final PooledObject<T> p) throws Exception {
+               writeLock.lock();
+               try {
+                       factory.activateObject(p);
+               } finally {
+                       writeLock.unlock();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void passivateObject(final PooledObject<T> p) throws Exception {
+               writeLock.lock();
+               try {
+                       factory.passivateObject(p);
+               } finally {
+                       writeLock.unlock();
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public String toString() {
+               final StringBuilder sb = new StringBuilder();
+               sb.append("SynchronizedPoolableObjectFactory");
+               sb.append("{factory=").append(factory);
+               sb.append('}');
+               return sb.toString();
+       }
+}

Reply via email to