package org.jgroups.tests; import org.jgroups.*; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.LinkedList; import java.util.List; /** * Tests unicast functionality * @author Bela Ban */ @Test(groups=Global.STACK_DEPENDENT,sequential=false) public class UnicastUnitTest extends ChannelTestBase { JChannel ch1, ch2=null; @BeforeMethod protected void setUp() throws Exception { ch1=createChannel(true,2, "A"); ch2=createChannel(ch1, "B"); } @AfterMethod protected void tearDown() throws Exception { if(ch2 != null) ch2.close(); if(ch1 != null) ch1.close(); } @Test public void testUnicastMessageInCallbackExistingMember() throws Exception { ch1.connect("UnicastUnitTest"); MyReceiver receiver=new MyReceiver(ch1); ch1.setReceiver(receiver); ch2.connect("UnicastUnitTest"); Exception ex=receiver.getEx(); if(ex != null) throw ex; ch1.setReceiver(null); } private static class MyReceiver extends ReceiverAdapter { Channel channel; Exception ex; public MyReceiver(Channel channel) { this.channel=channel; } public Exception getEx() { return ex; } public void viewAccepted(View new_view) { Address local_addr=channel.getAddress(); assertNotNull(local_addr); System.out.println("[" + local_addr + "]: " + new_view); List<Address> members=new LinkedList<Address>(new_view.getMembers()); assertEquals("members=" + members + ", local_addr=" + local_addr, 2, members.size()); members.remove(local_addr); assertEquals(1, members.size()); Address dest=members.get(0); Message unicast_msg=new Message(dest, null, null); try { // uncomment line below for workaround // channel.down(new Event(Event.ENABLE_UNICASTS_TO, dest)); channel.send(unicast_msg); } catch(Exception e) { ex=e; e.printStackTrace(); throw new RuntimeException(e); } } } }