package org.jgroups.tests; import org.jgroups.Event; import org.jgroups.Global ; import org.jgroups.conf.ProtocolConfiguration; import org.jgroups.stack.Protocol; import org.jgroups.stack.ProtocolStack; import org.jgroups.stack.Configurator ; import org.jgroups.stack.Configurator.InetAddressInfo; import org.jgroups.annotations.Property; import org.jgroups.util.Util ; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.*; import java.net.InetAddress ; /** * Tests checks made on InetAddress and related addresses in Configurator. * @author Richard Achmatowicz */ @Test(groups=Global.FUNCTIONAL,sequential=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<String>() ; @BeforeMethod void setUp() { stack=new ProtocolStack(); } /* * Checks IP version mechanism for inconsistent version processing */ @Test(expectedExceptions=RuntimeException.class) public void testIPVersionCheckingNoConsistentVersion() throws Exception { Vector<ProtocolConfiguration> protocol_configs = new Vector<ProtocolConfiguration>() ; Vector<Protocol> protocols = new Vector<Protocol>() ; // 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 { Vector<ProtocolConfiguration> protocol_configs = new Vector<ProtocolConfiguration>() ; Vector<Protocol> protocols = new Vector<Protocol>() ; // 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 ; // do nothing public Object down(Event evt) { return down_prot.down(evt); } // do nothing public Object up(Event evt) { return up_prot.up(evt); } } }