1 /* 2 * Created on 19/Jan/04 3 * 4 * To change the template for this generated file go to 5 * Window>Preferences>Java>Code Generation>Code and Comments 6 */ 7 package replica.group.jgroups; 8 9 import java.util.Iterator; 10 import java.util.List; 11 12 import org.jgroups.Channel; 13 import org.jgroups.JChannel; 14 import org.jgroups.Message; 15 import org.jgroups.View; 16 17 import replica.group.Address; 18 import replica.group.GroupManager; 19 import replica.group.event.GroupListener; 20 import replica.group.event.MessageEvent; 21 import replica.group.event.SuspectEvent; 22 import replica.group.event.ViewEvent; 23 24 import junit.framework.TestCase; 25 26 /*** 27 * @author no119431 28 * 29 * To change the template for this generated type comment go to 30 * Window>Preferences>Java>Code Generation>Code and Comments 31 */ 32 public class JGroupsGroupManagerTest extends TestCase { 33 34 boolean receivedViewChangedEvent; 35 boolean receivedMessage; 36 37 int numberReceivedViewChangedEvents; 38 39 String props= 40 "UDP(mcast_addr=228.8.8.8;mcast_port=45566;ip_ttl=32;" + 41 "mcast_send_buf_size=150000;mcast_recv_buf_size=80000):" + 42 "PING(timeout=2000;num_initial_members=3):" + 43 "MERGE2(min_interval=5000;max_interval=10000):" + 44 "FD_SOCK:" + 45 "VERIFY_SUSPECT(timeout=1500):" + 46 "pbcast.NAKACK(gc_lag=50;retransmit_timeout=600,1200,2400,4800):" + 47 "UNICAST(timeout=600,1200,2400):" + 48 "pbcast.STABLE(desired_avg_gossip=20000):" + 49 "FRAG(frag_size=4096;down_thread=false;up_thread=false):" + 50 "pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;" + 51 "shun=true;print_local_addr=false)"; 52 53 /*** 54 * Constructor for JGroupsGroupManagerTest. 55 * @param arg0 56 */ 57 public JGroupsGroupManagerTest(String arg0) { 58 super(arg0); 59 } 60 61 public void testAddListener() { 62 JGroupsGroupManager man = new JGroupsGroupManager(); 63 64 GroupListener listen = getNewGroupListener(); 65 66 man.addListener( listen ); 67 68 assertNotNull( man.groupListeneres ); 69 assertEquals( 1,man.groupListeneres.size()); 70 assertEquals( listen, man.groupListeneres.get(0) ); 71 } 72 73 public void testJoinGroupWith1Member() { 74 75 String groupName = "testGroup"; 76 77 Channel channel = getChannel(); 78 JGroupsGroupManager manager = getNewConnectedManager( channel, groupName); 79 80 List view = manager.getGroupView(); 81 82 assertNotNull( view ); 83 assertEquals(1, view.size() ); 84 85 channel.close(); 86 } 87 88 public void testJoinGroupWith2Members() { 89 90 String groupName = "testGroup"; 91 92 Channel channel1 = getChannel(); 93 JGroupsGroupManager coord = getNewConnectedManager( channel1, groupName); 94 95 View view1 = channel1.getView(); 96 97 assertNotNull( view1 ); 98 assertEquals(1, view1.size() ); 99 100 Channel channel2 = getChannel(); 101 JGroupsGroupManager other = getNewConnectedManager( channel2, groupName); 102 103 View view2 = channel2.getView(); 104 105 assertNotNull( view2 ); 106 assertEquals(2, view2.size() ); 107 108 channel1.close(); 109 channel2.close(); 110 } 111 112 /*** 113 * Tests connect-disconnect-connect sequence for a group with two members 114 **/ 115 public void testDisconnectConnectTwo() throws Exception { 116 View view; 117 Channel coordinator = getChannel(); 118 coordinator.connect("testgroup"); 119 view=coordinator.getView(); 120 System.out.println("-- view for coordinator: " + view); 121 122 Channel channel = getChannel(); 123 channel.connect("testgroup1"); 124 view=channel.getView(); 125 System.out.println("-- view for channel: " + view); 126 127 channel.disconnect(); 128 129 channel.connect("testgroup"); 130 view=channel.getView(); 131 System.out.println("-- view for channel: " + view); 132 133 assertEquals(2, view.size()); 134 assertTrue(view.containsMember(channel.getLocalAddress())); 135 assertTrue(view.containsMember(coordinator.getLocalAddress())); 136 coordinator.close(); 137 } 138 139 public void testLeaveGroup() { 140 141 Channel channel = getChannel(); 142 143 JGroupsGroupManager man = getNewConnectedManager(channel, "testGroup"); 144 145 assertTrue( channel.isConnected() ); 146 147 man.leaveGroup(); 148 149 assertFalse( channel.isConnected() ); 150 } 151 152 /* 153 * Test for void sendMessage(Address, Object) 154 */ 155 public void testSendMessageAddressObject() { 156 157 // sends one message from coordinator and other group member 158 // verify that is received 159 sendMessageObject( true, false ); 160 161 // sends one message from other group member and coordinator 162 // verify that is received 163 sendMessageObject( false, false ); 164 } 165 166 /* 167 * Test for void sendMessage(Object) 168 */ 169 public void testSendMessageObject() { 170 171 // sends one message from coordinator and other group member 172 // verify that is received 173 sendMessageObject( true ); 174 175 // sends one message from other group member and coordinator 176 // verify that is received 177 sendMessageObject( false ); 178 } 179 180 /* 181 * Sends a message to group. 182 * @see #sendMessageObject(boolean , boolean ) 183 */ 184 protected void sendMessageObject(boolean coordToOther) { 185 sendMessageObject(coordToOther, true); 186 } 187 188 /* 189 * Test for void sendMessage(Object) 190 * @param coordToOther if true the message is send from coordinator and 191 * other member group verify that is received. 192 * otherwise, other mamber group sends message and coordinator 193 * verify that is received. 194 * @param toGroup if true the message is sent to the group, else is 195 * send to the other member only ; 196 */ 197 protected void sendMessageObject(boolean coordToOther, boolean toGroup) { 198 199 receivedMessage = false; 200 201 JGroupsGroupManager coordinator = null; 202 JGroupsGroupManager other = null; 203 204 try{ 205 coordinator = getNewConnectedManager(getChannel(), "testGroup"); 206 other = getNewConnectedManager(getChannel(), "testGroup"); 207 208 JGroupsGroupManager sender = coordToOther ? coordinator : other; 209 JGroupsGroupManager receiver = coordToOther ? other : coordinator; 210 211 receiver.addListener(new GroupListener(){ 212 public void message(MessageEvent event){ 213 System.out.println("Received {" + event + "}"); 214 synchronized(JGroupsGroupManagerTest.this){ 215 JGroupsGroupManagerTest.this.receivedMessage = true; 216 JGroupsGroupManagerTest.this.notify(); 217 } 218 } 219 public void viewChanged(ViewEvent event){ 220 } 221 public void suspect(SuspectEvent event){ 222 } 223 }); 224 225 if( toGroup ) 226 sender.sendMessage( new Message()); 227 else 228 sender.sendMessage( receiver.getLocalAddress(), new Message() ); 229 230 synchronized(this){ 231 if( !receivedMessage ){ 232 try{ 233 wait(30*1000); 234 } 235 catch(InterruptedException e){ 236 throw new RuntimeException( e ); 237 } 238 } 239 } 240 } 241 finally{ 242 if(coordinator!=null){ 243 try{ 244 coordinator.getChannel().close(); 245 } 246 catch(Throwable t){ 247 } 248 } 249 if(coordinator!=null){ 250 try{ 251 other.getChannel().close(); 252 } 253 catch(Throwable t){ 254 } 255 } 256 } 257 } 258 259 /* 260 * Test for removing a listener 261 */ 262 public void testRemoveListener() { 263 264 JGroupsGroupManager man = new JGroupsGroupManager(); 265 266 GroupListener listen = getNewGroupListener(); 267 268 man.addListener( listen ); 269 270 man.removeListener( listen ); 271 272 assertEquals( 0,man.groupListeneres.size()); 273 } 274 275 /* 276 * test convertViewListFromJGroups 277 */ 278 public void testConvertViewListFromJGroups(){ 279 280 Channel managerChannel = null; 281 Channel otherChannel = null; 282 283 try{ 284 managerChannel = getChannel(); 285 GroupManager manager = getNewConnectedManager(managerChannel,"testGroup"); 286 287 otherChannel = getChannel(); 288 JGroupsGroupManager other = getNewConnectedManager(otherChannel, "testGroup"); 289 290 List myView = other.convertViewListFromJGroups( otherChannel.getView() ); 291 292 assertNotNull( myView ); 293 294 StringBuffer res = new StringBuffer(); 295 res.append("View: {"); 296 for (Iterator iter = myView.iterator(); iter.hasNext();) { 297 Address element = (Address) iter.next(); 298 res.append("["+element+"] "); 299 } 300 res.append("}."); 301 System.out.println( res ); 302 303 assertEquals(2, myView.size() ); 304 } 305 finally{ 306 if( managerChannel != null ){ 307 try{ 308 managerChannel.close(); 309 } 310 catch(Throwable t){ 311 } 312 } 313 if( otherChannel != null ){ 314 try{ 315 otherChannel.close(); 316 } 317 catch(Throwable t){ 318 } 319 } 320 } 321 } 322 323 /* 324 * Test notifyViewChanged. 325 */ 326 public void testNotifyViewChanged() { 327 328 numberReceivedViewChangedEvents = 0; 329 330 JGroupsGroupManager coordinator = null; 331 JGroupsGroupManager other = null; 332 333 try{ 334 coordinator = new JGroupsGroupManager(); 335 coordinator.addListener(new GroupListener(){ 336 public void message(MessageEvent event){ 337 } 338 public void viewChanged(ViewEvent event){ 339 System.out.println("Received {" + event + "}"); 340 synchronized(JGroupsGroupManagerTest.this){ 341 JGroupsGroupManagerTest.this.numberReceivedViewChangedEvents++; 342 JGroupsGroupManagerTest.this.notify(); 343 } 344 } 345 public void suspect(SuspectEvent event){ 346 } 347 }); 348 coordinator.setGroupName("testGroup"); 349 coordinator.setChannel(getChannel()); 350 coordinator.joinGroup(); 351 352 other = getNewConnectedManager(getChannel(), "testGroup"); 353 354 synchronized(this){ 355 while( numberReceivedViewChangedEvents < 2 ){ 356 try{ 357 wait(30*1000); 358 } 359 catch(InterruptedException e){ 360 throw new RuntimeException( e ); 361 } 362 } 363 } 364 } 365 finally{ 366 if(coordinator!=null){ 367 try{ 368 coordinator.getChannel().close(); 369 } 370 catch(Throwable t){ 371 } 372 } 373 if(coordinator!=null){ 374 try{ 375 other.getChannel().close(); 376 } 377 catch(Throwable t){ 378 } 379 } 380 } 381 } 382 383 public void testNotifySuspect() { 384 } 385 386 protected GroupListener getNewGroupListener(){ 387 return new GroupListener(){ 388 public void message(MessageEvent event){} 389 public void viewChanged(ViewEvent event){} 390 public void suspect(SuspectEvent event){} 391 }; 392 } 393 394 protected Channel getChannel(){ 395 396 JChannel channel = null; 397 try { 398 channel=new JChannel(props); 399 } 400 catch(Exception ex) { 401 // channel creation failed 402 throw new RuntimeException( ex ); 403 } 404 405 return channel; 406 } 407 408 protected JGroupsGroupManager getNewConnectedManager(Channel channel, String groupName ){ 409 410 JGroupsGroupManager manager = new JGroupsGroupManager(); 411 412 manager.setChannel( channel ); 413 manager.setGroupName( groupName ); 414 415 manager.joinGroup(); 416 417 return manager; 418 } 419 420 private void sendMessages(JGroupsGroupManager manager, int num) { 421 422 Message msg; 423 for(int i=0; i < num; i++) { 424 try { 425 msg=new Message(); 426 manager.sendMessage(msg); 427 System.out.print(i + " "); 428 } 429 catch(Throwable t) { 430 fail("could not send message #" + i); 431 } 432 } 433 } 434 435 436 }

This page was automatically generated by Maven