@Test
  public void testOKRingingLandOnSameNode() 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;
            } 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("lbint", "127.0.0.1:5065");
    route.setParameter("node_host", "127.0.0.1");
    route.setParameter("node_port", "4060");
    route.setTransportParam(ListeningPoint.UDP);
    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"));
    assertSame(ringingAppServer, okAppServer);
    assertNotNull(ringingAppServer);
    assertNotNull(okAppServer);
  }
  @Test
  public void testInviteByeLandOnDifferentNodes() 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")) invite = source;
            if (method.equals("ACK")) ack = source;
            if (method.equals("BYE")) bye = source;
          }

          @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(9000);
    shootist.sendBye();
    Thread.sleep(2000);
    assertNotNull(invite);
    assertNotNull(bye);
    assertEquals(ack, invite);
    assertNotEquals(bye, invite);
  }