package org.mobicents.media.server.impl.resource.dtmf; import static org.junit.Assert.assertEquals; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mobicents.media.server.EndpointImpl; import org.mobicents.media.server.impl.clock.TimerImpl; import org.mobicents.media.server.spi.Endpoint; import org.mobicents.media.server.spi.NotificationListener; import org.mobicents.media.server.spi.Timer; import org.mobicents.media.server.spi.events.NotifyEvent; /** * * @author amit bhayani * */ public class Rfc2833DetectorTest { private volatile boolean receivedEvent = false; Timer timer = null; Endpoint endpoint = null; Rfc2833GeneratorImpl generator = null; Rfc2833DetectorImpl detector = null; private Semaphore semaphore; @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { receivedEvent = false; semaphore = new Semaphore(0); timer = new TimerImpl(); endpoint = new EndpointImpl(); endpoint.setTimer(timer); generator = new Rfc2833GeneratorImpl("Rfc2833DetectorTest", timer); generator.setToneDuration(100); // 100 ms generator.setVolume(10); generator.setEndpoint(endpoint); detector = new Rfc2833DetectorImpl("Rfc2833DetectorTest"); } @After public void tearDown() { } private void checkDigit(String digit, int eventID) throws InterruptedException { generator.setDigit(digit); DTMFListener listener = new DTMFListener(eventID); detector.addListener(listener); detector.connect(generator); generator.start(); detector.start(); semaphore.tryAcquire(120, TimeUnit.MILLISECONDS); assertEquals(true, receivedEvent); } @Test public void testDTMF0() throws InterruptedException { checkDigit("0", DtmfEvent.DTMF_0); } @Test public void testDTMF1() throws InterruptedException { checkDigit("1", DtmfEvent.DTMF_1); } @Test public void testDTMF2() throws InterruptedException { checkDigit("2", DtmfEvent.DTMF_2); } @Test public void testDTMF3() throws InterruptedException { checkDigit("3", DtmfEvent.DTMF_3); } @Test public void testDTMF4() throws InterruptedException { checkDigit("4", DtmfEvent.DTMF_4); } @Test public void testDTMF5() throws InterruptedException { checkDigit("5", DtmfEvent.DTMF_5); } @Test public void testDTMF6() throws InterruptedException { checkDigit("6", DtmfEvent.DTMF_6); } @Test public void testDTMF7() throws InterruptedException { checkDigit("7", DtmfEvent.DTMF_7); } @Test public void testDTMF8() throws InterruptedException { checkDigit("8", DtmfEvent.DTMF_8); } @Test public void testDTMF9() throws InterruptedException { checkDigit("9", DtmfEvent.DTMF_9); } @Test public void testDTMFA() throws InterruptedException { checkDigit("A", DtmfEvent.DTMF_A); } @Test public void testDTMFB() throws InterruptedException { checkDigit("B", DtmfEvent.DTMF_B); } @Test public void testDTMFC() throws InterruptedException { checkDigit("C", DtmfEvent.DTMF_C); } @Test public void testDTMFD() throws InterruptedException { checkDigit("D", DtmfEvent.DTMF_D); } @Test public void testDTMFSTAR() throws InterruptedException { checkDigit("*", DtmfEvent.DTMF_STAR); } @Test public void testDTMFHASH() throws InterruptedException { checkDigit("#", DtmfEvent.DTMF_HASH); } private class DTMFListener implements NotificationListener { int eventId = 0; public DTMFListener(int eventId) { this.eventId = eventId; } public void update(NotifyEvent event) { if (event.getEventID() == eventId) { receivedEvent = true; semaphore.release(); } } } }