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