package cz.cuni.mff.d3s.been.cluster;
import static cz.cuni.mff.d3s.been.cluster.ClusterClientConfiguration.*;
import static cz.cuni.mff.d3s.been.cluster.ClusterConfiguration.*;
import static cz.cuni.mff.d3s.been.cluster.InstanceConfigHelper.PROPERTY_HAZELCAST_PREFER_IPV4_STACK;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.Collection;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.hazelcast.client.ClientConfig;
import com.hazelcast.config.*;
import com.hazelcast.nio.Address;
/**
* @author Martin Sixta
*/
public class InstanceTest extends Assert {
Properties userProperties;
@Before
public void setUp() throws Exception {
userProperties = new Properties();
}
@After
public void tearDown() throws Exception {
userProperties = null;
}
@Test
public void testCreateDefaultClientConfig() throws ServiceException, URISyntaxException {
ClientConfig clientConfig = InstanceConfigHelper.createClientConfig(userProperties);
GroupConfig groupConfig = clientConfig.getGroupConfig();
// group config
assertEquals(DEFAULT_GROUP, groupConfig.getName());
assertEquals(DEFAULT_PASSWORD, groupConfig.getPassword());
// timeout
Integer timeoutActual = (int) TimeUnit.MILLISECONDS.toSeconds(clientConfig.getConnectionTimeout());
assertEquals(DEFAULT_TIMEOUT, timeoutActual);
// address list
final Collection<InetSocketAddress> clientAddressList = clientConfig.getAddressList();
assertEquals(1, clientAddressList.size());
URI uri = new URI("myuri://" + DEFAULT_MEMBERS);
InetSocketAddress defaultAddress = new InetSocketAddress(uri.getHost(), uri.getPort());
assertTrue(clientAddressList.contains(defaultAddress));
}
@Test
public void testCreateClientConfigWithMembers() throws ServiceException {
userProperties.setProperty(MEMBERS, "192.168.1.1:5555;192.168.1.10");
ClientConfig clientConfig = InstanceConfigHelper.createClientConfig(userProperties);
// address list
final Collection<InetSocketAddress> clientAddressList = clientConfig.getAddressList();
assertEquals(2, clientAddressList.size());
assertTrue(clientAddressList.contains(new InetSocketAddress("192.168.1.1", 5555)));
assertTrue(clientAddressList.contains(new InetSocketAddress("192.168.1.10", 5701)));
}
@Test
public void testCreateDefaultMemberConfig() throws ServiceException, URISyntaxException {
Config config = InstanceConfigHelper.createMemberConfig(userProperties);
NetworkConfig networkConfig = config.getNetworkConfig();
Join join = networkConfig.getJoin();
assertEquals(DEFAULT_PREFER_IPV4.toString(), config.getProperty(PROPERTY_HAZELCAST_PREFER_IPV4_STACK));
assertEquals(DEFAULT_PORT, Integer.valueOf(networkConfig.getPort()));
assertTrue(join.getMulticastConfig().isEnabled());
assertFalse(join.getTcpIpConfig().isEnabled());
MulticastConfig multicastConfig = join.getMulticastConfig();
assertEquals(DEFAULT_MULTICAST_GROUP, multicastConfig.getMulticastGroup());
assertEquals(DEFAULT_MULTICAST_PORT, Integer.valueOf(multicastConfig.getMulticastPort()));
}
@Test
public void testCreateMemberConfigWithInterfaces() throws ServiceException, URISyntaxException {
final String expectedInterface = "10.1.1.1-2";
userProperties.setProperty(INTERFACES, "10.1.1.1-2");
Config config = InstanceConfigHelper.createMemberConfig(userProperties);
NetworkConfig networkConfig = config.getNetworkConfig();
final Interfaces interfaces = networkConfig.getInterfaces();
assertTrue(interfaces.getInterfaces().size() == 1);
assertTrue(interfaces.getInterfaces().contains(expectedInterface));
}
@Test
public void testCreateMemberConfigEnableIPv6() throws ServiceException, URISyntaxException {
userProperties.setProperty(PREFER_IPV4, "false");
Config config = InstanceConfigHelper.createMemberConfig(userProperties);
assertEquals("false", config.getProperty(PROPERTY_HAZELCAST_PREFER_IPV4_STACK));
}
@Test
public void testCreateMemberConfigWithMulticastOptions() throws ServiceException, URISyntaxException {
int port = 1111;
String group = "224.2.2.1";
userProperties.setProperty(MULTICAST_PORT, Integer.toString(port));
userProperties.setProperty(MULTICAST_GROUP, group);
Config config = InstanceConfigHelper.createMemberConfig(userProperties);
NetworkConfig networkConfig = config.getNetworkConfig();
Join join = networkConfig.getJoin();
MulticastConfig multicastConfig = join.getMulticastConfig();
join.getMulticastConfig();
assertTrue(multicastConfig.isEnabled());
assertEquals(port, multicastConfig.getMulticastPort());
assertEquals(group, multicastConfig.getMulticastGroup());
assertFalse(join.getTcpIpConfig().isEnabled());
}
@Test
public void testCreateMemberConfigWithTcp() throws ServiceException, URISyntaxException, UnknownHostException {
Address member1 = new Address("192.168.1.1", 5555);
Address member2 = new Address("192.168.1.10", 5701);
String memberList = String.format("%s:%d;%s", member1.getHost(), member1.getPort(), member2.getHost());
userProperties.setProperty(JOIN, "tcp");
userProperties.setProperty(TCP_MEMBERS, memberList);
Config config = InstanceConfigHelper.createMemberConfig(userProperties);
final NetworkConfig networkConfig = config.getNetworkConfig();
final Join join = networkConfig.getJoin();
final MulticastConfig multicastConfig = join.getMulticastConfig();
final TcpIpConfig tcpIpConfig = join.getTcpIpConfig();
assertTrue(tcpIpConfig.isEnabled());
assertFalse(multicastConfig.isEnabled());
assertEquals(2, tcpIpConfig.getAddresses().size());
assertTrue(tcpIpConfig.getAddresses().contains(member1));
assertTrue(tcpIpConfig.getAddresses().contains(member2));
}
private static int getInt(Properties properties, String key) {
return Integer.valueOf(properties.getProperty(key));
}
}