Package org.geotools.arcsde.jndi

Source Code of org.geotools.arcsde.jndi.ArcSDEConnectionFactoryTest$MockSessionPool

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2009, Open Source Geospatial Foundation (OSGeo)
*
*    This library 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;
*    version 2.1 of the License.
*
*    This library 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.
*
*/
package org.geotools.arcsde.jndi;

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

import java.io.IOException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.Reference;
import javax.naming.StringRefAddr;

import org.geotools.arcsde.session.ArcSDEConnectionConfig;
import org.geotools.arcsde.session.ISession;
import org.geotools.arcsde.session.ISessionPool;
import org.geotools.arcsde.session.ISessionPoolFactory;
import org.geotools.arcsde.session.UnavailableConnectionException;
import org.junit.Before;
import org.junit.Test;

/**
* Unit test suite for {@link ArcSDEConnectionFactory}
*
* @author Gabriel Roldan (OpenGeo)
*
*
*
* @source $URL$
* @version $Id$
* @since 2.5.7
*/
public class ArcSDEConnectionFactoryTest {

    private ArcSDEConnectionFactory factory;

    @Before
    public void setUp() throws Exception {
        factory = new ArcSDEConnectionFactory();
        factory.setClosableSessionPoolFactory(new MockSessionPoolFactory());
    }

    @Test
    public void getObjectInstance_NotASupportedType() throws Exception {
        String className = "not.a.supported.Class";
        String factoryName = ArcSDEConnectionFactory.class.getName();
        String factoryLocation = null;
        Reference ref = createRef(className, factoryName, factoryLocation);

        Name name = null;
        Context nameCtx = null;
        Hashtable<?, ?> environment = null;

        Object object = factory.getObjectInstance(ref, name, nameCtx, environment);
        assertNull(object);
    }

    @Test
    public void getObjectInstance_MandatoryParams() throws Exception {
        String className = ISessionPool.class.getName();
        String factoryName = ArcSDEConnectionFactory.class.getName();
        String factoryLocation = null;
        Reference ref = new Reference(className, factoryName, factoryLocation);

        Name name = null;
        Context nameCtx = null;
        Hashtable<?, ?> environment = null;

        assertMandatory(ref, name, nameCtx, environment);

        ref.add(new StringRefAddr(ArcSDEConnectionConfig.SERVER_NAME_PARAM_NAME, "localhost"));
        assertMandatory(ref, name, nameCtx, environment);

        ref.add(new StringRefAddr(ArcSDEConnectionConfig.PORT_NUMBER_PARAM_NAME, "5151"));
        assertMandatory(ref, name, nameCtx, environment);

        ref.add(new StringRefAddr(ArcSDEConnectionConfig.USER_NAME_PARAM_NAME, "me"));
        assertMandatory(ref, name, nameCtx, environment);

        ref.add(new StringRefAddr(ArcSDEConnectionConfig.PASSWORD_PARAM_NAME, "mine"));

        Object object = factory.getObjectInstance(ref, name, nameCtx, environment);
        assertNotNull("We're done with mandatory params, should have worked!", object);
    }

    private void assertMandatory(Reference ref, Name name, Context nameCtx,
            Hashtable<?, ?> environment) throws Exception {
        try {
            factory.getObjectInstance(ref, name, nameCtx, environment);
            fail("Expected IAE");
        } catch (IllegalArgumentException e) {
            assertTrue(true);
        }
    }

    @Test
    public void getObjectInstance_ISessionPool() throws Exception {
        String className = ISessionPool.class.getName();
        String factoryName = ArcSDEConnectionFactory.class.getName();
        String factoryLocation = null;
        Reference ref = createRef(className, factoryName, factoryLocation);

        Name name = null;
        Context nameCtx = null;
        Hashtable<?, ?> environment = null;

        Object object = factory.getObjectInstance(ref, name, nameCtx, environment);
        assertNotNull(object);
        assertTrue(object instanceof SharedSessionPool);
        ArcSDEConnectionConfig config = ((SharedSessionPool) object).getConfig();
        assertNotNull(config);
        assertEquals("localhost", config.getServerName());

        Reference ref2 = createRef(className, factoryName, factoryLocation);
        Object object2 = factory.getObjectInstance(ref2, name, nameCtx, environment);
        assertSame(object, object2);
    }

    private Reference createRef(String className, String factoryName, String factoryLocation) {
        Reference ref = new Reference(className, factoryName, factoryLocation);
        ref.add(new StringRefAddr(ArcSDEConnectionConfig.SERVER_NAME_PARAM_NAME, "localhost"));
        ref.add(new StringRefAddr(ArcSDEConnectionConfig.PORT_NUMBER_PARAM_NAME, "5151"));
        ref.add(new StringRefAddr(ArcSDEConnectionConfig.INSTANCE_NAME_PARAM_NAME, "sde"));
        ref.add(new StringRefAddr(ArcSDEConnectionConfig.USER_NAME_PARAM_NAME, "sdeusr"));
        ref.add(new StringRefAddr(ArcSDEConnectionConfig.PASSWORD_PARAM_NAME, "s3cr3t"));
        return ref;
    }

    private static class MockSessionPoolFactory implements ISessionPoolFactory {

        public ISessionPool createPool(ArcSDEConnectionConfig config) throws IOException {
            return new MockSessionPool(config);
        }
    }

    private static class MockSessionPool implements ISessionPool {

        private ArcSDEConnectionConfig config;

        public MockSessionPool(ArcSDEConnectionConfig config) {
            this.config = config;
        }

        public ArcSDEConnectionConfig getConfig() {
            return config;
        }

        public void close() {
        }

        public int getAvailableCount() {
            return 0;
        }

        public int getInUseCount() {
            return 0;
        }

        public int getPoolSize() {
            return 0;
        }

        public ISession getSession() throws IOException, UnavailableConnectionException {
            return null;
        }

        public ISession getSession(boolean transactional) throws IOException,
                UnavailableConnectionException {
            return null;
        }

        public boolean isClosed() {
            return false;
        }
    }
}
TOP

Related Classes of org.geotools.arcsde.jndi.ArcSDEConnectionFactoryTest$MockSessionPool

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.