Package org.scale7.cassandra.pelops.spring

Source Code of org.scale7.cassandra.pelops.spring.CommonsBackedPoolFactoryBeanIntegrationTest

package org.scale7.cassandra.pelops.spring;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.util.ArrayList;

import org.apache.cassandra.thrift.CfDef;
import org.junit.BeforeClass;
import org.junit.Test;
import org.scale7.cassandra.pelops.OperandPolicy;
import org.scale7.cassandra.pelops.pool.CommonsBackedPool;
import org.scale7.cassandra.pelops.pool.LeastLoadedNodeSelectionStrategy;
import org.scale7.cassandra.pelops.pool.NoOpConnectionValidator;
import org.scale7.cassandra.pelops.pool.NoOpNodeSuspensionStrategy;
import org.scale7.cassandra.pelops.support.AbstractIntegrationTest;

/**
* Tests the {@link CommonsBackedPoolFactoryBean} class.
*
* <p>Note: it uses the debugging pool option to avoid attempting to connect to a Cassandra instance.
*/
public class CommonsBackedPoolFactoryBeanIntegrationTest extends AbstractIntegrationTest {
  @BeforeClass
  public static void setup() throws Exception {
    setup(new ArrayList<CfDef>());
  }

    /**
     * Tests the factory bean works as expected when no operand or pool policy are specified.
     * @throws Exception if an error occurs
     */
    @Test
    public void testAfterPropertiesSetSimpleUseCase() throws Exception {
        CommonsBackedPoolFactoryBean factoryBean = new CommonsBackedPoolFactoryBean();
        factoryBean.setCluster(AbstractIntegrationTest.cluster);
        factoryBean.setKeyspace(AbstractIntegrationTest.KEYSPACE);

        assertNull("The factory should not have created the pool at this point", factoryBean.getObject());

        try {
            factoryBean.afterPropertiesSet();

            CommonsBackedPool pool = (CommonsBackedPool) factoryBean.getObject();
            assertNotNull("The factory didn't initialize the pool", pool);
            assertNotNull("The factory didn't initialize a default operand policy instance", pool.getOperandPolicy());
            assertNotNull("The factory didn't initialize a default pool config instance", pool.getPolicy());
            assertNotNull("The factory didn't initialize a default node selection policy instance", pool.getNodeSelectionStrategy());
            assertNotNull("The factory didn't initialize a default node suspension policy instance", pool.getNodeSuspensionStrategy());
            assertNotNull("The factory didn't initialize a default connection validator policy instance", pool.getConnectionValidator());
        } finally {
            factoryBean.destroy();
        }
    }

    /**
     * Tests the factory bean works as expected when operand or pool policy instances are provided.
     * @throws Exception if an error occurs
     */
    @Test
    public void testAfterProperties() throws Exception {
        OperandPolicy operandPolicy = new OperandPolicy();
        CommonsBackedPool.Policy policy = new CommonsBackedPool.Policy();
        LeastLoadedNodeSelectionStrategy nodeSelectionStrategy = new LeastLoadedNodeSelectionStrategy();
        NoOpNodeSuspensionStrategy nodeSuspensionStrategy = new NoOpNodeSuspensionStrategy();
        NoOpConnectionValidator connectionValidator = new NoOpConnectionValidator();

        CommonsBackedPoolFactoryBean factoryBean = new CommonsBackedPoolFactoryBean();
        factoryBean.setCluster(AbstractIntegrationTest.cluster);
        factoryBean.setKeyspace(AbstractIntegrationTest.KEYSPACE);
        factoryBean.setPolicy(policy);
        factoryBean.setOperandPolicy(operandPolicy);
        factoryBean.setNodeSelectionStrategy(nodeSelectionStrategy);
        factoryBean.setNodeSuspensionStrategy(nodeSuspensionStrategy);
        factoryBean.setConnectionValidator(connectionValidator);

        assertNull("The factory should not have created the pool at this point", factoryBean.getObject());

        try {
            factoryBean.afterPropertiesSet();

            CommonsBackedPool pool = (CommonsBackedPool) factoryBean.getObject();
            assertNotNull("The factory didn't initialize the pool", pool);
            assertTrue("The factory didn't use the provided operand policy instance", operandPolicy == pool.getOperandPolicy());
            assertTrue("The factory didn't use the provided config instance", policy == pool.getPolicy());
            assertTrue("The factory didn't use the provided config instance", cluster == pool.getCluster());
            assertTrue("The factory didn't use the provided node selection instance", nodeSelectionStrategy == pool.getNodeSelectionStrategy());
            assertTrue("The factory didn't use the provided node suspension instance", nodeSuspensionStrategy == pool.getNodeSuspensionStrategy());
            assertTrue("The factory didn't use the provided connection validator instance", connectionValidator == pool.getConnectionValidator());
        } finally {
            factoryBean.destroy();
        }
    }

    /**
     * Test to ensure that the required keyspace property is validated.
     * @throws Exception if an error occurs
     */
    @Test
    public void testValidationKeyspace() throws Exception {
        CommonsBackedPoolFactoryBean factoryBean = new CommonsBackedPoolFactoryBean();
        factoryBean.setCluster(AbstractIntegrationTest.cluster);
        try {
            factoryBean.afterPropertiesSet();
            fail("The factory bean should have failed with a missing keyspace property");
        } catch (IllegalArgumentException e) {
            // expected
        }
    }

    /**
     * Test to ensure that the required clsuter property is validated.
     * @throws Exception if an error occurs
     */
    @Test
    public void testValidationCluster() throws Exception {
        CommonsBackedPoolFactoryBean factoryBean = new CommonsBackedPoolFactoryBean();
        factoryBean.setKeyspace("keyspace");
        try {
            factoryBean.afterPropertiesSet();
            fail("The factory bean should have failed with a missing cluster property");
        } catch (IllegalArgumentException e) {
            // expected
        }
    }
}
TOP

Related Classes of org.scale7.cassandra.pelops.spring.CommonsBackedPoolFactoryBeanIntegrationTest

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.