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.REQUEST_BALANCING_STRATEGY;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.SERVER_LIST;
import static org.infinispan.client.hotrod.impl.ConfigurationProperties.TCP_KEEP_ALIVE;
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.client.hotrod.impl.transport.tcp.FailoverRequestBalancingStrategy;
import org.infinispan.commons.executors.ExecutorFactory;
import org.infinispan.commons.marshall.Marshaller;
import org.infinispan.factories.TransportFactory;
import org.infinispan.spring.AssertionUtils;
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();
AssertionUtils.assertPropertiesSubset(
"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().getConfiguration().properties(), remoteCacheManager.getNativeCacheManager()
.getConfiguration().properties());
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();
AssertionUtils.assertPropertiesSubset(
"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().getConfiguration().properties());
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();
AssertionUtils.assertPropertiesSubset(
"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().getConfiguration().properties());
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 = TransportFactory.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().getConfiguration().properties()
.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().getConfiguration().properties()
.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 = Marshaller.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().getConfiguration().properties().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 = ExecutorFactory.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()
.getConfiguration().properties().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()
.getConfiguration().properties().get(TCP_NO_DELAY));
objectUnderTest.destroy();
}
/**
* Test method for
* {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean#setTcpNoDelay(boolean)}
* .
*
* @throws Exception
*/
@Test
public final void setTcpKeepAliveOverrideDefaultTcpKeepAlive() throws Exception {
final boolean expectedTcpKeepAlive = false;
final SpringRemoteCacheManagerFactoryBean objectUnderTest = new SpringRemoteCacheManagerFactoryBean();
objectUnderTest.setTcpKeepAlive(expectedTcpKeepAlive);
objectUnderTest.afterPropertiesSet();
final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject();
assertEquals("setTcpKeepAlive(" + expectedTcpKeepAlive
+ ") should have overridden property 'tcpKeepAlive'. However, it didn't.",
String.valueOf(expectedTcpKeepAlive), remoteCacheManager.getNativeCacheManager()
.getConfiguration().properties().get(TCP_KEEP_ALIVE));
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 = FailoverRequestBalancingStrategy.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()
.getConfiguration().properties().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()
.getConfiguration().properties().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().getConfiguration().properties().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().getConfiguration().properties().get(FORCE_RETURN_VALUES));
objectUnderTest.destroy();
}
}