/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.restcomm.media.resource.dtmf;
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.restcomm.media.component.audio.AudioComponent;
import org.restcomm.media.component.audio.AudioMixer;
import org.restcomm.media.component.oob.OOBComponent;
import org.restcomm.media.component.oob.OOBMixer;
import org.restcomm.media.scheduler.Clock;
import org.restcomm.media.scheduler.PriorityQueueScheduler;
import org.restcomm.media.scheduler.WallClock;
import org.restcomm.media.spi.dtmf.DtmfDetectorListener;
import org.restcomm.media.spi.dtmf.DtmfEvent;
import org.restcomm.media.spi.listener.TooManyListenersException;
/**
*
* @author yulian oifa
*/
public class DtmfBufferingTest implements DtmfDetectorListener {
private Clock clock;
private PriorityQueueScheduler scheduler;
private DetectorImpl detector;
private GeneratorImpl generator;
private AudioComponent detectorComponent;
private AudioComponent generatorComponent;
private AudioMixer audioMixer;
private OOBComponent oobDetectorComponent;
private OOBComponent oobGeneratorComponent;
private OOBMixer oobMixer;
private String tone;
@Before
public void setUp() throws TooManyListenersException {
clock = new WallClock();
scheduler = new PriorityQueueScheduler();
scheduler.setClock(clock);
scheduler.start();
generator = new GeneratorImpl("dtmf", scheduler);
generator.setToneDuration(100);
generator.setVolume(-20);
detector = new DetectorImpl("dtmf", -35, 40, 100, scheduler);
audioMixer=new AudioMixer(scheduler);
detectorComponent=new AudioComponent(1);
detectorComponent.addOutput(detector.getAudioOutput());
detectorComponent.updateMode(false,true);
generatorComponent=new AudioComponent(2);
generatorComponent.addInput(generator.getAudioInput());
generatorComponent.updateMode(true,false);
audioMixer.addComponent(detectorComponent);
audioMixer.addComponent(generatorComponent);
oobMixer=new OOBMixer(scheduler);
oobDetectorComponent=new OOBComponent(1);
oobDetectorComponent.addOutput(detector.getOOBOutput());
oobDetectorComponent.updateMode(false,true);
oobGeneratorComponent=new OOBComponent(2);
oobGeneratorComponent.addInput(generator.getOOBInput());
oobGeneratorComponent.updateMode(true,false);
oobMixer.addComponent(oobDetectorComponent);
oobMixer.addComponent(oobGeneratorComponent);
tone="";
}
@After
public void tearDown() {
generator.deactivate();
detector.deactivate();
audioMixer.stop();
scheduler.stop();
}
/**
* Test of setDuration method, of class DetectorImpl.
*/
@Test
public void testFlush() throws InterruptedException, TooManyListenersException {
//queue "1" into detector's buffer
generator.setDigit("1");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(300);
assertEquals("1", tone);
tone="";
detector.removeListener(this);
//queue "1" into detector's buffer
generator.setOOBDigit("1");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(300);
assertEquals("1", tone);
}
@Test
public void testBuffering() throws InterruptedException, TooManyListenersException {
//queue "1" into detector's buffer
generator.setDigit("1");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
//queue "2" into detector's buffer
generator.setDigit("2");
generator.wakeup();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("12", tone);
tone="";
detector.removeListener(this);
//queue "1" into detector's buffer
generator.setOOBDigit("1");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
//queue "2" into detector's buffer
generator.setOOBDigit("2");
generator.wakeup();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("12", tone);
}
@Test
public void testDelivery() throws InterruptedException, TooManyListenersException {
//assign listener
detector.addListener(this);
//queue "1" into detector's buffer
generator.setDigit("1");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
//queue "2" into detector's buffer
generator.setDigit("2");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
assertEquals("12", tone);
//assign listener and flush digit
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("12", tone);
tone="";
//queue "1" into detector's buffer
generator.setOOBDigit("1");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
//queue "2" into detector's buffer
generator.setOOBDigit("2");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
assertEquals("12", tone);
//assign listener and flush digit
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("12", tone);
}
@Test
public void testClear() throws InterruptedException, TooManyListenersException {
//queue "1" into detector's buffer
generator.setDigit("1");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
//queue "2" into detector's buffer
generator.setDigit("2");
generator.activate();
detector.activate();
audioMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
audioMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.clearBuffer();
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("", tone);
detector.removeListener(this);
//queue "1" into detector's buffer
generator.setOOBDigit("1");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
//queue "2" into detector's buffer
generator.setOOBDigit("2");
generator.activate();
detector.activate();
oobMixer.start();
Thread.sleep(200);
generator.deactivate();
detector.deactivate();
oobMixer.stop();
//assign listener and flush digit
detector.addListener(this);
detector.clearBuffer();
detector.flushBuffer();
//wait a bit for delivery
Thread.sleep(200);
assertEquals("", tone);
}
public void process(DtmfEvent event) {
tone += event.getTone();
}
}