package org.jgroups.tests; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.blocks.*; import org.jgroups.blocks.mux.MuxRpcDispatcher; import org.jgroups.blocks.mux.NoMuxHandlerRspFilter; import org.jgroups.util.Util; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @Test(groups=Global.FUNCTIONAL,sequential=true) public class RequestOptionsTest { protected JChannel channel; protected RequestOptions reqOpt = new RequestOptions(ResponseMode.GET_ALL, 5000); protected static final String simple_props="SHARED_LOOPBACK:PING(timeout=1000):" + "pbcast.NAKACK(log_discard_msgs=false;log_not_found_msgs=false)" + ":UNICAST:pbcast.STABLE(stability_delay=200):pbcast.GMS:MFC:UFC:FRAG2"; @BeforeMethod protected void start() throws Exception { channel=new JChannel(simple_props); } protected void stop() throws Exception { Util.close(channel); } /** * Tests https://issues.jboss.org/browse/JGRP-1369 */ public void testRequestOptionsChaining() throws Exception { MuxRpcDispatcher muxRpc = new MuxRpcDispatcher((short) 1, channel, null, null, new Server()); channel.connect("group"); for(int i=0; i < 20; i++) muxRpc.callRemoteMethods(null, new MethodCall(Server.class.getMethod("foo")), reqOpt); RspFilter filter=reqOpt.getRspFilter(); int count=count(filter); System.out.println("count=" + count); assert count == 1; } protected static int count(RspFilter filter) { if(filter instanceof NoMuxHandlerRspFilter) return 1 + count(((NoMuxHandlerRspFilter)filter).getFilter()); return 0; } static public class Server { public static void foo() {System.out.println("Entering foo"); } } }