package org.mobicents.media.server.impl.resource.tone;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
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.impl.clock.TimerImpl;
import org.mobicents.media.server.impl.resource.audio.soundcard.PlayerImpl;
import org.mobicents.media.server.spi.NotificationListener;
import org.mobicents.media.server.spi.Timer;
import org.mobicents.media.server.spi.events.NotifyEvent;
import org.mobicents.media.server.spi.resource.FrequencyBean;
/**
*
* @author amit.bhayani
*
*/
public class MultiFrequencyToneGeneratorImplTest implements NotificationListener {
private final static int FREQ_ERROR = 5;
private int MAX_ERRORS = 1;
private Timer timer;
private MultiFreqToneGeneratorImpl gen;
private MultiFreqToneDetectorImpl det;
private Semaphore semaphore;
private boolean eventDetcted = false;
PlayerImpl p;
public MultiFrequencyToneGeneratorImplTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
semaphore = new Semaphore(0);
eventDetcted = false;
timer = new TimerImpl();
timer.start();
gen = new MultiFreqToneGeneratorImpl("Gen", timer);
List<FrequencyBean> freq = new ArrayList<FrequencyBean>();
FrequencyBean f1 = new FrequencyBean(1200, 700, 100);
FrequencyBean f2 = new FrequencyBean(941, 2000, 100);
FrequencyBean f3 = new FrequencyBean(1800, 2800, 100);
FrequencyBean f4 = new FrequencyBean(700, 1600, 100);
FrequencyBean f5 = new FrequencyBean(0, 0, 100);
freq.add(f1);
freq.add(f2);
freq.add(f3);
freq.add(f4);
freq.add(f5);
gen.setFreqBeanList(freq);
det = new MultiFreqToneDetectorImpl("det");
det.setFreqBean(f3);
det.setVolume(-30);
det.addListener(this);
p = new PlayerImpl("MulFreqtestPlayer");
}
@After
public void tearDown() {
timer.stop();
}
/**
* Test of getDigit method, of class InbandGeneratorImpl.
*/
@Test
@SuppressWarnings("static-access")
public void testDigit0() throws Exception {
//gen.connect(p);
gen.connect(det);
//p.start();
det.start();
gen.start();
semaphore.tryAcquire(2, TimeUnit.SECONDS);
assertTrue("MultiFreqToneEvent detected ", eventDetcted);
gen.stop();
det.stop();
p.stop();
semaphore.tryAcquire(1, TimeUnit.SECONDS);
}
public void update(NotifyEvent event) {
switch (event.getEventID()) {
case MultiFreqToneEvent.MF_TONE_EVENTID:
MultiFreqToneEvent evt = (MultiFreqToneEvent) event;
System.out.print("received MultiFreqToneEvent event = " + evt);
eventDetcted = true;
semaphore.release();
break;
}
}
}