You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by az...@apache.org on 2008/01/12 14:14:52 UTC

svn commit: r611410 - /webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java

Author: azeez
Date: Sat Jan 12 05:14:52 2008
New Revision: 611410

URL: http://svn.apache.org/viewvc?rev=611410&view=rev
Log:
Adding a check to see whether multicast is possible before starting the cvlustering tests


Modified:
    webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java

Modified: webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java?rev=611410&r1=611409&r2=611410&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/ContextReplicationTest.java Sat Jan 12 05:14:52 2008
@@ -37,6 +37,12 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.net.MulticastSocket;
+import java.net.InetAddress;
+import java.net.DatagramPacket;
+import java.net.ServerSocket;
+import java.net.InetSocketAddress;
+import java.io.IOException;
 
 /**
  * Tests the replication of properties placed the ConfigurationContext, ServiceGroupContext &
@@ -67,7 +73,108 @@
     private AxisService service2;
     //---------------------------------------------------------------------------------
 
+    private static boolean canMulticast;
+
+    private int getPort(int portStart, int retries) throws IOException {
+        InetSocketAddress addr = null;
+        ServerSocket socket = new ServerSocket();
+        int port = -1;
+        while (retries > 0) {
+            try {
+                addr = new InetSocketAddress(InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),
+                                             portStart);
+                socket.bind(addr);
+                port = portStart;
+                System.out.println("Can bind Server Socket to:" + addr);
+                socket.close();
+                break;
+            } catch (IOException x) {
+                retries--;
+                if (retries <= 0) {
+                    System.out.println("Unable to bind server socket to:" + addr +
+                                       " throwing error.");
+                    throw x;
+                }
+                portStart++;
+            }
+        }
+        return port;
+    }
+
+    private void checkMulticast() {
+
+        // Which port should we listen to
+        final int port;
+        try {
+            port = getPort(4000, 1000);
+        } catch (IOException e) {
+            e.printStackTrace();
+            canMulticast = false;
+            return;
+        }
+
+        // Which address
+        final String group = "225.4.5.6";
+
+        Thread receiver = new Thread() {
+            public void run() {
+                try {
+                    MulticastSocket s = new MulticastSocket(port);
+                    s.joinGroup(InetAddress.getByName(group));
+
+                    // Create a DatagramPacket and do a receive
+                    byte buf[] = new byte[1024];
+                    DatagramPacket pack = new DatagramPacket(buf, buf.length);
+                    s.receive(pack);
+
+                    System.out.println("Received data from: " + pack.getAddress().toString() +
+                                       ":" + pack.getPort() + " with length: " +
+                                       pack.getLength());
+                    s.leaveGroup(InetAddress.getByName(group));
+                    s.close();
+                    canMulticast = true;
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    canMulticast = false;
+                }
+            }
+        };
+        receiver.start();
+
+        Thread sender = new Thread() {
+            public void run() {
+                try {
+                    MulticastSocket s = new MulticastSocket();
+                    byte buf[] = new byte[10];
+                    for (int i = 0; i < buf.length; i++) {
+                        buf[i] = (byte) i;
+                    }
+                    DatagramPacket pack = new DatagramPacket(buf, buf.length,
+                                                             InetAddress.getByName(group), port);
+                    s.setTimeToLive(2);
+                    s.send(pack);
+                    System.out.println("Sent test data");
+                    s.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    canMulticast = false;
+                }
+            }
+        };
+        sender.start();
+    }
+
+    public static void main(String[] args) {
+        new ContextReplicationTest().checkMulticast();
+    }
+
     protected void setUp() throws Exception {
+        checkMulticast();
+        if (!canMulticast) {
+            System.out.println("[WARNING] Aborting clustering test since multicasting cannot be carried out");
+            return;
+        }
+
         System.setProperty(ClusteringConstants.LOCAL_IP_ADDRESS, HttpUtils.getIpAddress());
 
         // First cluster
@@ -141,6 +248,10 @@
     }
 
     public void testSetPropertyInConfigurationContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         {
             String key1 = "configCtxKey";
             String val1 = "configCtxVal1";
@@ -161,6 +272,10 @@
     }
 
     public void testRemovePropertyFromConfigurationContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         String key1 = "configCtxKey";
         String val1 = "configCtxVal1";
 
@@ -181,6 +296,9 @@
     }
 
     public void testSetPropertyInServiceGroupContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         ServiceGroupContext serviceGroupContext1 =
                 configurationContext1.createServiceGroupContext(serviceGroup1);
@@ -202,6 +320,9 @@
     }
 
     public void testRemovePropertyFromServiceGroupContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         // Add the property
         ServiceGroupContext serviceGroupContext1 =
@@ -230,6 +351,10 @@
     }
 
     public void testSetPropertyInServiceGroupContext2() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         String sgcID = UUIDGenerator.getUUID();
 
         ServiceGroupContext serviceGroupContext1 =
@@ -253,6 +378,9 @@
     }
 
     public void testRemovePropertyFromServiceGroupContext2() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         // Add the property
         String sgcID = UUIDGenerator.getUUID();
@@ -284,6 +412,9 @@
     }
 
     public void testSetPropertyInServiceContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         ServiceGroupContext serviceGroupContext1 =
                 configurationContext1.createServiceGroupContext(serviceGroup1);
@@ -310,6 +441,9 @@
     }
 
     public void testSetPropertyInServiceContext2() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         ServiceGroupContext serviceGroupContext1 =
                 configurationContext1.createServiceGroupContext(serviceGroup1);
@@ -336,6 +470,9 @@
     }
 
     public void testRemovePropertyFromServiceContext() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         // Add the property
         ServiceGroupContext serviceGroupContext1 =
@@ -369,6 +506,9 @@
     }
 
     public void testRemovePropertyFromServiceContext2() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
 
         // Add the property
         ServiceGroupContext serviceGroupContext1 =
@@ -402,6 +542,10 @@
     }
 
     public void testReplicationExclusion1() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         String key1 = "local_configCtxKey";
         String val1 = "configCtxVal1";
         configurationContext1.setProperty(key1, val1);
@@ -415,6 +559,10 @@
     }
 
     public void testReplicationExclusion2() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         String key1 = "local_configCtxKey";
         String val1 = "configCtxVal1";
         configurationContext1.setProperty(key1, val1);
@@ -429,6 +577,10 @@
     }
 
     public void testReplicationExclusion3() throws Exception {
+        if (!canMulticast) {
+            return;
+        }
+
         String key1 = "local1_configCtxKey";
         String val1 = "configCtxVal1";
         configurationContext1.setProperty(key1, val1);
@@ -462,7 +614,11 @@
 
     protected void tearDown() throws Exception {
         super.tearDown();
-        clusterManager1.shutdown();
-        clusterManager2.shutdown();
+        if (clusterManager1 != null) {
+            clusterManager1.shutdown();
+        }
+        if (clusterManager2 != null) {
+            clusterManager2.shutdown();
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org