/**
* JBoss, Home of Professional Open Source
* Copyright 2009 Red Hat Inc. and/or its affiliates and other
* contributors as indicated by the @author tags. All rights reserved.
* See the copyright.txt 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.infinispan.spring.provider;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.ASYNC_EXECUTOR_FACTORY;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.FORCE_RETURN_VALUES;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.KEY_SIZE_ESTIMATE;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.MARSHALLER;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.PING_ON_STARTUP;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.REQUEST_BALANCING_STRATEGY;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.SERVER_LIST;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.TCP_NO_DELAY;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.TRANSPORT_FACTORY;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.VALUE_SIZE_ESTIMATE;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Properties;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.spring.mock.MockExecutorFatory;
import org.infinispan.spring.mock.MockMarshaller;
import org.infinispan.spring.mock.MockRequestBalancingStrategy;
import org.infinispan.spring.mock.MockTransportFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.testng.annotations.Test;
/**
* <p>
* Test {@link SpringRemoteCacheManagerFactoryBean}.
* </p>
*
* @author <a href="mailto:olaf DOT bergner AT gmx DOT de">Olaf Bergner</a>
*
*/
@Test(testName = "spring.provider.SpringRemoteCacheManagerFactoryBeanTest", groups = "unit")
public class SpringRemoteCacheManagerFactoryBeanTest {
private static final Resource HOTROD_CLIENT_PROPERTIES_LOCATION = new ClassPathResource(
"hotrod-client.properties", SpringRemoteCacheManagerFactoryBeanTest.class);
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#afterPropertiesSet()}
* .
*
* @throws Exception
*/
@Test(expectedExceptions = IllegalStateException.class)
public final void shouldThrowAnIllegalStateExceptionIfBothConfigurationPropertiesAndConfifurationPropertiesFileLocationAreSet()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setConfigurationProperties(new Properties());
objectUnderTest.setConfigurationPropertiesFileLocation(new ClassPathResource("dummy",
getClass()));
objectUnderTest.afterPropertiesSet();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#afterPropertiesSet()}
* .
*
* @throws Exception
*/
@Test(expectedExceptions = IllegalStateException.class)
public final void shouldThrowAnIllegalStateExceptionIfConfigurationPropertiesAsWellAsSettersAreUsedToConfigureTheRemoteCacheManager()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setConfigurationProperties(new Properties());
objectUnderTest.setTransportFactory("test.TransportFactory");
objectUnderTest.afterPropertiesSet();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#getObjectType()}.
*
* @throws Exception
*/
@Test
public final void infinispanRemoteCacheFactoryBeanShouldReportTheMostDerivedObjectType()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.afterPropertiesSet();
assertEquals(
"getObjectType() should have returned the most derived class of the actual RemoteCache "
+ "implementation returned from getObject(). However, it didn't.",
objectUnderTest.getObject().getClass(), objectUnderTest.getObjectType());
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#getObject()}.
*
* @throws Exception
*/
@Test
public final void shouldProduceARemoteCacheManagerConfiguredUsingDefaultSettingsIfNeitherConfigurationPropertiesNorConfigurationPropertiesFileLocationHasBeenSet()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals(
"The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal "
+ "to SpringRemoteCacheManager's default settings since neither property 'configurationProperties' "
+ "nor property 'configurationPropertiesFileLocation' has been set. However, those two are not equal.",
new RemoteCacheManager().getProperties(), remoteCacheManager.getNativeCacheManager()
.getProperties());
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#isSingleton()}.
*/
@Test
public final void isSingletonShouldAlwaysReturnTrue() {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
assertTrue(
"isSingleton() should always return true since each SpringRemoteCacheManagerFactoryBean will always produce "
+ "the same SpringRemoteCacheManager instance. However,it returned false.",
objectUnderTest.isSingleton());
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#destroy()}.
*
* @throws Exception
*/
@Test
public final void destroyShouldStopTheProducedCache() throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
objectUnderTest.destroy();
assertFalse(
"destroy() should have stopped the SpringRemoteCacheManager instance previously produced by "
+ "SpringRemoteCacheManagerFactoryBean. However, the produced SpringRemoteCacheManager is still running. ",
remoteCacheManager.getNativeCacheManager().isStarted());
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setConfigurationProperties(java.util.Properties)}
* .
*
* @throws Exception
*/
@Test
public final void shouldProduceACacheConfiguredUsingTheSuppliedConfigurationProperties()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
final Properties configurationProperties = loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION);
objectUnderTest.setConfigurationProperties(configurationProperties);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals(
"The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal "
+ "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationProperties(props). "
+ "However, those two are not equal.", configurationProperties,
remoteCacheManager.getNativeCacheManager().getProperties());
objectUnderTest.destroy();
}
private Properties loadConfigurationProperties(final Resource configurationPropertiesLocation)
throws IOException {
InputStream propsStream = null;
try {
propsStream = HOTROD_CLIENT_PROPERTIES_LOCATION.getInputStream();
final Properties configurationProperties = new Properties();
configurationProperties.load(propsStream);
return configurationProperties;
} finally {
if (propsStream != null) {
propsStream.close();
}
}
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setConfigurationPropertiesFileLocation(org.springframework.core.io.Resource)}
* .
*/
@Test
public final void shouldProduceACacheConfiguredUsingPropertiesLoadedFromALocationDeclaredThroughSetConfigurationPropertiesFileLocation()
throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setConfigurationPropertiesFileLocation(HOTROD_CLIENT_PROPERTIES_LOCATION);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals(
"The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal "
+ "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationPropertiesFileLocation(propsFileLocation). "
+ "However, those two are not equal.",
loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION), remoteCacheManager
.getNativeCacheManager().getProperties());
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setStartAutomatically(boolean)}
* .
*
* @throws Exception
*/
@Test
public final void shouldProduceAStoppedCacheIfStartAutomaticallyIsSetToFalse() throws Exception {
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setStartAutomatically(false);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManagerExpectedToBeInStateStopped = objectUnderTest
.getObject();
assertFalse(
"SpringRemoteCacheManagerFactoryBean should have produced a SpringRemoteCacheManager that is initially in state stopped "
+ "since property 'startAutomatically' has been set to false. However, the produced SpringRemoteCacheManager is already started.",
remoteCacheManagerExpectedToBeInStateStopped.getNativeCacheManager().isStarted());
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setTransportFactory(java.lang.String)}
* .
*
* @throws Exception
*/
@Test
public final void setTransportFactoryShouldOverrideDefaultTransportFactory() throws Exception {
final String expectedTransportFactory = MockTransportFactory.class.getName();
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setTransportFactory(expectedTransportFactory);
objectUnderTest.setStartAutomatically(false); // Otherwise, SpringRemoteCacheManager will try
// to actually use our DummyTransportFactory
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setTransportFactory(" + expectedTransportFactory
+ ") should have overridden property 'transportFactory'. However, it didn't.",
expectedTransportFactory, remoteCacheManager.getNativeCacheManager().getProperties()
.get(TRANSPORT_FACTORY));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setServerList(java.util.Collection)}
* .
*
* @throws Exception
*/
@Test
public final void setServerListShouldOverrideDefaultServerList() throws Exception {
final Collection<InetSocketAddress> expectedServerList = new ArrayList<InetSocketAddress>(1);
expectedServerList.add(new InetSocketAddress("testhost", 4632));
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
final String expectedServerListString = "testhost:4632";
objectUnderTest.setServerList(expectedServerList);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setServerList(" + expectedServerList
+ ") should have overridden property 'serverList'. However, it didn't.",
expectedServerListString, remoteCacheManager.getNativeCacheManager().getProperties()
.get(SERVER_LIST));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setMarshaller(java.lang.String)}
* .
*
* @throws Exception
*/
@Test
public final void setMarshallerShouldOverrideDefaultMarshaller() throws Exception {
final String expectedMarshaller = MockMarshaller.class.getName();
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setMarshaller(expectedMarshaller);
objectUnderTest.setStartAutomatically(false);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setMarshaller(" + expectedMarshaller
+ ") should have overridden property 'marshaller'. However, it didn't.",
expectedMarshaller,
remoteCacheManager.getNativeCacheManager().getProperties().get(MARSHALLER));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setAsyncExecutorFactory(java.lang.String)}
* .
*
* @throws Exception
*/
@Test
public final void setAsyncExecutorFactoryShouldOverrideDefaultAsyncExecutorFactory()
throws Exception {
final String expectedAsyncExecutorFactory = MockExecutorFatory.class.getName();
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setAsyncExecutorFactory(expectedAsyncExecutorFactory);
objectUnderTest.setStartAutomatically(false);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setAsyncExecutorFactory(" + expectedAsyncExecutorFactory
+ ") should have overridden property 'asyncExecutorFactory'. However, it didn't.",
expectedAsyncExecutorFactory, remoteCacheManager.getNativeCacheManager()
.getProperties().get(ASYNC_EXECUTOR_FACTORY));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setTcpNoDelay(boolean)}
* .
*
* @throws Exception
*/
@Test
public final void setTcpNoDelayShouldOverrideDefaultTcpNoDelay() throws Exception {
final boolean expectedTcpNoDelay = true;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setTcpNoDelay(expectedTcpNoDelay);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setTcpNoDelay(" + expectedTcpNoDelay
+ ") should have overridden property 'tcpNoDelay'. However, it didn't.",
String.valueOf(expectedTcpNoDelay), remoteCacheManager.getNativeCacheManager()
.getProperties().get(TCP_NO_DELAY));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setPingOnStartup(boolean)}
* .
*
* @throws Exception
*/
@Test
public final void setPingOnStartupShouldOverrideDefaultPingOnStartup() throws Exception {
final boolean expectedPingOnStartup = true;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setPingOnStartup(expectedPingOnStartup);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setPingOnStartup(" + expectedPingOnStartup
+ ") should have overridden property 'transportFactory'. However, it didn't.",
String.valueOf(expectedPingOnStartup), remoteCacheManager.getNativeCacheManager()
.getProperties().get(PING_ON_STARTUP));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setRequestBalancingStrategy(java.lang.String)}
* .
*
* @throws Exception
*/
@Test
public final void setRequestBalancingStrategyShouldOverrideDefaultRequestBalancingStrategy()
throws Exception {
final String expectedRequestBalancingStrategy = MockRequestBalancingStrategy.class.getName();
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setRequestBalancingStrategy(expectedRequestBalancingStrategy);
objectUnderTest.setStartAutomatically(false);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals(
"setRequestBalancingStrategy("
+ expectedRequestBalancingStrategy
+ ") should have overridden property 'requestBalancingStrategy'. However, it didn't.",
expectedRequestBalancingStrategy, remoteCacheManager.getNativeCacheManager()
.getProperties().get(REQUEST_BALANCING_STRATEGY));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setKeySizeEstimate(int)}
* .
*
* @throws Exception
*/
@Test
public final void setKeySizeEstimateShouldOverrideDefaultKeySizeEstimate() throws Exception {
final int expectedKeySizeEstimate = -123456;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setKeySizeEstimate(expectedKeySizeEstimate);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setKeySizeEstimate(" + expectedKeySizeEstimate
+ ") should have overridden property 'keySizeEstimate'. However, it didn't.",
String.valueOf(expectedKeySizeEstimate), remoteCacheManager.getNativeCacheManager()
.getProperties().get(KEY_SIZE_ESTIMATE));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setValueSizeEstimate(int)}
* .
*
* @throws Exception
*/
@Test
public final void setValueSizeEstimateShouldOverrideDefaultValueSizeEstimate() throws Exception {
final int expectedValueSizeEstimate = -3456789;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setValueSizeEstimate(expectedValueSizeEstimate);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setValueSizeEstimate(" + expectedValueSizeEstimate
+ ") should have overridden property 'valueSizeEstimate'. However, it didn't.",
String.valueOf(expectedValueSizeEstimate), remoteCacheManager
.getNativeCacheManager().getProperties().get(VALUE_SIZE_ESTIMATE));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setForceReturnValues(boolean)}
* .
*
* @throws Exception
*/
@Test
public final void setForceReturnValuesShouldOverrideDefaultForceReturnValues() throws Exception {
final boolean expectedForceReturnValues = true;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setForceReturnValues(expectedForceReturnValues);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setForceReturnValue(" + expectedForceReturnValues
+ ") should have overridden property 'forceReturnValue'. However, it didn't.",
String.valueOf(expectedForceReturnValues), remoteCacheManager
.getNativeCacheManager().getProperties().get(FORCE_RETURN_VALUES));
objectUnderTest.destroy();
}
}