/** * */ package test.unit.gov.nist.javax.sip.stack.forkedinvite; import java.util.HashSet; import javax.sip.SipProvider; import junit.framework.TestCase; import org.apache.log4j.Appender; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.SimpleLayout; /** * @author M. Ranganathan * */ public class InviteTest extends TestCase { protected Shootist shootist; private static Logger logger = Logger.getLogger("test.tck"); protected static final Appender console = new ConsoleAppender(new SimpleLayout()); private static int forkCount = 2; public static final String PREFERRED_SERVICE_VALUE="urn:urn-7:3gpp-service.ims.icsi.mmtel.gsma.ipcall"; protected HashSet<Shootme> shootme = new HashSet<Shootme>(); private static final int TIMEOUT = 37000; private Proxy proxy; // private Appender appender; public InviteTest() { super("forkedInviteTest"); } public void setUp() { try { super.setUp(); } catch (Exception ex) { fail("unexpected exception "); } } public void tearDown() { try { } catch (Exception ex) { ex.printStackTrace(); logger.error("unexpected exception", ex); fail("unexpected exception "); } } public void testInvite() throws Exception { try { shootist = new Shootist(6050, 5070, "on", true); SipProvider shootistProvider = shootist.createSipProvider(); shootistProvider.addSipListener(shootist); boolean sendRinging = true; for (int i = 0 ; i < forkCount ; i ++ ) { Shootme shootme = new Shootme(5080 + i,sendRinging,4000 + (500 *i), 4000 + (500 *i)); sendRinging = true; SipProvider shootmeProvider = shootme.createProvider(); shootmeProvider.addSipListener(shootme); this.shootme.add(shootme); } this.proxy = new Proxy(5070,forkCount); SipProvider provider = proxy.createSipProvider(); provider.addSipListener(proxy); logger.debug("setup completed"); this.shootist.sendInvite(forkCount); Thread.sleep(TIMEOUT); this.shootist.checkState(); int ackCount = 0; for ( Shootme shootme: this.shootme) { shootme.checkState(); if ( shootme.isAckSeen()) { ackCount ++; } } assertEquals("ACK count must be exactly 2", 2,ackCount); } finally { this.shootist.stop(); for ( Shootme shootme: this.shootme) { shootme.stop(); } this.proxy.stop(); } } public void testInviteAutomaticDialogNonEnabled() throws Exception { try { shootist = new Shootist(6050, 5070, "off", true); SipProvider shootistProvider = shootist.createSipProvider(); shootistProvider.addSipListener(shootist); boolean sendRinging = true; for (int i = 0 ; i < forkCount ; i ++ ) { Shootme shootme = new Shootme(5080 + i,sendRinging, 4000 + (100 *i), 4000 + (100 *i)); sendRinging = true; SipProvider shootmeProvider = shootme.createProvider(); shootmeProvider.addSipListener(shootme); this.shootme.add(shootme); } this.proxy = new Proxy(5070,forkCount); SipProvider provider = proxy.createSipProvider(); provider.addSipListener(proxy); logger.debug("setup completed"); this.shootist.sendInvite(forkCount); Thread.sleep(TIMEOUT); this.shootist.checkState(); int ackCount = 0; for ( Shootme shootme: this.shootme) { shootme.checkState(); if ( shootme.isAckSeen()) { ackCount ++; } } assertEquals("ACK count must be exactly 2", 2,ackCount); } finally { this.shootist.stop(); for ( Shootme shootme: this.shootme) { shootme.stop(); } this.proxy.stop(); } } public void testInviteAutomaticDialogNonEnabledForkSecond() throws Exception { try { shootist = new Shootist(6050, 5070, "off", false); SipProvider shootistProvider = shootist.createSipProvider(); shootistProvider.addSipListener(shootist); boolean sendRinging = true; for (int i = 0 ; i < forkCount ; i ++ ) { Shootme shootme = new Shootme(5080 + i,sendRinging, 4000 - (500 *i), 4000 - (500 *i)); sendRinging = true; SipProvider shootmeProvider = shootme.createProvider(); shootmeProvider.addSipListener(shootme); this.shootme.add(shootme); } this.proxy = new Proxy(5070,forkCount); SipProvider provider = proxy.createSipProvider(); provider.addSipListener(proxy); logger.debug("setup completed"); this.shootist.sendInvite(forkCount); Thread.sleep(TIMEOUT); this.shootist.checkState(); int ackCount = 0; for ( Shootme shootme: this.shootme) { shootme.checkState(); if ( shootme.isAckSeen()) { ackCount ++; } } assertEquals("ACK count must be exactly 2", 2,ackCount); } finally { this.shootist.stop(); for ( Shootme shootme: this.shootme) { shootme.stop(); } this.proxy.stop(); } } public void testInviteAutomaticDialogNonEnabledOKFromSecondForkFirst() throws Exception { try { shootist = new Shootist(6050, 5070, "off", true); SipProvider shootistProvider = shootist.createSipProvider(); shootistProvider.addSipListener(shootist); boolean sendRinging = true; for (int i = 0 ; i < forkCount ; i ++ ) { Shootme shootme = new Shootme(5080 + i,sendRinging, 4000 + (100 *i), 4000 - (100 *i)); sendRinging = true; SipProvider shootmeProvider = shootme.createProvider(); shootmeProvider.addSipListener(shootme); this.shootme.add(shootme); } this.proxy = new Proxy(5070,forkCount); SipProvider provider = proxy.createSipProvider(); provider.addSipListener(proxy); logger.debug("setup completed"); this.shootist.sendInvite(forkCount); Thread.sleep(TIMEOUT); this.shootist.checkState(); int ackCount = 0; for ( Shootme shootme: this.shootme) { shootme.checkState(); if ( shootme.isAckSeen()) { ackCount ++; } } assertEquals("ACK count must be exactly 2", 2,ackCount); } finally { this.shootist.stop(); for ( Shootme shootme: this.shootme) { shootme.stop(); } this.proxy.stop(); } } /** * Checking if when the flag is not enabled and a 200 ok response comes before * the app code has called createNewDialog doesn't create a dialog */ public void testAutomaticDialogNonEnabledRaceCondition() throws Exception { try { shootist = new Shootist(6050, 5070, "off", false); shootist.setCreateDialogAfterRequest(true); SipProvider shootistProvider = shootist.createSipProvider(); shootistProvider.addSipListener(shootist); boolean sendRinging = true; forkCount = 1; for (int i = 0 ; i < forkCount ; i ++ ) { Shootme shootme = new Shootme(5080 + i,sendRinging, 4000 + (500 *i), 4000 + (500 *i)); sendRinging = true; SipProvider shootmeProvider = shootme.createProvider(); shootmeProvider.addSipListener(shootme); this.shootme.add(shootme); } this.proxy = new Proxy(5070,forkCount); SipProvider provider = proxy.createSipProvider(); provider.addSipListener(proxy); logger.debug("setup completed"); this.shootist.sendInvite(0); Thread.sleep(35000); this.shootist.checkState(); int ackCount = 0; for ( Shootme shootme: this.shootme) { if ( shootme.isAckSeen()) { ackCount ++; } } assertEquals("ACK count must be exactly 0", 0,ackCount); } finally { this.shootist.stop(); for ( Shootme shootme: this.shootme) { shootme.stop(); } this.proxy.stop(); } } }