package org.jgroups.tests; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; import org.jgroups.protocols.*; import org.jgroups.protocols.pbcast.GMS; import org.jgroups.protocols.pbcast.NAKACK2; import org.jgroups.protocols.pbcast.STABLE; import org.jgroups.util.Util; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Tests the flow control (FC) protocol * @author Bela Ban */ @Test(groups=Global.FUNCTIONAL,sequential=true) public class FCTest { JChannel ch; static final int SIZE=1000; // bytes static final int NUM_MSGS=100000; static final int PRINT=NUM_MSGS / 10; @BeforeMethod void setUp() throws Exception { ch=Util.createChannel(new SHARED_LOOPBACK().setValue("thread_pool_rejection_policy", "run").setValue("loopback", true), new PING(), new NAKACK2().setValue("use_mcast_xmit", false), new UNICAST2(), new STABLE().setValue("max_bytes", 50000), new GMS().setValue("print_local_addr", false), new FC().setValue("min_credits", 1000).setValue("max_credits", 10000).setValue("max_block_time", 1000), new FRAG2()); ch.connect("FCTest"); } @AfterMethod void tearDown() throws Exception { Util.close(ch); } public void testReceptionOfAllMessages() throws Exception { int num_received=0; Receiver r=new Receiver(); ch.setReceiver(r); for(int i=1; i <= NUM_MSGS; i++) { Message msg=new Message(null, null, createPayload(SIZE)); ch.send(msg); if(i % PRINT == 0) System.out.println("==> " + i); } int num_tries=10; while(num_tries > 0) { Util.sleep(1000); num_received=r.getNumberOfReceivedMessages(); System.out.println("-- num received=" + num_received); if(num_received >= NUM_MSGS) break; num_tries--; } assert num_received == NUM_MSGS; } private static byte[] createPayload(int size) { byte[] retval=new byte[size]; for(int i=0; i < size; i++) retval[i]='0'; return retval; } static class Receiver extends ReceiverAdapter { int num_mgs_received=0; public void receive(Message msg) { num_mgs_received++; if(num_mgs_received % PRINT == 0) System.out.println("<== " + num_mgs_received); } public int getNumberOfReceivedMessages() { return num_mgs_received; } } }