package org.jgroups.blocks; import org.jgroups.Address; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.tests.ChannelTestBase; import org.jgroups.util.RspList; import org.jgroups.util.Util; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.List; /** * @author Bela Ban */ @Test(groups=Global.STACK_DEPENDENT) public class RpcDispatcherAnycastTest extends ChannelTestBase { RpcDispatcher disp, disp2, disp3; JChannel ch, ch2, ch3; @BeforeMethod void setUp() throws Exception { ch=createChannel(true,3); ServerObject obj=new ServerObject(null); disp=new RpcDispatcher(ch, obj); ch.connect("RpcDispatcherAnycastTest"); obj.setAddress(ch.getAddress()); ch2=createChannel(ch); ServerObject obj2=new ServerObject(null); disp2=new RpcDispatcher(ch2, obj2); ch2.connect("RpcDispatcherAnycastTest"); obj2.setAddress(ch2.getAddress()); ch3=createChannel(ch); ServerObject obj3=new ServerObject(null); disp3=new RpcDispatcher(ch3, obj3); ch3.connect("RpcDispatcherAnycastTest"); obj3.setAddress(ch3.getAddress()); } @AfterMethod void tearDown() throws Exception { ch3.close(); disp3.stop(); ch2.close(); disp2.stop(); ch.close(); disp.stop(); } public void testUnserializableValue() throws Exception { List<Address> members=ch.getView().getMembers(); System.out.println("members: " + members); assert members.size() > 1: "we should have more than 1 member"; List<Address> subset=Util.pickSubset(members, 0.2); System.out.println("subset: " + subset); Util.sleep(1000); RspList rsps=disp.callRemoteMethods(subset, "foo", null, null, new RequestOptions(ResponseMode.GET_ALL, 0, false)); System.out.println("rsps (no anycast): " + rsps); rsps=disp.callRemoteMethods(subset, "foo", null, null, new RequestOptions(ResponseMode.GET_ALL, 0, true)); System.out.println("rsps (with anycast): " + rsps); } static class ServerObject { Address addr; public ServerObject(Address addr) { this.addr=addr; } public Address foo() { // System.out.println("foo() - returning " + addr); return addr; } public void setAddress(Address localAddress) { addr=localAddress; } } }