package org.hyperic.lather.server; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Semaphore; import org.hyperic.hq.common.SystemException; import org.junit.Assert; import org.junit.Test; public class ConnManagerTest { private static final String METHOD0 = "method0"; private static final String METHOD1 = "method1"; @Test public void testIntialization() { Map<String, Semaphore> maxConnMap = new HashMap<String, Semaphore>(); maxConnMap.put(METHOD0, new Semaphore(1)); maxConnMap.put(METHOD1, new Semaphore(1)); boolean caught = false; try { new ConnManager(maxConnMap); } catch (SystemException e) { caught = true; } Assert.assertTrue("ConnManager should throw a SystemException if prop=" + ConnManager.PROP_MAXCONNS + " is not set", caught); caught = false; maxConnMap.put(ConnManager.PROP_MAXCONNS, new Semaphore(1)); try { new ConnManager(maxConnMap); } catch (SystemException e) { caught = true; } Assert.assertFalse("ConnManager not should throw a SystemException if prop=" + ConnManager.PROP_MAXCONNS + " is set", caught); } @Test public void testGrabConnection() { Map<String, Semaphore> maxConnMap = new HashMap<String, Semaphore>(); maxConnMap.put(METHOD0, new Semaphore(10)); maxConnMap.put(ConnManager.PROP_MAXCONNS, new Semaphore(100)); ConnManager connManager = new ConnManager(maxConnMap); boolean gotConn = connManager.grabConn(METHOD0); Assert.assertTrue("should have been able to grab conn for method0", gotConn); int permits = connManager.getAvailablePermits(METHOD0); Assert.assertEquals("num permits for method0 should = 9", 9, permits); // method1 does not have its own pool, therefore it should grab from the maxConns pool gotConn = connManager.grabConn(METHOD1); Assert.assertTrue("should have been able to grab conn for method1", gotConn); permits = connManager.getAvailablePermits(METHOD1); Assert.assertEquals("num permits for method0 should = 99", 99, permits); } @Test public void testReleaseConnection() { Map<String, Semaphore> maxConnMap = new HashMap<String, Semaphore>(); maxConnMap.put(METHOD0, new Semaphore(10)); maxConnMap.put(ConnManager.PROP_MAXCONNS, new Semaphore(100)); ConnManager connManager = new ConnManager(maxConnMap); // method1 does not have its own pool, therefore it should grab from the maxConns pool connManager.grabConn(METHOD1); connManager.grabConn(METHOD0); connManager.releaseConn(METHOD1); int permits = connManager.getAvailablePermits(METHOD1); Assert.assertEquals("num permits for method0 should = 100", 100, permits); connManager.releaseConn(METHOD0); permits = connManager.getAvailablePermits(METHOD0); Assert.assertEquals("num permits for method0 should = 10", 10, permits); } @Test public void testGrabAndReleaseConnection() { Map<String, Semaphore> maxConnMap = new HashMap<String, Semaphore>(); maxConnMap.put(METHOD0, new Semaphore(1)); maxConnMap.put(METHOD1, new Semaphore(1)); maxConnMap.put(ConnManager.PROP_MAXCONNS, new Semaphore(1)); ConnManager connManager = new ConnManager(maxConnMap); boolean gotConn = connManager.grabConn(METHOD0); Assert.assertTrue("should have been able to grab conn for method0", gotConn); int permits = connManager.getAvailablePermits(METHOD0); Assert.assertEquals("num permits for method0 should = 0", 0, permits); gotConn = connManager.grabConn(METHOD0); Assert.assertFalse("should not have been able to grab conn for method0", gotConn); gotConn = connManager.grabConn(METHOD1); Assert.assertTrue("should have been able to grab conn for method1", gotConn); permits = connManager.getAvailablePermits(METHOD1); Assert.assertEquals("num permits for method1 should = 0", 0, permits); gotConn = connManager.grabConn(METHOD1); Assert.assertFalse("should not have been able to grab conn for method1", gotConn); connManager.releaseConn(METHOD0); permits = connManager.getAvailablePermits(METHOD0); Assert.assertEquals("num permits for method0 should = 1", 1, permits); gotConn = connManager.grabConn(METHOD0); Assert.assertTrue("should have been able to grab conn for method0 after it was released", gotConn); connManager.releaseConn(METHOD1); permits = connManager.getAvailablePermits(METHOD1); Assert.assertEquals("num permits for method1 should = 1", 1, permits); gotConn = connManager.grabConn(METHOD1); Assert.assertTrue("should have been able to grab conn for method0 after it was released", gotConn); } }