package net.jxse.systemtests.colocated; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import net.jxta.endpoint.Message; import net.jxta.pipe.PipeMsgEvent; import net.jxta.pipe.PipeMsgListener; import net.jxta.platform.NetworkManager; public class LoadTester { public static void loadTestSinglePipe(NetworkManager alice, NetworkManager bob, int numMessages, int messageSize) throws Exception { final AtomicBoolean sendComplete = new AtomicBoolean(false); final AtomicInteger numReceived = new AtomicInteger(0); final CountDownLatch receiveComplete = new CountDownLatch(1); final ConcurrentSkipListSet<Integer> messagesToReceive = new ConcurrentSkipListSet<Integer>(); PipeMsgListener aliceListener = new PipeMsgListener() { public void pipeMsgEvent(PipeMsgEvent event) { if(event.getMessage() != null) { int received = numReceived.incrementAndGet(); if(received % 100 == 0) { System.out.println("Received " + received + " messages"); } int msgNum = Integer.parseInt(SystemTestUtils.getMessageString(event.getMessage())); messagesToReceive.remove(msgNum); if(sendComplete.get() && messagesToReceive.isEmpty()) { receiveComplete.countDown(); } } } }; 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); messagesToReceive.add(i); while(ends.clientEnd.sendMessage(sentMessage) != true) { System.out.print("."); Thread.yield(); } } sendComplete.set(true); receiveComplete.await(15L, TimeUnit.SECONDS); } }