package net.jxse.systemtests.colocated;
import static junit.framework.Assert.*;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import net.jxta.endpoint.Message;
import net.jxta.pipe.PipeMsgEvent;
import net.jxta.pipe.PipeMsgListener;
import net.jxta.platform.NetworkManager;
public class SoakTester {
public static void soakTestSinglePipe(NetworkManager alice, NetworkManager bob, int numMessages, int messageSize) throws Exception {
final LinkedBlockingQueue<Message> aliceReceived = new LinkedBlockingQueue<Message>();
PipeMsgListener aliceListener = new PipeMsgListener() {
public void pipeMsgEvent(PipeMsgEvent event) {
if(event.getMessage() != null) {
aliceReceived.offer(event.getMessage());
}
}
};
PipeMsgListener bobListener = new PipeMsgListener() {
public void pipeMsgEvent(PipeMsgEvent event) {
// we are not sending any messages to bob, so simply discard
}
};
PipeEnds ends = SystemTestUtils.createBiDiPipe(alice, bob, aliceListener, bobListener, 15L, TimeUnit.SECONDS);
for(int i=0; i < numMessages; i++) {
if(i % 100 == 0) {
System.out.println("Sending message " + (i+1) + " of " + numMessages);
}
Message sentMessage = SystemTestUtils.createMessage("" + i, messageSize);
ends.clientEnd.sendMessage(sentMessage);
Message receivedMessage = aliceReceived.poll(2, TimeUnit.SECONDS);
if(receivedMessage == null) {
fail("failed to receive message number " + i + " in a timely manner");
}
SystemTestUtils.checkMessagesEqual(sentMessage, receivedMessage);
}
}
}