package org.jgroups.tests;
import org.jgroups.Global;
import org.jgroups.annotations.Property;
import org.jgroups.conf.ProtocolConfiguration;
import org.jgroups.stack.Configurator;
import org.jgroups.stack.Configurator.InetAddressInfo;
import org.jgroups.stack.Protocol;
import org.jgroups.stack.ProtocolStack;
import org.jgroups.util.Util;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.net.InetAddress;
import java.util.*;
/**
* Tests checks made on InetAddress and related addresses in Configurator.
* @author Richard Achmatowicz
*/
@Test(groups=Global.FUNCTIONAL,singleThreaded=true)
public class InetAddressChecksTest {
ProtocolStack stack = null;
Protocol protocol = null ;
static final String ipCheckNoConsistentProps="org.jgroups.tests.InetAddressChecksTest$IPCHECK(" +
"inetAddress1=127.0.0.1;inetAddress2=::1;inetAddress3=192.168.0.100;i=3)" ;
static final String ipCheckConsistentProps="org.jgroups.tests.InetAddressChecksTest$IPCHECK(" +
"inetAddress1=127.0.0.1;inetAddress2=127.0.0.1;inetAddress3=192.168.0.100;i=3)" ;
List<String> order = new LinkedList<>() ;
@BeforeMethod
void setUp() {
stack=new ProtocolStack();
}
/*
* Checks IP version mechanism for inconsistent version processing
*/
@Test(expectedExceptions=RuntimeException.class)
public void testIPVersionCheckingNoConsistentVersion() throws Exception {
List<ProtocolConfiguration> protocol_configs = new ArrayList<>() ;
List<Protocol> protocols = new ArrayList<>() ;
// create the layer described by IPCHECK
protocol = Configurator.createProtocol(ipCheckNoConsistentProps, stack) ;
// process the defaults
protocol_configs.add(new ProtocolConfiguration(ipCheckNoConsistentProps)) ;
protocols.add(protocol) ;
Map<String, Map<String,InetAddressInfo>> inetAddressMap = null ;
try {
inetAddressMap = Configurator.createInetAddressMap(protocol_configs, protocols) ;
Collection<InetAddress> addrs=Configurator.getAddresses(inetAddressMap);
Configurator.determineIpVersionFromAddresses(addrs) ;
}
catch(RuntimeException e) {
System.out.println("Expected exception received: " + e.getMessage()) ;
throw e ;
}
// get the value which should have been assigned a default
InetAddress a = ((IPCHECK)protocol).getInetAddress1() ;
System.out.println("value of inetAddress1 = " + a) ;
InetAddress b = ((IPCHECK)protocol).getInetAddress2() ;
System.out.println("value of inetAddress2 = " + b) ;
InetAddress c = ((IPCHECK)protocol).getInetAddress3() ;
System.out.println("value of inetAddress3 = " + c) ;
}
/*
* Checks IP version mechanism for consistent version processing
*/
public void testIPVersionCheckingConsistentVersion() throws Exception {
List<ProtocolConfiguration> protocol_configs = new ArrayList<>() ;
List<Protocol> protocols = new ArrayList<>() ;
// create the layer described by IPCHECK
protocol = Configurator.createProtocol(ipCheckConsistentProps, stack) ;
// process the defaults
protocol_configs.add(new ProtocolConfiguration(ipCheckConsistentProps)) ;
protocols.add(protocol) ;
Map<String, Map<String,InetAddressInfo>> inetAddressMap = null ;
inetAddressMap = Configurator.createInetAddressMap(protocol_configs, protocols) ;
Collection<InetAddress> addrs=Configurator.getAddresses(inetAddressMap);
Configurator.determineIpVersionFromAddresses(addrs) ;
// get the value which should have been assigned a default
InetAddress a = ((IPCHECK)protocol).getInetAddress1() ;
System.out.println("value of inetAddress1 = " + a) ;
InetAddress b = ((IPCHECK)protocol).getInetAddress2() ;
System.out.println("value of inetAddress2 = " + b) ;
InetAddress c = ((IPCHECK)protocol).getInetAddress3() ;
System.out.println("value of inetAddress3 = " + c) ;
}
/*
* Checks which IP stacks are available on the platform
*/
public static void testWhichIPStacksAvailable() throws Exception {
boolean isIPv4 = Util.isStackAvailable(true);
boolean isIPv6 = Util.isStackAvailable(false);
System.out.println("isIPv4 = " + isIPv4);
System.out.println("isIPv6 = " + isIPv6);
}
public static class IPCHECK extends Protocol {
@Property(name="inetAddress1")
InetAddress inetAddress1;
public InetAddress getInetAddress1() {
return inetAddress1;
}
@Property(name="inetAddress2")
InetAddress inetAddress2;
public InetAddress getInetAddress2() {
return inetAddress2;
}
@Property(name="inetAddress3")
InetAddress inetAddress3;
public InetAddress getInetAddress3() {
return inetAddress3;
}
@Property(description="wilma")
int i=0;
}
}