KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > test > notification > EventChannelTest


1 package org.jacorb.test.notification;
2
3 import junit.framework.Assert;
4 import junit.framework.Test;
5
6 import org.jacorb.test.notification.common.NotifyServerTestCase;
7 import org.jacorb.test.notification.common.NotifyServerTestSetup;
8 import org.omg.CORBA.Any JavaDoc;
9 import org.omg.CORBA.IntHolder JavaDoc;
10 import org.omg.CORBA.TRANSIENT JavaDoc;
11 import org.omg.CosNotification.AnyOrder;
12 import org.omg.CosNotification.DiscardPolicy;
13 import org.omg.CosNotification.LifoOrder;
14 import org.omg.CosNotification.OrderPolicy;
15 import org.omg.CosNotification.Property;
16 import org.omg.CosNotifyChannelAdmin.AdminNotFound;
17 import org.omg.CosNotifyChannelAdmin.ClientType;
18 import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
19 import org.omg.CosNotifyChannelAdmin.EventChannel;
20 import org.omg.CosNotifyChannelAdmin.InterFilterGroupOperator;
21 import org.omg.CosNotifyChannelAdmin.ProxySupplier;
22 import org.omg.CosNotifyChannelAdmin.SupplierAdmin;
23
24 import EDU.oswego.cs.dl.util.concurrent.Latch;
25
26 /**
27  * @author Alphonse Bendt
28  */

29
30 public class EventChannelTest extends NotifyServerTestCase
31 {
32     private Any JavaDoc testPerson_;
33
34     private EventChannel channel_;
35
36     private SupplierAdmin supplierAdmin_;
37
38     private ConsumerAdmin consumerAdmin_;
39
40     /**
41      * setup EventChannelFactory, FilterFactory and Any with Testdata
42      */

43     public void setUpTest() throws Exception JavaDoc
44     {
45         testPerson_ = new NotificationTestUtils(getClientORB()).getTestPersonAny();
46
47         channel_ = getDefaultChannel();
48
49         supplierAdmin_ = channel_.default_supplier_admin();
50         consumerAdmin_ = channel_.default_consumer_admin();
51     }
52
53     public void testDefaultAdmins() throws Exception JavaDoc
54     {
55         assertEquals(channel_, supplierAdmin_.MyChannel());
56         assertEquals(channel_, consumerAdmin_.MyChannel());
57
58         assertEquals(supplierAdmin_, channel_.default_supplier_admin());
59         assertEquals(consumerAdmin_, channel_.default_consumer_admin());
60
61         assertEquals(consumerAdmin_, channel_.get_consumeradmin(consumerAdmin_.MyID()));
62         final int adminID = supplierAdmin_.MyID();
63
64         assertEquals(supplierAdmin_, channel_.get_supplieradmin(adminID));
65
66         assertTrue(containsValue(channel_.get_all_consumeradmins(), consumerAdmin_.MyID()));
67
68         assertTrue(containsValue(channel_.get_all_supplieradmins(), supplierAdmin_.MyID()));
69     }
70
71     public void testCreateConsumerAdmin() throws Exception JavaDoc
72     {
73         IntHolder JavaDoc id = new IntHolder JavaDoc();
74         ConsumerAdmin admin = channel_.new_for_consumers(InterFilterGroupOperator.AND_OP, id);
75
76         assertEquals(InterFilterGroupOperator.AND_OP, admin.MyOperator());
77
78         assertEquals(id.value, admin.MyID());
79
80         assertTrue(containsValue(channel_.get_all_consumeradmins(), admin.MyID()));
81
82         assertEquals(admin, channel_.get_consumeradmin(id.value));
83     }
84
85     public void testCreateSupplierAdmin() throws Exception JavaDoc
86     {
87         IntHolder JavaDoc id = new IntHolder JavaDoc();
88         SupplierAdmin admin = channel_.new_for_suppliers(InterFilterGroupOperator.AND_OP, id);
89
90         assertEquals(InterFilterGroupOperator.AND_OP, admin.MyOperator());
91
92         assertEquals(id.value, admin.MyID());
93
94         assertTrue(containsValue(channel_.get_all_supplieradmins(), admin.MyID()));
95
96         assertEquals(admin, channel_.get_supplieradmin(id.value));
97     }
98
99     public void testDestroyAdmin() throws Exception JavaDoc
100     {
101         IntHolder JavaDoc id = new IntHolder JavaDoc();
102         SupplierAdmin admin1 = channel_.new_for_suppliers(InterFilterGroupOperator.AND_OP, id);
103
104         IntHolder JavaDoc id2 = new IntHolder JavaDoc();
105         SupplierAdmin admin2 = channel_.new_for_suppliers(InterFilterGroupOperator.AND_OP, id2);
106
107         assertEquals(admin1, channel_.get_supplieradmin(id.value));
108
109         admin1.destroy();
110
111         try
112         {
113             channel_.get_supplieradmin(id.value);
114             fail();
115         } catch (AdminNotFound e)
116         {
117             // expected
118
}
119
120         assertEquals(admin2, channel_.get_supplieradmin(id2.value));
121     }
122
123     private boolean containsValue(final int[] array, final int value)
124     {
125         boolean seen = false;
126
127         for (int i = 0; i < array.length; i++)
128         {
129             if (array[i] == value)
130             {
131                 seen = true;
132             }
133         }
134         return seen;
135     }
136
137     public EventChannelTest(String JavaDoc name, NotifyServerTestSetup setup)
138     {
139         super(name, setup);
140     }
141
142     public void testSetQos() throws Exception JavaDoc
143     {
144         IntHolder JavaDoc ih = new IntHolder JavaDoc();
145
146         ProxySupplier ps = consumerAdmin_.obtain_notification_push_supplier(
147                 ClientType.STRUCTURED_EVENT, ih);
148
149         Property[] props = new Property[2];
150
151         Any JavaDoc discardPolicy = getClientORB().create_any();
152         Any JavaDoc orderPolicy = getClientORB().create_any();
153
154         discardPolicy.insert_short(LifoOrder.value);
155         orderPolicy.insert_short(AnyOrder.value);
156
157         props[0] = new Property(DiscardPolicy.value, discardPolicy);
158         props[1] = new Property(OrderPolicy.value, orderPolicy);
159
160         ps.set_qos(props);
161
162         Property[] new_props = ps.get_qos();
163
164         for (int x = 0; x < new_props.length; ++x)
165         {
166             if (new_props[x].name.equals(DiscardPolicy.value))
167             {
168                 assertEquals(discardPolicy, new_props[x].value);
169             }
170
171             if (new_props[x].name.equals(OrderPolicy.value))
172             {
173                 assertEquals(orderPolicy, new_props[x].value);
174             }
175         }
176     }
177
178     public void testGetConsumerAdmin() throws Exception JavaDoc
179     {
180         channel_.default_consumer_admin();
181         channel_.get_consumeradmin(0);
182
183         int[] _allKeys = channel_.get_all_consumeradmins();
184
185         assertContains(0, _allKeys);
186
187         IntHolder JavaDoc ih = new IntHolder JavaDoc();
188         channel_.new_for_consumers(InterFilterGroupOperator.AND_OP, ih);
189
190         _allKeys = channel_.get_all_consumeradmins();
191         assertContains(ih.value, _allKeys);
192
193         try
194         {
195             channel_.get_consumeradmin(Integer.MIN_VALUE);
196             fail();
197         } catch (AdminNotFound e)
198         {
199             // expected
200
}
201
202         ConsumerAdmin c3 = channel_.get_consumeradmin(ih.value);
203
204         assertEquals(ih.value, c3.MyID());
205     }
206
207     public void testGetSupplierAdmin() throws Exception JavaDoc
208     {
209         channel_.default_supplier_admin();
210         channel_.get_supplieradmin(0);
211
212         int[] _allKeys = channel_.get_all_supplieradmins();
213
214         assertContains(0, _allKeys);
215
216         IntHolder JavaDoc ih = new IntHolder JavaDoc();
217         channel_.new_for_suppliers(InterFilterGroupOperator.AND_OP, ih);
218
219         _allKeys = channel_.get_all_supplieradmins();
220         assertContains(ih.value, _allKeys);
221
222         try
223         {
224             channel_.get_supplieradmin(Integer.MIN_VALUE);
225             fail();
226         } catch (AdminNotFound e)
227         {
228             // expected
229
}
230
231         SupplierAdmin c3 = channel_.get_supplieradmin(ih.value);
232         assertEquals(ih.value, c3.MyID());
233     }
234
235     static void assertContains(int i, int[] is)
236     {
237         boolean seen = false;
238         for (int x = 0; x < is.length; ++x)
239         {
240             if (is[x] == i)
241             {
242                 seen = true;
243             }
244         }
245         Assert.assertTrue(seen);
246     }
247
248     public void testSendEventPushPull() throws Exception JavaDoc
249     {
250         AnyPullReceiver _receiver = new AnyPullReceiver(getClientORB());
251         _receiver.connect(channel_, false);
252         AnyPushSender _sender = new AnyPushSender(getClientORB(), testPerson_);
253         _sender.connect(channel_, false);
254
255         Thread JavaDoc _receiverThread = new Thread JavaDoc(_receiver);
256         _receiverThread.start();
257         _sender.run();
258
259         _receiverThread.join();
260         assertTrue(!_receiver.isError());
261
262         assertTrue(_receiver.isEventHandled());
263
264         _receiver.shutdown();
265         _sender.shutdown();
266     }
267
268     public void testSendEventPushPush() throws Exception JavaDoc
269     {
270         // start a receiver thread
271
AnyPushReceiver _receiver = new AnyPushReceiver(getClientORB());
272         _receiver.connect(channel_, false);
273
274         Thread JavaDoc _receiverThread = new Thread JavaDoc(_receiver);
275
276         // start a sender
277
AnyPushSender _sender = new AnyPushSender(getClientORB(), testPerson_);
278
279         _sender.connect(channel_, false);
280
281         _receiverThread.start();
282
283         _sender.run();
284
285         _receiverThread.join();
286
287         assertTrue(_receiver.isEventHandled());
288
289         _receiver.shutdown();
290         _sender.shutdown();
291     }
292
293     public void testSendEventPushPush_MisbehavingConsumer() throws Exception JavaDoc
294     {
295         final Latch disconnectedLatch = new Latch();
296         
297         // start a receiver thread
298
AnyPushReceiver _receiver = new AnyPushReceiver(getClientORB())
299         {
300             public void push(Any JavaDoc any)
301             {
302                 throw new TRANSIENT JavaDoc();
303             }
304             
305             public void disconnect_push_consumer()
306             {
307                 super.disconnect_push_consumer();
308                 
309                 disconnectedLatch.release();
310             }
311         };
312         _receiver.connect(channel_, false);
313
314         Thread JavaDoc _receiverThread = new Thread JavaDoc(_receiver);
315
316         // start a sender
317
AnyPushSender _sender = new AnyPushSender(getClientORB(), testPerson_);
318
319         _sender.connect(channel_, false);
320
321         _receiverThread.start();
322
323         _sender.run();
324
325         assertTrue(disconnectedLatch.attempt(20000));
326
327         assertTrue(!_receiver.isConnected());
328
329         _sender.shutdown();
330     }
331
332     public void testSendEventPullPush() throws Exception JavaDoc
333     {
334         AnyPullSender _sender = new AnyPullSender(getClientORB(), testPerson_);
335         _sender.connect(channel_, false);
336
337         AnyPushReceiver _receiver = new AnyPushReceiver(getClientORB());
338         _receiver.connect(channel_, false);
339
340         Thread JavaDoc _receiverThread = new Thread JavaDoc(_receiver);
341         _receiverThread.start();
342
343         _sender.run();
344
345         _receiverThread.join();
346
347         assertTrue(_sender.isEventHandled());
348         assertTrue(_receiver.isEventHandled());
349
350         _receiver.shutdown();
351         _sender.shutdown();
352
353     }
354
355     public void testSendEventPullPull() throws Exception JavaDoc
356     {
357         AnyPullSender _sender = new AnyPullSender(getClientORB(), testPerson_);
358         _sender.connect(channel_, false);
359
360         AnyPullReceiver _receiver = new AnyPullReceiver(getClientORB());
361         _receiver.connect(channel_, false);
362
363         Thread JavaDoc _receiverThread = new Thread JavaDoc(_receiver);
364         _receiverThread.start();
365
366         _sender.run();
367
368         _receiverThread.join();
369
370         assertTrue(_sender.isEventHandled());
371         assertTrue(_receiver.isEventHandled());
372
373         _receiver.shutdown();
374         _sender.shutdown();
375
376     }
377
378     /**
379      * Test if all EventChannel Clients are disconnected when the Channel is Destroyed
380      */

381     public void testDestroyChannelDisconnectsClients() throws Exception JavaDoc
382     {
383         IntHolder JavaDoc _id = new IntHolder JavaDoc();
384
385         EventChannel _channel = getEventChannelFactory().create_channel(new Property[0], new Property[0], _id);
386
387         AnyPullReceiver _anyPullReceiver = new AnyPullReceiver(getClientORB());
388         _anyPullReceiver.connect(_channel, false);
389
390         AnyPushReceiver _anyPushReceiver = new AnyPushReceiver(getClientORB());
391         _anyPushReceiver.connect(_channel, false);
392
393         AnyPullSender _anyPullSender = new AnyPullSender(getClientORB(), testPerson_);
394         _anyPullSender.connect(_channel, false);
395
396         AnyPushSender _anyPushSender = new AnyPushSender(getClientORB(), testPerson_);
397         _anyPushSender.connect(_channel, false);
398
399         assertTrue(_anyPullReceiver.isConnected());
400         assertTrue(_anyPushReceiver.isConnected());
401         assertTrue(_anyPullSender.isConnected());
402         assertTrue(_anyPushSender.isConnected());
403
404         _channel.destroy();
405
406         assertTrue(!_anyPullReceiver.isConnected());
407         assertTrue(!_anyPushReceiver.isConnected());
408         assertTrue(!_anyPullSender.isConnected());
409         assertTrue(!_anyPushSender.isConnected());
410     }
411
412     /**
413      * Test if all EventChannel Clients are disconnected when the Channel is Destroyed
414      */

415     public void testDestroyAdminDisconnectsClients() throws Exception JavaDoc
416     {
417         IntHolder JavaDoc _id = new IntHolder JavaDoc();
418
419         EventChannel _channel = getEventChannelFactory().create_channel(new Property[0], new Property[0], _id);
420
421         AnyPullReceiver _anyPullReceiver = new AnyPullReceiver(getClientORB());
422         _anyPullReceiver.connect(_channel, false);
423
424         AnyPushReceiver _anyPushReceiver = new AnyPushReceiver(getClientORB());
425         _anyPushReceiver.connect(_channel, false);
426
427         AnyPullSender _anyPullSender = new AnyPullSender(getClientORB(), testPerson_);
428         _anyPullSender.connect(_channel, false);
429
430         AnyPushSender _anyPushSender = new AnyPushSender(getClientORB(), testPerson_);
431         _anyPushSender.connect(_channel, false);
432
433         assertTrue(_anyPullReceiver.isConnected());
434         assertTrue(_anyPushReceiver.isConnected());
435         assertTrue(_anyPullSender.isConnected());
436         assertTrue(_anyPushSender.isConnected());
437
438         _anyPullReceiver.myAdmin_.destroy();
439         _anyPushReceiver.myAdmin_.destroy();
440         _anyPullSender.myAdmin_.destroy();
441         _anyPushSender.myAdmin_.destroy();
442
443         assertTrue(!_anyPullReceiver.isConnected());
444         assertTrue(!_anyPushReceiver.isConnected());
445         assertTrue(!_anyPullSender.isConnected());
446         assertTrue(!_anyPushSender.isConnected());
447
448         _channel.destroy();
449     }
450
451     public void testCreateChannel() throws Exception JavaDoc
452     {
453         IntHolder JavaDoc _id = new IntHolder JavaDoc();
454
455         EventChannel _channel = getEventChannelFactory().create_channel(new Property[0], new Property[0], _id);
456
457         // test if channel id appears within channel list
458
int[] _allFactories = getEventChannelFactory().get_all_channels();
459         boolean _seen = false;
460         for (int x = 0; x < _allFactories.length; ++x)
461         {
462             if (_allFactories[x] == _id.value)
463             {
464                 _seen = true;
465             }
466         }
467         assertTrue(_seen);
468
469         EventChannel _sameChannel = getEventChannelFactory().get_event_channel(_id.value);
470         assertTrue(_channel._is_equivalent(_sameChannel));
471
472         _channel.destroy();
473     }
474
475     public static Test suite() throws Exception JavaDoc
476     {
477         return NotifyServerTestCase.suite("Basic CosNotification EventChannel Tests",
478                 EventChannelTest.class);
479     }
480 }
Popular Tags