Revision: 16162
Author: vladimir.ralev
Date: Tue Jan 4 21:05:17 2011
Log: Update Issue 2250
IPLB in via, single IPLB mode, 4 SIP LB nodes, IPLB stress testing + fixes
http://code.google.com/p/mobicents/source/detail?r=16162
Added:
/trunk/tools/sip-balancer/jar/src/test/java/log4j.xml
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/NoInternalAddressTest.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingLoadBalancersWithIPLBAddressInViaHeader.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingLoadBalancersWithNoInternalPortTest.java
Deleted:
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/log4j.xml
Modified:
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerContext.java
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerRunner.java
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/SIPBalancerForwarder.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/NodeRegisterTest.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/TestSipListener.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/HeaderConsistentHashAlgorithmTest.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/WorstCaseAffinityTest.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/InviteTransactionFailover.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/Shootist.java
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingTwoLoadBalancersTest.java
=======================================
--- /dev/null
+++ /trunk/tools/sip-balancer/jar/src/test/java/log4j.xml Tue Jan 4
21:05:17 2011
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+ <appender name="rolling-file"
class="org.apache.log4j.RollingFileAppender">
+ <param name="file" value="logs/sip-server.log"/>
+ <param name="MaxFileSize" value="2000KB"/>
+ <!-- Keep one backup file -->
+ <param name="MaxBackupIndex" value="20"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %p %t %l - %m%n"/>
+ </layout>
+ </appender>
+
+ <appender name="console" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %p %t - %m%n"/>
+ </layout>
+ </appender>
+ <root>
+ <priority value ="INFO" />
+ <appender-ref ref="console" />
+ </root>
+</log4j:configuration>
=======================================
--- /dev/null
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/NoInternalAddressTest.java
Tue Jan 4 21:05:17 2011
@@ -0,0 +1,225 @@
+package org.mobicents.tools.sip.balancer.operation;
+
+import java.util.Properties;
+
+import javax.sip.address.SipURI;
+import javax.sip.header.RecordRouteHeader;
+
+import junit.framework.TestCase;
+
+import org.mobicents.tools.sip.balancer.AppServer;
+import org.mobicents.tools.sip.balancer.BalancerRunner;
+import org.mobicents.tools.sip.balancer.EventListener;
+
+public class NoInternalAddressTest extends TestCase{
+ BalancerRunner balancer;
+ int numNodes = 2;
+ AppServer[] servers = new AppServer[numNodes];
+ Shootist shootist;
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ shootist = new Shootist();
+
+ balancer = new BalancerRunner();
+ Properties properties = new Properties();
+ properties.setProperty("javax.sip.STACK_NAME",
"SipBalancerForwarder");
+ properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT",
"off");
+ // You need 16 for logging traces. 32 for debug + traces.
+ // Your code will limp at 32 but it is best for debugging.
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL",
"LOG4J");
+ properties.setProperty("gov.nist.javax.sip.DEBUG_LOG",
+ "logs/sipbalancerforwarderdebug.txt");
+ properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
+ "logs/sipbalancerforwarder.xml");
+ properties.setProperty("gov.nist.javax.sip.THREAD_POOL_SIZE",
"2");
+ properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER",
"true");
+
properties.setProperty("gov.nist.javax.sip.CANCEL_CLIENT_TRANSACTION_CHECKED", "false");
+
+ properties.setProperty("externalHost", "127.0.0.1");
+ properties.setProperty("internalPort", "5065");
+ properties.setProperty("externalPort", "5060");
+ balancer.start(properties);
+
+
+ for(int q=0;q<servers.length;q++) {
+ servers[q] = new AppServer("node" + q,4060+q, "127.0.0.1", 2000, 5060,
5060);
+ servers[q].start();
+ }
+ Thread.sleep(5000);
+ }
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ for(int q=0;q<servers.length;q++) {
+ servers[q].stop();
+ }
+ shootist.stop();
+ balancer.stop();
+ }
+
+ public void testFailDetection() throws Exception {
+
+ String[] nodes = balancer.getNodeList();
+ assertEquals(numNodes, nodes.length);
+ servers[0].sendHeartbeat = false;
+ Thread.sleep(10000);
+ nodes = balancer.getNodeList();
+ assertEquals(numNodes-1, nodes.length);
+ }
+
+ public void testAllNodesDead() throws Exception {
+ for(AppServer as:servers) {
+ as.sendCleanShutdownToBalancers();
+ as.sendHeartbeat=false;
+ }
+ Thread.sleep(1000);
+ shootist.callerSendsBye = true;
+ shootist.sendInitialInvite();
+
+ Thread.sleep(5000);
+ assertEquals(500, shootist.responses.get(0).getStatusCode());
+ }
+
+// private void _BAD_testInviteTx() throws Exception {
+// ProtocolObjects senderProtocolObjects = new
ProtocolObjects("forward-udp-sender",
+// "gov.nist", "udp", false, null);
+// TestSipListener sender = new TestSipListener(5080, 5060,
senderProtocolObjects, true);
+// SipProvider senderProvider = sender.createProvider();
+//
+//
+// senderProvider.addSipListener(sender);
+//
+// senderProtocolObjects.start();
+//
+// String fromName = "forward-tcp-sender";
+// String fromSipAddress = "sip-servlets.com";
+// SipURI fromAddress =
senderProtocolObjects.addressFactory.createSipURI(
+// fromName, fromSipAddress);
+//
+// String toSipAddress = "sip-servlets.com";
+// String toUser = "forward-receiver";
+// SipURI toAddress =
senderProtocolObjects.addressFactory.createSipURI(
+// toUser, toSipAddress);
+//
+// sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null,
false);
+// Thread.sleep(20000);
+// }
+
+ public void testServerActingAsUASKillOneNodeFailoverResponse() throws
Exception {
+ EventListener failureEventListener = new EventListener() {
+ boolean once = false;
+ @Override
+ public synchronized void uasAfterResponse(int statusCode, final
AppServer source) {
+ if(!once) {
+ once = true;
+ System.out.println("HERE " + once);
+ new Thread() {
+ public void run() {
+
source.sendCleanShutdownToBalancers();
+ }
+ }.start();
+
+
+ }
+
+ }
+
+ @Override
+ public void uasAfterRequestReceived(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterRequestSent(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterResponse(int statusCode, AppServer
source) {
+ // TODO Auto-generated method stub
+
+ }
+ };
+ for(AppServer as:servers)
as.setEventListener(failureEventListener);
+ shootist.callerSendsBye = true;
+ shootist.sendInitialInvite();
+ Thread.sleep(10000);
+ if(balancer.getNodes().size()!=1) fail("Expected one dead
node");
+ }
+ AppServer ringingAppServer;
+ AppServer okAppServer;
+ public void testASactingAsUAC() throws Exception {
+
+ EventListener failureEventListener = new EventListener() {
+
+ @Override
+ public void uasAfterResponse(int statusCode, AppServer
source) {
+
+
+ }
+
+ @Override
+ public void uasAfterRequestReceived(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterRequestSent(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterResponse(int statusCode, AppServer
source) {
+ if(statusCode == 180) {
+ ringingAppServer = source;
+ source.sendCleanShutdownToBalancers();
+ } else {
+ okAppServer = source;
+
+ }
+ }
+ };
+ for(AppServer as:servers)
as.setEventListener(failureEventListener);
+ shootist.callerSendsBye = true;
+
+ String fromName = "sender";
+ String fromHost = "sip-servlets.com";
+ SipURI fromAddress =
servers[0].protocolObjects.addressFactory.createSipURI(
+ fromName, fromHost);
+
+ String toUser = "replaces";
+ String toHost = "sip-servlets.com";
+ SipURI toAddress =
servers[0].protocolObjects.addressFactory.createSipURI(
+ toUser, toHost);
+
+ SipURI ruri =
servers[0].protocolObjects.addressFactory.createSipURI(
+ "usera", "127.0.0.1:5033");
+ ruri.setLrParam();
+ SipURI route =
servers[0].protocolObjects.addressFactory.createSipURI(
+ "lbaddress_noInternalPort", "127.0.0.1:5060");
+ route.setParameter("node_host", "127.0.0.1");
+ route.setParameter("node_port", "4060");
+ route.setLrParam();
+ shootist.start();
+ servers[0].sipListener.sendSipRequest("INVITE", fromAddress, toAddress,
null, null, false);
+ servers[0].sipListener.sendSipRequest("INVITE", fromAddress, toAddress,
null, route, false, null, null, ruri);
+ Thread.sleep(16000);
+
assertTrue(shootist.inviteRequest.getHeader(RecordRouteHeader.NAME).toString().contains("node_host"));
+ assertNotSame(ringingAppServer, okAppServer);
+ assertNotNull(ringingAppServer);
+ assertNotNull(okAppServer);
+ }
+
+}
=======================================
--- /dev/null
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingLoadBalancersWithIPLBAddressInViaHeader.java
Tue Jan 4 21:05:17 2011
@@ -0,0 +1,158 @@
+package org.mobicents.tools.sip.balancer.scalability;
+
+import java.util.Properties;
+
+import javax.sip.SipException;
+
+import junit.framework.TestCase;
+
+import org.mobicents.tools.sip.balancer.AppServer;
+import org.mobicents.tools.sip.balancer.BalancerRunner;
+import org.mobicents.tools.sip.balancer.EventListener;
+import
org.mobicents.tools.sip.balancer.HeaderConsistentHashBalancerAlgorithm;
+import org.mobicents.tools.sip.balancer.UDPPacketForwarder;
+import org.mobicents.tools.sip.balancer.operation.Shootist;
+
+public class SprayingLoadBalancersWithIPLBAddressInViaHeader extends
TestCase {
+ int numBalancers = 4;
+ BalancerRunner[] balancers = new BalancerRunner[numBalancers];
+ int numNodes = 10;
+ AppServer[] servers = new AppServer[numNodes];
+ Shootist shootist;
+
+ UDPPacketForwarder externalIpLoadBalancer;
+ UDPPacketForwarder internalIpLoadBalancer;
+
+ private BalancerRunner prepBalancer(String id) {
+ BalancerRunner balancer = new BalancerRunner();
+ Properties properties = new Properties();
+ properties.setProperty("javax.sip.STACK_NAME", "SipBalancerForwarder" +
id);
+ properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT",
"off");
+ // You need 16 for logging traces. 32 for debug + traces.
+ // Your code will limp at 32 but it is best for debugging.
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL",
"LOG4J");
+ properties.setProperty("gov.nist.javax.sip.DEBUG_LOG",
+ "logs/sipbalancerforwarderdebug.txt");
+ properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
+ "logs/sipbalancerforwarder.xml");
+ properties.setProperty("gov.nist.javax.sip.THREAD_POOL_SIZE",
"2");
+ properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER",
"true");
+
properties.setProperty("gov.nist.javax.sip.CANCEL_CLIENT_TRANSACTION_CHECKED", "false");
+
+ properties.setProperty("useIpLoadBalancerAddressInViaHeaders",
"true");
+ properties.setProperty("externalHost", "127.0.0.1");
+ properties.setProperty("internalHost", "127.0.0.1");
+ properties.setProperty("internalPort", "5"+id+"65");
+ properties.setProperty("externalPort", "5"+id+"60");
+ properties.setProperty("rmiRegistryPort", "2" + id +"00");
+ properties.setProperty("httpPort", "2" + id +"80");
+ properties.setProperty("jmxHtmlAdapterPort", "8" + id +"00");
+ properties.setProperty("algorithmClass",
HeaderConsistentHashBalancerAlgorithm.class.getName());
+ properties.setProperty("externalIpLoadBalancerAddress",
"127.0.0.1");
+ properties.setProperty("externalIpLoadBalancerPort", "9988");
+ properties.setProperty("internalIpLoadBalancerAddress",
"127.0.0.1");
+ properties.setProperty("internalIpLoadBalancerPort", "9922");
+ balancer.start(properties);
+ return balancer;
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ shootist = new Shootist();
+ String balancerString = "";
+ String externalIpLBString = "";
+ String internalIpLBString = "";
+ for(Integer q=0;q<numBalancers;q++) {
+ balancers[q] = prepBalancer(q.toString());
+ balancerString += "127.0.0.1:"+2+q+"00,";
+ externalIpLBString += "127.0.0.1:"+5+q+"60,";
+ internalIpLBString += "127.0.0.1:"+5+q+"65,";
+ }
+ for(int q=0;q<servers.length;q++) {
+ servers[q] = new AppServer("node" + q,4060+q);
+ servers[q].start();
+ servers[q].setBalancers(balancerString);
+ }
+
+ externalIpLoadBalancer = new UDPPacketForwarder(9988,
externalIpLBString, "127.0.0.1");
+ externalIpLoadBalancer.start();
+ internalIpLoadBalancer = new UDPPacketForwarder(9922,
internalIpLBString, "127.0.0.1");
+ internalIpLoadBalancer.start();
+ Thread.sleep(5000);
+ }
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ externalIpLoadBalancer.stop();
+ internalIpLoadBalancer.stop();
+ for(int q=0;q<servers.length;q++) {
+ servers[q].stop();
+ }
+ shootist.stop();
+ for(int q=0;q<numBalancers;q++) {
+ balancers[q].stop();
+ }
+ }
+
+ AppServer inviteServer,ackServer,byeServer;
+
+ public void testSprayingRoundRobinSIPLBsUASCallConsistentHash() throws
Exception {
+ EventListener failureEventListener = new EventListener() {
+
+ @Override
+ public void uasAfterResponse(int statusCode, AppServer
source) {
+
+
+ }
+
+ @Override
+ public void uasAfterRequestReceived(String method,
AppServer source) {
+ if(method.equals("INVITE")) {
+ inviteServer = source;
+ } else if(method.equals("ACK")) {
+ ackServer = source;
+ } else {
+ byeServer = source;
+ }
+ }
+
+ @Override
+ public void uacAfterRequestSent(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterResponse(int statusCode, AppServer
source) {
+
+ }
+ };
+ for(AppServer as:servers)
as.setEventListener(failureEventListener);
+ shootist.peerHostPort="127.0.0.1:9988";
+ shootist.callerSendsBye=true;
+ shootist.sendInitialInvite();
+ //servers[0].sendHeartbeat = false;
+ Thread.sleep(12000);
+ shootist.sendBye();
+ Thread.sleep(2000);
+
+ assertEquals(3,
externalIpLoadBalancer.sipMessageWithoutRetrans.size());
+ assertSame(inviteServer, byeServer);
+ assertSame(inviteServer, ackServer);
+ assertNotNull(byeServer);
+ assertNotNull(ackServer);
+ }
+ public void testSprayingMultipleIndialogMessages() throws Exception {
+ shootist.callerSendsBye=true;
+ shootist.sendInitialInvite();
+ Thread.sleep(8000);
+ for(int q=0;q<10;q++){
+ shootist.sendMessage();Thread.sleep(600);
+ }
+ Thread.sleep(600);
+ assertTrue(shootist.responses.size()>10);
+ }
+
+}
=======================================
--- /dev/null
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingLoadBalancersWithNoInternalPortTest.java
Tue Jan 4 21:05:17 2011
@@ -0,0 +1,153 @@
+package org.mobicents.tools.sip.balancer.scalability;
+
+import java.util.Properties;
+
+import javax.sip.SipException;
+
+import junit.framework.TestCase;
+
+import org.mobicents.tools.sip.balancer.AppServer;
+import org.mobicents.tools.sip.balancer.BalancerRunner;
+import org.mobicents.tools.sip.balancer.EventListener;
+import
org.mobicents.tools.sip.balancer.HeaderConsistentHashBalancerAlgorithm;
+import org.mobicents.tools.sip.balancer.UDPPacketForwarder;
+import org.mobicents.tools.sip.balancer.operation.Shootist;
+
+public class SprayingLoadBalancersWithNoInternalPortTest extends TestCase {
+ int numBalancers = 2;
+ BalancerRunner[] balancers = new BalancerRunner[numBalancers];
+ int numNodes = 10;
+ AppServer[] servers = new AppServer[numNodes];
+ Shootist shootist;
+
+ UDPPacketForwarder externalIpLoadBalancer;
+ UDPPacketForwarder internalIpLoadBalancer;
+
+ private BalancerRunner prepBalancer(String id) {
+ BalancerRunner balancer = new BalancerRunner();
+ Properties properties = new Properties();
+ properties.setProperty("javax.sip.STACK_NAME", "SipBalancerForwarder" +
id);
+ properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT",
"off");
+ // You need 16 for logging traces. 32 for debug + traces.
+ // Your code will limp at 32 but it is best for debugging.
+ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL",
"LOG4J");
+ properties.setProperty("gov.nist.javax.sip.DEBUG_LOG",
+ "logs/sipbalancerforwarderdebug.txt");
+ properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
+ "logs/sipbalancerforwarder.xml");
+ properties.setProperty("gov.nist.javax.sip.THREAD_POOL_SIZE",
"2");
+ properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER",
"true");
+
properties.setProperty("gov.nist.javax.sip.CANCEL_CLIENT_TRANSACTION_CHECKED", "false");
+
+ properties.setProperty("externalHost", "127.0.0.1");
+ properties.setProperty("externalPort", "5"+id+"60");
+ properties.setProperty("rmiRegistryPort", "2" + id +"00");
+ properties.setProperty("httpPort", "2" + id +"80");
+ properties.setProperty("jmxHtmlAdapterPort", "8" + id +"00");
+ properties.setProperty("algorithmClass",
HeaderConsistentHashBalancerAlgorithm.class.getName());
+ properties.setProperty("externalIpLoadBalancerAddress",
"127.0.0.1");
+ properties.setProperty("externalIpLoadBalancerPort", "9988");
+ balancer.start(properties);
+ return balancer;
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ shootist = new Shootist();
+ String balancerString = "";
+ String externalIpLBString = "";
+ String internalIpLBString = "";
+ for(Integer q=0;q<numBalancers;q++) {
+ balancers[q] = prepBalancer(q.toString());
+ balancerString += "127.0.0.1:"+2+q+"00,";
+ externalIpLBString += "127.0.0.1:"+5+q+"60,";
+ internalIpLBString += "127.0.0.1:"+5+q+"65,";
+ }
+ for(int q=0;q<servers.length;q++) {
+ servers[q] = new AppServer("node" + q,4060+q);
+ servers[q].start();
+ servers[q].setBalancers(balancerString);
+ }
+
+ externalIpLoadBalancer = new UDPPacketForwarder(9988,
externalIpLBString, "127.0.0.1");
+ externalIpLoadBalancer.start();
+ internalIpLoadBalancer = new UDPPacketForwarder(9922,
internalIpLBString, "127.0.0.1");
+ internalIpLoadBalancer.start();
+ Thread.sleep(5000);
+ }
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ externalIpLoadBalancer.stop();
+ internalIpLoadBalancer.stop();
+ for(int q=0;q<servers.length;q++) {
+ servers[q].stop();
+ }
+ shootist.stop();
+ for(int q=0;q<numBalancers;q++) {
+ balancers[q].stop();
+ }
+ }
+
+ AppServer inviteServer,ackServer,byeServer;
+
+ public void testSprayingRoundRobinSIPLBsUASCallConsistentHash() throws
Exception {
+ EventListener failureEventListener = new EventListener() {
+
+ @Override
+ public void uasAfterResponse(int statusCode, AppServer
source) {
+
+
+ }
+
+ @Override
+ public void uasAfterRequestReceived(String method,
AppServer source) {
+ if(method.equals("INVITE")) {
+ inviteServer = source;
+ } else if(method.equals("ACK")) {
+ ackServer = source;
+ } else {
+ byeServer = source;
+ }
+ }
+
+ @Override
+ public void uacAfterRequestSent(String method,
AppServer source) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void uacAfterResponse(int statusCode, AppServer
source) {
+
+ }
+ };
+ for(AppServer as:servers)
as.setEventListener(failureEventListener);
+ shootist.peerHostPort="127.0.0.1:9988";
+ shootist.callerSendsBye=true;
+ shootist.sendInitialInvite();
+ //servers[0].sendHeartbeat = false;
+ Thread.sleep(12000);
+ shootist.sendBye();
+ Thread.sleep(2200);
+
+ assertEquals(3,
externalIpLoadBalancer.sipMessageWithoutRetrans.size());
+ assertSame(inviteServer, byeServer);
+ assertSame(inviteServer, ackServer);
+ assertNotNull(byeServer);
+ assertNotNull(ackServer);
+ }
+ public void testSprayingMultipleIndialogMessages() throws Exception {
+ shootist.callerSendsBye=true;
+ shootist.sendInitialInvite();
+ Thread.sleep(8000);
+ for(int q=0;q<10;q++){
+ shootist.sendMessage();Thread.sleep(600);
+ }
+ Thread.sleep(600);
+ assertTrue(shootist.responses.size()>10);
+ }
+
+}
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/log4j.xml
Sun Jan 2 22:44:18 2011
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <appender name="rolling-file"
class="org.apache.log4j.RollingFileAppender">
- <param name="file" value="logs/sip-server.log"/>
- <param name="MaxFileSize" value="2000KB"/>
- <!-- Keep one backup file -->
- <param name="MaxBackupIndex" value="20"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %p %t %l - %m%n"/>
- </layout>
- </appender>
-
- <appender name="console" class="org.apache.log4j.ConsoleAppender">
- <param name="Target" value="System.out"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%d %p %t %l - %m%n"/>
- </layout>
- </appender>
- <root>
- <priority value ="DEBUG" />
- <appender-ref ref="console" />
- </root>
-</log4j:configuration>
=======================================
---
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerContext.java
Sun Jan 2 22:44:18 2011
+++
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerContext.java
Tue Jan 4 21:05:17 2011
@@ -71,7 +71,7 @@
final Map<String, AtomicLong> responsesProcessedByStatusCode = new
ConcurrentHashMap<String, AtomicLong>();
public boolean isTwoEntrypoints() {
- return internalPort>0;
+ return internalPort>0 && internalHost != null;
}
public BalancerContext() {
=======================================
---
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerRunner.java
Sun Jan 2 22:44:18 2011
+++
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/BalancerRunner.java
Tue Jan 4 21:05:17 2011
@@ -75,6 +75,12 @@
public void start(Properties properties) {
String ipAddress = properties.getProperty(HOST_PROP);
+ if(ipAddress == null) {
+ ipAddress = properties.getProperty("internalHost");
+ }
+ if(ipAddress == null) {
+ ipAddress = properties.getProperty("externalHost");
+ }
InetAddress addr = null;
try {
=======================================
---
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/SIPBalancerForwarder.java
Sun Jan 2 22:44:18 2011
+++
/trunk/tools/sip-balancer/jar/src/main/java/org/mobicents/tools/sip/balancer/SIPBalancerForwarder.java
Tue Jan 4 21:05:17 2011
@@ -1043,7 +1043,7 @@
if(balancerRunner.balancerContext.isTwoEntrypoints()) {
fromServer =
sipProvider.equals(balancerRunner.balancerContext.internalSipProvider);
} else {
- fromServer = getSourceNode(response) != null;
+ fromServer = getSourceNode(response) == null;
}
if(fromServer) {
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/NodeRegisterTest.java
Wed Nov 3 09:00:04 2010
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/NodeRegisterTest.java
Tue Jan 4 21:05:17 2011
@@ -49,14 +49,6 @@
protected void tearDown() throws Exception {
super.tearDown();
}
-
- public void testNodeRegistryStartupShutdown2x() throws RemoteException,
UnknownHostException {
- NodeRegisterImpl reg = new
NodeRegisterImpl(InetAddress.getByName("127.0.0.1"));
- reg.startRegistry(2000);
- reg.stopRegistry();
- reg.startRegistry(2000);
- reg.stopRegistry();
- }
public void testNodeTimeouts() throws RemoteException, Exception {
BalancerRunner balancerRunner = new BalancerRunner();
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/TestSipListener.java
Mon Nov 15 14:36:51 2010
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/TestSipListener.java
Tue Jan 4 21:05:17 2011
@@ -1040,6 +1040,7 @@
}
} catch (Exception ex) {
logger.error("unexpected exception", ex);
+ throw new RuntimeException(ex);
}
}
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/HeaderConsistentHashAlgorithmTest.java
Tue Dec 21 10:50:49 2010
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/HeaderConsistentHashAlgorithmTest.java
Tue Jan 4 21:05:17 2011
@@ -112,7 +112,9 @@
shootist.callerSendsBye = true;
shootist.sendInitialInvite();
- Thread.sleep(11000);
+ Thread.sleep(9000);
+ shootist.sendBye();
+ Thread.sleep(2000);
assertNotNull(invite);
assertNotNull(bye);
}
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/WorstCaseAffinityTest.java
Sun Dec 19 18:42:21 2010
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/algorithms/WorstCaseAffinityTest.java
Tue Jan 4 21:05:17 2011
@@ -110,7 +110,9 @@
shootist.callerSendsBye = true;
shootist.sendInitialInvite();
- Thread.sleep(11000);
+ Thread.sleep(9000);
+ shootist.sendBye();
+ Thread.sleep(2000);
if(invite == null) TestCase.fail("INVITE not seen");
if(bye == null) TestCase.fail("BYE not seen");
}
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/InviteTransactionFailover.java
Tue Dec 21 10:50:49 2010
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/InviteTransactionFailover.java
Tue Jan 4 21:05:17 2011
@@ -123,10 +123,15 @@
public void testSimpleShutdown() throws Exception {
EventListener failureEventListener = new EventListener() {
-
+ boolean once = false;
@Override
- public void uasAfterResponse(int statusCode, AppServer
source) {
- source.sendCleanShutdownToBalancers();
+ public synchronized void uasAfterResponse(int statusCode, AppServer
source) {
+ if(!once) {
+ once = true;
+ System.out.println("HERE " + once);
+ source.sendCleanShutdownToBalancers();
+
+ }
}
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/Shootist.java
Sun Jan 2 22:44:18 2011
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/operation/Shootist.java
Tue Jan 4 21:05:17 2011
@@ -127,7 +127,6 @@
}
}
public void processAck(Request request, ServerTransaction stx) {
- new Timer().schedule(new ByeTask(dialog), 5000);
}
public void processRequest(RequestEvent requestReceivedEvent) {
@@ -202,7 +201,6 @@
System.out.println("Response received : Status Code = "
+ response.getStatusCode() + " " + cseq);
-
if (tid == null) {
// RFC3261: MUST respond to every 2xx
@@ -218,10 +216,7 @@
return;
}
// If the caller is supposed to send the bye
- if ( callerSendsBye && !byeTaskRunning) {
- byeTaskRunning = true;
- new Timer().schedule(new ByeTask(dialog), 4000) ;
- }
+
System.out.println("transaction state is " + tid.getState());
System.out.println("Dialog = " + tid.getDialog());
System.out.println("Dialog State is " +
tid.getDialog().getState());
@@ -462,6 +457,16 @@
fail("Unxpected exception ");
}
}
+
+ public void sendMessage() throws SipException {
+ Request r = dialog.createRequest("MESSAGE");
+ dialog.sendRequest(sipProvider.getNewClientTransaction(r));
+ }
+
+ public void sendBye() throws SipException {
+ Request r = dialog.createRequest("BYE");
+ dialog.sendRequest(sipProvider.getNewClientTransaction(r));
+ }
@@ -475,8 +480,8 @@
public void processTransactionTerminated(
TransactionTerminatedEvent transactionTerminatedEvent) {
- System.out.println("Transaction terminated event recieved " +
transactionTerminatedEvent.getClientTransaction().getRequest());
- throw new RuntimeException();
+
+
}
public void processDialogTerminated(
=======================================
---
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingTwoLoadBalancersTest.java
Sun Jan 2 22:44:18 2011
+++
/trunk/tools/sip-balancer/jar/src/test/java/org/mobicents/tools/sip/balancer/scalability/SprayingTwoLoadBalancersTest.java
Tue Jan 4 21:05:17 2011
@@ -2,8 +2,7 @@
import java.util.Properties;
-import javax.sip.address.SipURI;
-import javax.sip.header.RecordRouteHeader;
+import javax.sip.SipException;
import junit.framework.TestCase;
@@ -135,7 +134,9 @@
shootist.callerSendsBye=true;
shootist.sendInitialInvite();
//servers[0].sendHeartbeat = false;
- Thread.sleep(14000);
+ Thread.sleep(12000);
+ shootist.sendBye();
+ Thread.sleep(2000);
assertEquals(3,
externalIpLoadBalancer.sipMessageWithoutRetrans.size());
assertSame(inviteServer, byeServer);
@@ -143,5 +144,15 @@
assertNotNull(byeServer);
assertNotNull(ackServer);
}
+ public void testSprayingMultipleIndialogMessages() throws Exception {
+ shootist.callerSendsBye=true;
+ shootist.sendInitialInvite();
+ Thread.sleep(8000);
+ for(int q=0;q<10;q++){
+ shootist.sendMessage();Thread.sleep(600);
+ }
+ Thread.sleep(600);
+ assertTrue(shootist.responses.size()>10);
+ }
}