package test.msgflow.mediagroup.signals;
import java.io.Serializable;
import javax.media.mscontrol.MediaEventListener;
import javax.media.mscontrol.MsControlException;
import javax.media.mscontrol.join.JoinEvent;
import javax.media.mscontrol.join.JoinEventListener;
import javax.media.mscontrol.join.Joinable;
import javax.media.mscontrol.mediagroup.MediaGroup;
import javax.media.mscontrol.mediagroup.signals.SignalDetector;
import javax.media.mscontrol.mediagroup.signals.SignalDetectorEvent;
import javax.media.mscontrol.networkconnection.NetworkConnection;
import org.apache.log4j.Logger;
import org.mobicents.javax.media.mscontrol.MediaSessionImpl;
import test.msgflow.MessageFlowHarness;
/**
*
*
* @author amit bhayani
*
*/
public class SignalDetectorTest extends MessageFlowHarness {
// TODO: Do SignalDetectorTest needs its own MGW?
private MGW mgw;
public SignalDetectorTest() {
super();
logger = Logger.getLogger(SignalDetectorTest.class);
}
public SignalDetectorTest(String name) {
super(name);
logger = Logger.getLogger(SignalDetectorTest.class);
}
public void setUp() {
try {
super.setUp();
mgw = new MGW(mgwProvider);
} catch (Exception ex) {
ex.printStackTrace();
fail("Unexpected Exception");
}
}
public void testSignalDetect() throws Exception {
final MediaSessionImpl myMediaSession = (MediaSessionImpl) msControlFactory.createMediaSession();
final NetworkConnection NC1 = myMediaSession.createNetworkConnection(NetworkConnection.BASIC);
final MediaGroup MG1 = myMediaSession.createMediaGroup(MediaGroup.SIGNALDETECTOR);
final SignalDetector detector = MG1.getSignalDetector();
final ContextImpl ser = new ContextImpl();
JoinEventListener statusEvtList = new JoinEventListener() {
public void onEvent(JoinEvent event) {
if (event.isSuccessful()) {
if (JoinEvent.JOINED == event.getEventType()) {
logger.info("Join successful " + event);
MediaEventListener<SignalDetectorEvent> sigDetectorListener = new MediaEventListener<SignalDetectorEvent>() {
public void onEvent(SignalDetectorEvent anEvent) {
if (anEvent.isSuccessful()) {
if (SignalDetectorEvent.SIGNAL_DETECTED == anEvent.getEventType()) {
logger.debug(" SignalDetection successfully. received DTMF = "
+ anEvent.getSignalString());
testPassed = true;
} else {
logger.error(" SignalDetection successfully. But EventType is = "
+ anEvent.getEventType());
}
} else {
logger.error("Received Error from Player " + anEvent);
}
}
};
detector.addListener(sigDetectorListener);
try {
detector.receiveSignals(1, null, null, null);
} catch (MsControlException e) {
logger.error(e);
fail("Player failed");
}
} else {
logger.error("Join failed " + event);
fail("Join of MG1 and NC1 failed");
}
} else {
logger.error("Join failed " + event);
fail("Join of MG1 and NC1 failed");
}
}
};
MG1.addListener(statusEvtList);
MG1.joinInitiate(Joinable.Direction.DUPLEX, NC1, ser);
waitForMessage();
waitForMessage();
MG1.removeListener(statusEvtList);
MG1.unjoinInitiate(NC1, ser);
waitForMessage();
try {
detector.receiveSignals(1, null, null, null);
fail("SignalDetector didnt throw MsControlException(Container is not joined to any other container)");
} catch (MsControlException e) {
logger.error("expected error ", e);
}
assertTrue(this.getName() + " passed = " + testPassed, testPassed);
}
private class ContextImpl implements Serializable {
}
public void tearDown() {
this.mgw.checkState();
try {
super.tearDown();
} catch (Exception ex) {
}
}
}