Package org.logicalcobwebs.proxool.configuration

Source Code of org.logicalcobwebs.proxool.configuration.AvalonConfiguratorTest

/*
* This software is released under a licence similar to the Apache Software Licence.
* See org.logicalcobwebs.proxool.package.html for details.
* The latest version is available at http://proxool.sourceforge.net
*/
package org.logicalcobwebs.proxool.configuration;

import org.apache.avalon.excalibur.component.DefaultRoleManager;
import org.apache.avalon.excalibur.component.ExcaliburComponentManager;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.log.Hierarchy;
import org.apache.log.LogTarget;
import org.apache.log.Logger;
import org.apache.log.Priority;
import org.logicalcobwebs.proxool.AbstractProxoolTest;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.TestHelper;

import java.io.File;

/**
* Tests that the AvalonConfgiuration works.
*
* @version $Revision: 1.10 $, $Date: 2003/03/04 10:58:45 $
* @author Christian Nedregaard (christian_nedregaard@email.com)
* @author $Author: billhorsman $ (current maintainer)
* @since Proxool 0.6
*/
public class AvalonConfiguratorTest extends AbstractProxoolTest {
    private ExcaliburComponentManager componentManager;

    /**
     * @see junit.framework.TestCase#TestCase
     */
    public AvalonConfiguratorTest(String name) {
        super(name);
    }

    /**
     * Test that the configuration succeds and that all expected properties
     * has been received by Proxool. The configuration file does not use namspaces.
     * @throws org.apache.avalon.framework.component.ComponentException if the configuration fails.
     * @throws java.sql.SQLException if ProxoolFacade operation fails.
     */
    public void testNoNamspaces() throws Exception {
        initializeAvalon("src/java-test/org/logicalcobwebs/proxool/configuration/role.conf",
                "src/java-test/org/logicalcobwebs/proxool/configuration/component.conf");
        this.componentManager.lookup(AvalonConfigurator.ROLE);
        try {
            TestHelper.equalsCompleteAlternativeProperties(ProxoolFacade.getConnectionPoolDefinition("avalon-test"));
        } catch (ProxoolException e) {
            throw e;
        }
        try {
            TestHelper.equalsCompleteAlternativeProperties(ProxoolFacade.getConnectionPoolDefinition("avalon-test-2"));
        } catch (ProxoolException e) {
            throw e;
        }
        this.componentManager.dispose();
    }

    /**
     * Test that the configuration succeds and that all expected properties
     * has been received by Proxool. The configuration file uses namspaces.
     * @throws Exception if the test is interrupted.
     */
    public void testWithNamespaces() throws Exception {
        initializeAvalon("src/java-test/org/logicalcobwebs/proxool/configuration/role.conf",
                "src/java-test/org/logicalcobwebs/proxool/configuration/component-ns.conf");
        this.componentManager.lookup(AvalonConfigurator.ROLE);
        try {
            TestHelper.equalsCompleteAlternativeProperties(ProxoolFacade.getConnectionPoolDefinition("avalon-test-ns"));
        } catch (ProxoolException e) {
            throw e;
        }
        try {
            TestHelper.equalsCompleteAlternativeProperties(ProxoolFacade.getConnectionPoolDefinition("avalon-test-ns-2"));
        } catch (ProxoolException e) {
            throw e;
        }
        ProxoolFacade.removeConnectionPool("avalon-test-ns");
        ProxoolFacade.removeConnectionPool("avalon-test-ns-2");
        this.componentManager.dispose();
    }

    /**
     * Test that a configurator that does not have close-on-dispose="false"
     * closes the pools it has configured when it is disposed.
     * @throws Exception if the test is interrupted.
     */
    public void testDisposeOnClose() throws Exception {
        initializeAvalon("src/java-test/org/logicalcobwebs/proxool/configuration/role.conf",
                "src/java-test/org/logicalcobwebs/proxool/configuration/component.conf");
        this.componentManager.lookup(AvalonConfigurator.ROLE);
        this.componentManager.dispose();
        try {
            ProxoolFacade.getConnectionPoolDefinition("avalon-test");
            fail("ProxoolFacade found pool 'avalon-test' but we expected the configurator to have removed it.");
        } catch (ProxoolException e) {
            // This is what we want.
        }
        try {
            ProxoolFacade.getConnectionPoolDefinition("avalon-test-2");
            fail("ProxoolFacade found pool 'avalon-test-2' but we expected the configurator to have removed it.");
        } catch (ProxoolException e) {
            // This is what we want.
        }
    }

    /**
     * Test that a configurator that does have close-on-dispose="false"
     * does not close the pools it has configured when it is disposed.
     * @throws Exception if the test is interrupted.
     */
    public void testNotDisposeOnClose() throws Exception {
        initializeAvalon("src/java-test/org/logicalcobwebs/proxool/configuration/role.conf",
                "src/java-test/org/logicalcobwebs/proxool/configuration/component-ns.conf");
        this.componentManager.lookup(AvalonConfigurator.ROLE);
        this.componentManager.dispose();
        try {
            ProxoolFacade.getConnectionPoolDefinition("avalon-test-ns");
        } catch (ProxoolException e) {
            fail("ProxoolFacade did not find pool 'avalon-test-ns' but we didn't expect the configurator to have removed it.");
        }
        try {
            ProxoolFacade.getConnectionPoolDefinition("avalon-test-ns-2");
        } catch (ProxoolException e) {
            fail("ProxoolFacade did not find pool 'avalon-ns-test-2' but we didn't expect the configurator to have removed it.");
        }
        ProxoolFacade.removeConnectionPool("avalon-test-ns");
        ProxoolFacade.removeConnectionPool("avalon-test-ns-2");
    }

    private void initializeAvalon(String roleFile, String componentFile) throws Exception {
        // create a Avalon logger
        final LogTarget logTarget = new LogKitTargetAdapter();
        final Logger rootLogger = Hierarchy.getDefaultHierarchy().getLoggerFor("root");
        rootLogger.unsetLogTargets();
        rootLogger.setLogTargets(new LogTarget[]{logTarget});
        rootLogger.setPriority(Priority.WARN);
        final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(true);
        // create component configuration
        final Configuration componentConfiguration = builder.buildFromFile(new File(componentFile));
        // create role configuration
        final Configuration roleConfiguration = builder.buildFromFile(new File(roleFile));
        // create and configure role and component managers.
        this.componentManager = new ExcaliburComponentManager();
        this.componentManager.setLogger(rootLogger.getChildLogger(ExcaliburComponentManager.class.getName()));
        DefaultRoleManager roleManager = new DefaultRoleManager();
        roleManager.setLogger(rootLogger.getChildLogger(DefaultRoleManager.class.getName()));
        roleManager.configure(roleConfiguration);
        componentManager.contextualize(new DefaultContext());
        componentManager.setRoleManager(roleManager);
        componentManager.configure(componentConfiguration);
        componentManager.initialize();
    }

}

/*
Revision history:
$Log: AvalonConfiguratorTest.java,v $
Revision 1.10  2003/03/04 10:58:45  billhorsman
checkstyle

Revision 1.9  2003/03/04 10:24:41  billhorsman
removed try blocks around each test

Revision 1.8  2003/03/03 17:09:12  billhorsman
all tests now extend AbstractProxoolTest

Revision 1.7  2003/03/03 11:12:06  billhorsman
fixed licence

Revision 1.6  2003/03/01 15:27:25  billhorsman
checkstyle

Revision 1.5  2003/02/27 18:01:49  billhorsman
completely rethought the test structure. it's now
more obvious. no new tests yet though.

Revision 1.4  2003/02/19 16:52:00  chr32
Added tests for close-on-dispose functionality.

Revision 1.3  2003/02/19 15:14:26  billhorsman
fixed copyright (copy and paste error,
not copyright change)

Revision 1.2  2002/12/23 02:48:07  chr32
Checkstyle.

Revision 1.1  2002/12/23 02:40:49  chr32
Init rev.

Revision 1.5  2002/12/18 03:13:00  chr32
Added tests for xml validation.

Revision 1.4  2002/12/16 17:06:41  billhorsman
new test structure

Revision 1.3  2002/12/16 02:35:40  chr32
Updated to new driver-properties xml format.

Revision 1.2  2002/12/15 19:41:26  chr32
Style fixes.

Revision 1.1  2002/12/15 19:10:49  chr32
Init rev.

*/ 
TOP

Related Classes of org.logicalcobwebs.proxool.configuration.AvalonConfiguratorTest

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.