package com.rackspacecloud.blueflood.io;
import com.rackspacecloud.blueflood.service.Configuration;
import com.rackspacecloud.blueflood.service.CoreConfig;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.net.InetSocketAddress;
import java.util.Set;
import static org.junit.Assert.*;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.when;
/**
* * This is the test class for {@link com.rackspacecloud.blueflood.io.IOConfig}
*/
@PrepareForTest({Configuration.class})
@RunWith(PowerMockRunner.class)
public class IOConfigTest {
private static Configuration mockConfiguration;
@BeforeClass
public static void setup() throws Exception {
// this is how you mock singleton whose instance is declared
// as private static final, as the case for Configuration.class
PowerMockito.suppress(PowerMockito.constructor(Configuration.class));
mockConfiguration = PowerMockito.mock(Configuration.class);
PowerMockito.mockStatic(Configuration.class);
when(Configuration.getInstance()).thenReturn(mockConfiguration);
}
@Test
public void testMultipleCassandraHostsWithPort() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10:9001,11.11.11.11:9002";
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_HOSTS))).thenReturn(expectedHostsStr);
Set<String> hosts = ioConfig.getUniqueHosts();
assertEquals("Number of hosts", 2, hosts.size());
}
@Test
public void testMultipleNativeCassandraHostsWithPort() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10:9001,11.11.11.11:9002";
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_BINXPORT_HOSTS))).thenReturn(expectedHostsStr);
Set<String> hosts = ioConfig.getUniqueBinaryTransportHosts();
assertEquals("Number of hosts", 2, hosts.size());
}
@Test
public void testDuplicateMultipleNativeCassandraHostsWithPort() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10:9001,11.11.11.11:9002,10.10.10.10:9001,11.11.11.11:9003";
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_BINXPORT_HOSTS))).thenReturn(expectedHostsStr);
Set<String> hosts = ioConfig.getUniqueBinaryTransportHosts();
assertEquals("Number of hosts", 3, hosts.size());
}
@Test
public void testMultipleNativeCassandraHostsWithPortToInetAddresses() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10:9001,11.11.11.11:9002";
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_BINXPORT_HOSTS))).thenReturn(expectedHostsStr);
Set<InetSocketAddress> hosts = ioConfig.getUniqueBinaryTransportHostsAsInetSocketAddresses();
assertEquals("Number of hosts", 2, hosts.size());
}
@Test
public void testNativeCassandraHostsWithoutPortToInetAddresses() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10,11.11.11.11";
when(mockConfiguration.getIntegerProperty(eq(CoreConfig.CASSANDRA_BINXPORT_PORT))).thenReturn(1111);
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_BINXPORT_HOSTS))).thenReturn(expectedHostsStr);
Set<InetSocketAddress> hosts = ioConfig.getUniqueBinaryTransportHostsAsInetSocketAddresses();
assertEquals("Number of hosts", 2, hosts.size());
for (InetSocketAddress host: hosts) {
assertEquals("Port is default 1111", 1111, host.getPort());
}
}
@Test
public void testNativeCassandraHostsWithPortToInetAddresses() {
IOConfig ioConfig = IOConfig.singleton();
String expectedHostsStr = "10.10.10.10:9001,11.11.11.11:9002";
when(mockConfiguration.getIntegerProperty(eq(CoreConfig.CASSANDRA_BINXPORT_PORT))).thenReturn(1111);
when(mockConfiguration.getStringProperty(eq(CoreConfig.CASSANDRA_BINXPORT_HOSTS))).thenReturn(expectedHostsStr);
Set<InetSocketAddress> hosts = ioConfig.getUniqueBinaryTransportHostsAsInetSocketAddresses();
assertEquals("Number of hosts", 2, hosts.size());
for (InetSocketAddress host: hosts) {
assertNotSame("Port is not default 1111", 1111, host.getPort());
}
}
@Test
public void testConnPerHosts() {
IOConfig ioConfig = IOConfig.singleton();
when(mockConfiguration.getIntegerProperty(eq(CoreConfig.MAX_CASSANDRA_CONNECTIONS))).thenReturn(70);
assertEquals("Connection per hosts", 70 / 5, ioConfig.getMaxConnPerHost(5));
}
@Test
public void testConnPerHostsMoreHostsThanCassandraConn() {
IOConfig ioConfig = IOConfig.singleton();
// we have more hosts than max Cassandra connections,
// make sure we don't get 0 or fractions
when(mockConfiguration.getIntegerProperty(eq(CoreConfig.MAX_CASSANDRA_CONNECTIONS))).thenReturn(70);
assertEquals("Connection per hosts", 1, ioConfig.getMaxConnPerHost(100));
}
}