Package org.jboss.test.jca.test

Source Code of org.jboss.test.jca.test.BackgroundValidationUnitTestCase

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.jca.test;

import java.net.URL;

import javax.management.ObjectName;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import junit.framework.Test;

import org.jboss.logging.Logger;
import org.jboss.mx.util.ObjectNameFactory;
import org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory;
import org.jboss.resource.connectionmanager.ConnectionListener;
import org.jboss.resource.connectionmanager.InternalManagedConnectionPool;
import org.jboss.resource.connectionmanager.JBossManagedConnectionPool;
import org.jboss.resource.connectionmanager.ManagedConnectionPool;
import org.jboss.resource.connectionmanager.NoTxConnectionManager;
import org.jboss.resource.connectionmanager.PreFillPoolSupport;
import org.jboss.test.JBossTestCase;
import org.jboss.test.jca.support.PoolHelper;

public class BackgroundValidationUnitTestCase extends JBossTestCase
{
   Logger log = Logger.getLogger(PreFillPoolingUnitTestCase.class);

   private static ObjectName INVALID_BACKGROUND_POOL = ObjectNameFactory.create("jboss.jca:name=TestFailedBackgroundDS,service=ManagedConnectionPool");
   private static ObjectName VALID_BACKGROUND_POOL = ObjectNameFactory.create("jboss.jca:name=TestSuccessBackgroundDS,service=ManagedConnectionPool");
   private static ObjectName INVALID_MATCH_POOL = ObjectNameFactory.create("jboss.jca:name=TestNonMatchDS,service=ManagedConnectionPool");
   private static ObjectName VALID_MATCH_POOL = ObjectNameFactory.create("jboss.jca:name=TestValidationMatchDS,service=ManagedConnectionPool");

  
   public BackgroundValidationUnitTestCase(String name) throws Exception
   {
      super(name);
     
   }
  
   /**
    * Test for connection background validation
    *
    * Pool: PoolByCri
    * Deployed *-ds.xml: test-background-failed-validation-ds.xml
    *
    * Background validation is enabled, and a connection is acquired. The FailedValidation checker
    * is being used. Background validation destroys the connections in the pool and the destroyed
    * count is incremented.
    *
    * Next, we set background validation to false, flush the pool and acquire the connection.
    * Since background validation is disabled, the pool should fill to the minimum allowance.
    *
    * @throws Exception
    */
   public void testDeployedBackgroundValidationFailure() throws Exception
   {
     
      InitialContext ctx = super.getInitialContext();
      DataSource ds = (DataSource) ctx.lookup("TestFailedBackgroundDS");
      ds.getConnection("sa", "").close();
     
      Integer minCount = PoolHelper.getMinSize(getServer(), INVALID_BACKGROUND_POOL);
        
      Long backMillis = PoolHelper.getBackgroundValMillis(getServer(), INVALID_BACKGROUND_POOL);
     
      PoolHelper.sleepForValidation(backMillis.intValue());
   
      Integer destroyedCount = PoolHelper.getDestroyed(getServer(), INVALID_BACKGROUND_POOL);
        
      assertTrue("Background validation ran. Destroyed count should exceed zero.", destroyedCount.intValue() > 0);
     
      Integer connCount = PoolHelper.getConnectionCount(getServer(), INVALID_BACKGROUND_POOL);
              
      assertTrue(connCount.intValue() == minCount.intValue());
     
      PoolHelper.setPoolAttributeAndFlush(getServer(), INVALID_BACKGROUND_POOL, PoolHelper.POOL_ATT_BACKGROUND_VAL_MILLIS, new Long(0));
           
      //Reprime the pool
      ds.getConnection().close();
     
      PoolHelper.sleepForValidation(backMillis.intValue());

      destroyedCount = PoolHelper.getDestroyed(getServer(), INVALID_BACKGROUND_POOL);
      connCount = PoolHelper.getConnectionCount(getServer(), INVALID_BACKGROUND_POOL);
     
      assertTrue("Background validation is disabled. Destroyed count should be zero", destroyedCount.intValue() == 0);
      assertTrue("Background validation is disabled. Pool should be filled to min", connCount.intValue() == minCount.intValue());
     
  
   }
 
   public void testDeployedBackgroundValidationSuccess() throws Exception
   {
      InitialContext ctx = super.getInitialContext();
      DataSource ds = (DataSource) ctx.lookup("TestSuccessBackgroundDS");
      ds.getConnection("sa", "").close();

      Long backMillis = PoolHelper.getBackgroundValMillis(getServer(), VALID_BACKGROUND_POOL);
           
      PoolHelper.sleepForValidation(backMillis.intValue());
   
      Integer destroyedCount = PoolHelper.getDestroyed(getServer(), VALID_BACKGROUND_POOL);
     

      assertTrue("Background validation ran on valid pool. Destroyed count should not exceed zero.", destroyedCount.intValue() == 0);
     
     
   }
  
  
   /**
    * Pool: PoolByCri
    * Deployed *-ds.xml: test-non-validation-match-ds.xml
    *
    * @throws Exception
    */
   public void testDeployedNonValidateOnMatch() throws Exception
   {

      InitialContext ctx = super.getInitialContext();
      DataSource ds = (DataSource) ctx.lookup("TestNonMatchDS");
      ds.getConnection("sa", "").close();

      Integer destroyed = PoolHelper.getDestroyed(getServer(), INVALID_MATCH_POOL);

      assertTrue("Validation should not have occured at this point.", destroyed.intValue() == 0);

      //No new-connection-sql provided, though connections are invalid, first one will
      //succeed because a matchManagedConnections is not called...
      ds.getConnection("sa", "").close();

      destroyed = PoolHelper.getDestroyed(getServer(), INVALID_MATCH_POOL);

      assertTrue(
            "Validation on match is set to true for invalid connections. Destroyed count should be greater than zero.",
            destroyed.intValue() > 0);
      
     
   }
   /**
    * Pool: PoolByCri
    * Deployed *-ds.xml: test-non-validation-match-ds.xml
    *
    * @throws Exception
    */
   public void testDeployedValidateOnMatch() throws Exception
   {

      InitialContext ctx = super.getInitialContext();
      DataSource ds = (DataSource) ctx.lookup("TestValidationMatchDS");
      ds.getConnection("sa", "").close();

      Integer destroyed = PoolHelper.getDestroyed(getServer(), VALID_MATCH_POOL);

      assertTrue("Validation should not have occured at this point.", destroyed.intValue() == 0);

      ds.getConnection("sa", "").close();

      destroyed = PoolHelper.getDestroyed(getServer(), VALID_MATCH_POOL);

      assertTrue("Validation on match is set to true for connections. Destroyed count should be zero.", destroyed
            .intValue() == 0);

        
        
  
   }
   public void testValidateOnMatchSuccess() throws Exception
   {
      LocalManagedConnectionFactory mcf = new LocalManagedConnectionFactory();
     
      mcf.setDriverClass("org.jboss.test.jca.jdbc.TestDriver");
      mcf.setConnectionURL("jdbc:jboss-test-adapter");
      mcf.setValidConnectionCheckerClassName("org.jboss.test.jca.support.MockSuccessValidationConnectionChecker");
      mcf.setValidateOnMatch(true);
     
      InternalManagedConnectionPool.PoolParams pp = new InternalManagedConnectionPool.PoolParams();
      pp.minSize = 1;
      pp.maxSize = 2;
      pp.blockingTimeout = 10000;
      pp.idleTimeout = 0;
      pp.prefill = true;
      pp.backgroundInterval = 1 * 1000 * 30;
      ManagedConnectionPool mcp = new JBossManagedConnectionPool.OnePool(mcf, pp, false, log);
      NoTxConnectionManager noTxn = new NoTxConnectionManager(null, mcp);
      mcp.setConnectionListenerFactory(noTxn);

      ((PreFillPoolSupport)mcp).prefill();
     
      //Let prefiller run
      Thread.sleep(5000);
     
      ConnectionListener cl = noTxn.getManagedConnection(null, null);
      noTxn.returnManagedConnection(cl, false);
     
      assertTrue(mcp.getConnectionDestroyedCount() == 0);

     
   }
   public void testBasicValidateOnMatchFailure() throws Exception
   {
      LocalManagedConnectionFactory mcf = new LocalManagedConnectionFactory();
     
      mcf.setDriverClass("org.jboss.test.jca.jdbc.TestDriver");
      mcf.setConnectionURL("jdbc:jboss-test-adapter");
      mcf.setValidConnectionCheckerClassName("org.jboss.test.jca.support.MockFailedValidationConnectionChecker");
      mcf.setValidateOnMatch(true);

      InternalManagedConnectionPool.PoolParams pp = new InternalManagedConnectionPool.PoolParams();
      pp.minSize = 1;
      pp.maxSize = 2;
      pp.blockingTimeout = 10000;
      pp.idleTimeout = 0;
      pp.prefill = true;
      pp.backgroundInterval = 1 * 1000 * 30;
      ManagedConnectionPool mcp = new JBossManagedConnectionPool.OnePool(mcf, pp, false, log);
      NoTxConnectionManager noTxn = new NoTxConnectionManager(null, mcp);
      mcp.setConnectionListenerFactory(noTxn);

      ((PreFillPoolSupport)mcp).prefill();
     
      //Let prefiller run
      Thread.sleep(5000);
     
      ConnectionListener cl = noTxn.getManagedConnection(null, null);
      noTxn.returnManagedConnection(cl, false);
     
      assertTrue(mcp.getConnectionDestroyedCount() > 0);
     
   }
  
  
   public void testBasicBackgroundValidationSuccess() throws Exception
   {
     
      LocalManagedConnectionFactory mcf = new LocalManagedConnectionFactory();
     
      mcf.setDriverClass("org.jboss.test.jca.jdbc.TestDriver");
      mcf.setConnectionURL("jdbc:jboss-test-adapter");
      mcf.setValidConnectionCheckerClassName("org.jboss.test.jca.support.MockSuccessValidationConnectionChecker");
     
      InternalManagedConnectionPool.PoolParams pp = new InternalManagedConnectionPool.PoolParams();
      pp.minSize = 1;
      pp.maxSize = 2;
      pp.blockingTimeout = 10000;
      pp.idleTimeout = 0;
      pp.prefill = false;
      pp.backgroundInterval = 2000;
      ManagedConnectionPool mcp = new JBossManagedConnectionPool.OnePool(mcf, pp, false, log);
      NoTxConnectionManager noTxn = new NoTxConnectionManager(null, mcp);
      mcp.setConnectionListenerFactory(noTxn);
     
      ConnectionListener cl = noTxn.getManagedConnection(null, null);
      noTxn.returnManagedConnection(cl, false);
     
      Thread.sleep(pp.backgroundInterval);
      assertTrue(mcp.getConnectionDestroyedCount() == 0);
     
   }
   public void testBasicBackgroundValidationDestroy() throws Exception
   {
     
      LocalManagedConnectionFactory mcf = new LocalManagedConnectionFactory();
     
      mcf.setDriverClass("org.jboss.test.jca.jdbc.TestDriver");
      mcf.setConnectionURL("jdbc:jboss-test-adapter");
      mcf.setValidConnectionCheckerClassName("org.jboss.test.jca.support.MockFailedValidationConnectionChecker");
     
      InternalManagedConnectionPool.PoolParams pp = new InternalManagedConnectionPool.PoolParams();
      pp.minSize = 1;
      pp.maxSize = 2;
      pp.blockingTimeout = 10000;
      pp.idleTimeout = 0;
      pp.prefill = false;
      pp.backgroundInterval = 2000;
      ManagedConnectionPool mcp = new JBossManagedConnectionPool.OnePool(mcf, pp, false, log);
      NoTxConnectionManager noTxn = new NoTxConnectionManager(null, mcp);
      mcp.setConnectionListenerFactory(noTxn);
     
      ConnectionListener cl = noTxn.getManagedConnection(null, null);
      noTxn.returnManagedConnection(cl, false);
     
      Thread.sleep(pp.backgroundInterval);
      assertTrue(mcp.getConnectionDestroyedCount() > 0);
     
   }
  
   public static Test suite() throws Exception{
     
      Test test1 = getDeploySetup(BackgroundValidationUnitTestCase.class, "jca-support.sar");
      ClassLoader loader = Thread.currentThread().getContextClassLoader();
      URL resURL = loader.getResource("jca/validation/test-background-failed-validation-ds.xml");
      Test test2 = getDeploySetup(test1, resURL.toString());
      resURL = loader.getResource("jca/validation/test-background-success-validation-ds.xml");
      Test test3 = getDeploySetup(test2, resURL.toString());
      resURL = loader.getResource("jca/validation/test-non-validation-match-ds.xml");
      Test test4 = getDeploySetup(test3, resURL.toString());
      resURL = loader.getResource("jca/validation/test-validation-match-ds.xml");
      return getDeploySetup(test4, resURL.toString());
     
          
   }
   @Override
   protected void setUp() throws Exception
   {
      super.setUp();
   }
  
   @Override
   protected void tearDown() throws Exception
   {
      super.tearDown();
   }

}
TOP

Related Classes of org.jboss.test.jca.test.BackgroundValidationUnitTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.