package org.mobicents.qa.performance.jainsip.test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mobicents.qa.performance.jainsip.util.SippController;
public class SippControllerTestCase {
private SippController testSubject;
private DatagramSocket socket;
@Before
public void init() {
try {
String ip = "127.0.0.1";
String port = "" + ((int) Math.round(Math.random() * 50000) + 10000);
this.testSubject = new SippController(ip, port);
this.socket = new DatagramSocket(Integer.parseInt(port));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testSetRate() {
int newRate = ((int) Math.round(Math.random() * 50000) + 10000);
testSubject.setRate(newRate);
testMsg(SippController.SET_RATE_COMMAND + " " + newRate);
}
@Test
public void testIncreaseRateOne() {
testSubject.increaseRate();
testMsg(SippController.INCREASE_ONE_COMMAND);
}
@Test
public void testIncreaseRateOneSeveral() {
try {
testSubject.increaseRate(-1);
fail("Negative value accepted for increaseRate(int)");
} catch (IllegalArgumentException e) {
// expected
} catch (Throwable t) {
fail("Unexpected exception '" + t.getMessage() + "' for increaseRate(int)");
}
int newRate = (int) Math.round(Math.random() * 10);
testSubject.increaseRate(newRate);
for (int i = 0; i < newRate; i++) {
testMsg(SippController.INCREASE_ONE_COMMAND);
}
}
@Test
public void testIncreaseRateTen() {
testSubject.increaseRateTen();
testMsg(SippController.INCREASE_TEN_COMMAND);
}
@Test
public void testIncreaseRateTenSeveral() {
try {
testSubject.increaseRateTen(-1);
fail("Negative value accepted for increaseRateTen(int)");
} catch (IllegalArgumentException e) {
// expected
} catch (Throwable t) {
fail("Unexpected exception '" + t.getMessage() + "' for increaseRateTen(int)");
}
int newRate = (int) Math.round(Math.random() * 10);
testSubject.increaseRateTen(newRate);
for (int i = 0; i < newRate; i++) {
testMsg(SippController.INCREASE_TEN_COMMAND);
}
}
@Test
public void testDecreaseRateOne() {
testSubject.decreaseRate();
testMsg(SippController.DECREASE_ONE_COMMAND);
}
@Test
public void testDecreaseRateOneSeveral() {
try {
testSubject.decreaseRate(-1);
fail("Negative value accepted for decreaseRate(int)");
} catch (IllegalArgumentException e) {
// expected
} catch (Throwable t) {
fail("Unexpected exception '" + t.getMessage() + "' for decreaseRate(int)");
}
int newRate = (int) Math.round(Math.random() * 10);
testSubject.decreaseRate(newRate);
for (int i = 0; i < newRate; i++) {
testMsg(SippController.DECREASE_ONE_COMMAND);
}
}
@Test
public void testDecreaseRateTen() {
testSubject.decreaseRateTen();
testMsg(SippController.DECREASE_TEN_COMMAND);
}
@Test
public void testDecreaseRateTenSeveral() {
try {
testSubject.decreaseRateTen(-1);
fail("Negative value accepted for decreaseRateTen(int)");
} catch (IllegalArgumentException e) {
// expected
} catch (Throwable t) {
fail("Unexpected exception '" + t.getMessage() + "' for decreaseRateTen(int)");
}
int newRate = (int) Math.round(Math.random() * 10);
testSubject.decreaseRateTen(newRate);
for (int i = 0; i < newRate; i++) {
testMsg(SippController.DECREASE_TEN_COMMAND);
}
}
@Test
public void testQuit() {
testSubject.quit();
for (int i = 0; i < 2; i++) {
testMsg(SippController.QUIT_COMMAND);
}
}
@After
public void tearDown() {
testSubject = null;
socket.close();
socket = null;
}
private void testMsg(String expectedMsg) {
try {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String receivedMsg = new String(packet.getData()).substring(0, packet.getLength());
if (expectedMsg.compareTo(receivedMsg) != 0) {
fail("Received '" + receivedMsg + "' while expecting '" + expectedMsg + "'");
}
} catch (IOException e) {
fail("IOException on getMsg");
}
}
}