test.tck.msgflow.TransactionTimeoutEventTest Maven / Gradle / Ivy
/*
* Conditions Of Use
*
* This software was developed by employees of the National Institute of
* Standards and Technology (NIST), and others.
* This software is has been contributed to the public domain.
* As a result, a formal license is not needed to use the software.
*
* This software is provided "AS IS."
* NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
* AND DATA ACCURACY. NIST does not warrant or make any representations
* regarding the use of the software or the results thereof, including but
* not limited to the correctness, accuracy, reliability or usefulness of
* the software.
*
*
*/
package test.tck.msgflow;
import java.util.TooManyListenersException;
import javax.sip.ClientTransaction;
import javax.sip.RequestEvent;
import javax.sip.ServerTransaction;
import javax.sip.SipException;
import javax.sip.Timeout;
import javax.sip.TimeoutEvent;
import javax.sip.header.ContactHeader;
import javax.sip.header.ToHeader;
import javax.sip.message.Request;
import javax.sip.message.Response;
import org.apache.log4j.Logger;
import test.tck.TckInternalError;
import test.tck.TiUnexpectedError;
/**
* Timeout test for invite client transactions -- test to see if an timeout
* event is delivered to the listener if the RI refuses to send OK to the INVITE
* Client Tx.
*
* @author M. Ranganathan
*/
public class TransactionTimeoutEventTest extends MessageFlowHarness {
private static Logger logger = Logger
.getLogger(InviteClientTransactionsStateMachineTest.class);
public TransactionTimeoutEventTest(String name) {
super(name, false); // disable auto-dialog for the RI, else ACKs get
// filtered out
}
// ==================== tests ==============================
/**
* Test if the tx timeout is delivered.
*/
public void testClientTransactionTimeout() {
try {
Request invite = createTiInviteRequest(null, null, null);
ClientTransaction tran = null;
try {
eventCollector.collectRequestEvent(riSipProvider);
tran = tiSipProvider.getNewClientTransaction(invite);
tran.sendRequest();
} catch (SipException ex) {
throw new TiUnexpectedError(
"A SipExceptionOccurred while trying to send request!",
ex);
} catch (TooManyListenersException ex) {
throw new TckInternalError(
"Failed to regiest a SipListener with an RI SipProvider",
ex);
}
waitForMessage();
RequestEvent inviteReceivedEvent = eventCollector
.extractCollectedRequestEvent();
assertNotNull("RequestEvent", inviteReceivedEvent);
try {
eventCollector.collectTimeoutEvent(tiSipProvider);
} catch (TooManyListenersException ex) {
throw new TiUnexpectedError(
"Failed to register a SipListener with TI", ex);
}
waitForTimeout();
TimeoutEvent timeoutEvent = eventCollector
.extractCollectedTimeoutEvent();
assertNotNull("Timeout event", timeoutEvent);
assertTrue("Timeout event type ", timeoutEvent.getTimeout().equals(
Timeout.TRANSACTION));
} catch (Exception ex) {
logger.error("unexpected exception ", ex);
ex.printStackTrace();
fail("unexpected exception");
}
}
public void testServerTransactionForTimeout() {
try {
Request invite = createRiInviteRequest(null, null, null);
ClientTransaction tran = null;
try {
eventCollector.collectRequestEvent(tiSipProvider);
tran = riSipProvider.getNewClientTransaction(invite);
tran.sendRequest();
} catch (SipException ex) {
throw new TiUnexpectedError(
"A SipExceptionOccurred while trying to send request!",
ex);
} catch (TooManyListenersException ex) {
throw new TckInternalError(
"Failed to regiest a SipListener with an RI SipProvider",
ex);
}
waitForMessage();
RequestEvent inviteReceivedEvent = eventCollector
.extractCollectedRequestEvent();
assertNotNull("RequestEvent not seen at TI", inviteReceivedEvent);
assertTrue("Server Transaction MUST be null", inviteReceivedEvent
.getServerTransaction() == null);
ServerTransaction st = tiSipProvider
.getNewServerTransaction(inviteReceivedEvent.getRequest());
Response response = tiMessageFactory.createResponse(Response.OK,
inviteReceivedEvent.getRequest());
ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
toHeader.setTag("123456");
ContactHeader contact = super.createTiContact();
response.setHeader(contact);
st.sendResponse(response);
eventCollector.collectTimeoutEvent(tiSipProvider);
waitForTimeout();
TimeoutEvent timeoutEvent = eventCollector
.extractCollectedTimeoutEvent();
assertNull("Timeout event", timeoutEvent);
//assertNotNull("Timeout event", timeoutEvent);
//assertTrue("Timeout event type must be TRANSACTION ", timeoutEvent
//.getTimeout().equals(Timeout.TRANSACTION));
} catch (Exception ex) {
logger.error("unexpected exception ", ex);
ex.printStackTrace();
fail("unexpected exception");
}
}
public void testServerTransactionForRetransmissionAlerts() {
try {
Request invite = createRiInviteRequest(null, null, null);
ClientTransaction tran = null;
tiSipProvider.setAutomaticDialogSupportEnabled(false);
try {
eventCollector.collectRequestEvent(tiSipProvider);
tran = riSipProvider.getNewClientTransaction(invite);
tran.sendRequest();
} catch (SipException ex) {
throw new TiUnexpectedError(
"A SipExceptionOccurred while trying to send request!",
ex);
} catch (TooManyListenersException ex) {
throw new TckInternalError(
"Failed to regiest a SipListener with an RI SipProvider",
ex);
}
waitForMessage();
RequestEvent inviteReceivedEvent = eventCollector
.extractCollectedRequestEvent();
assertNotNull("RequestEvent not seen at TI", inviteReceivedEvent);
assertTrue("Server Transaction MUST be null", inviteReceivedEvent
.getServerTransaction() == null);
ServerTransaction st = tiSipProvider
.getNewServerTransaction(inviteReceivedEvent.getRequest());
Response response = tiMessageFactory.createResponse(Response.OK,
inviteReceivedEvent.getRequest());
ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
toHeader.setTag("1234567");
ContactHeader contact = super.createTiContact();
response.setHeader(contact);
st.enableRetransmissionAlerts();
st.sendResponse(response);
eventCollector.collectTimeoutEvent(tiSipProvider);
waitForTimeout();
TimeoutEvent timeoutEvent = eventCollector
.extractCollectedTimeoutEvent();
assertNotNull("Timeout event not found ", timeoutEvent);
assertTrue("Timeout event type must be retransmit ", timeoutEvent
.getTimeout().equals(Timeout.RETRANSMIT));
} catch (Exception ex) {
logger.error("unexpected exception ", ex);
ex.printStackTrace();
fail("unexpected exception");
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy