KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > systest > ws > rm > SequenceTest


1 package org.objectweb.celtix.systest.ws.rm;
2
3 import java.net.URL JavaDoc;
4 import java.util.List JavaDoc;
5
6 import javax.xml.namespace.QName JavaDoc;
7 import javax.xml.soap.SOAPMessage JavaDoc;
8 import javax.xml.ws.BindingProvider;
9 import javax.xml.ws.handler.Handler;
10 import javax.xml.ws.handler.LogicalMessageContext;
11
12 import junit.framework.Test;
13 import junit.framework.TestSuite;
14
15 import org.objectweb.celtix.Bus;
16 import org.objectweb.celtix.bindings.AbstractBindingImpl;
17 import org.objectweb.celtix.bus.busimpl.BusConfigurationBuilder;
18 import org.objectweb.celtix.bus.ws.rm.Names;
19 import org.objectweb.celtix.bus.ws.rm.RMHandler;
20 import org.objectweb.celtix.configuration.ConfigurationBuilder;
21 import org.objectweb.celtix.configuration.ConfigurationBuilderFactory;
22 import org.objectweb.celtix.greeter_control.Control;
23 import org.objectweb.celtix.greeter_control.ControlService;
24 import org.objectweb.celtix.greeter_control.Greeter;
25 import org.objectweb.celtix.greeter_control.GreeterService;
26 import org.objectweb.celtix.systest.common.ClientServerSetupBase;
27 import org.objectweb.celtix.systest.common.ClientServerTestBase;
28
29 /**
30  * Tests Reliable Messaging.
31  */

32 public class SequenceTest extends ClientServerTestBase {
33
34     private static final String JavaDoc APP_NAMESPACE = "http://celtix.objectweb.org/greeter_control";
35     private static final String JavaDoc GREETMEONEWAY_ACTION = APP_NAMESPACE + "/types/Greeter/greetMeOneWay";
36     private static final String JavaDoc GREETME_ACTION = APP_NAMESPACE + "/types/Greeter/greetMe";
37     private static final String JavaDoc GREETME_RESPONSE_ACTION = GREETME_ACTION + "Response";
38
39     private static final QName JavaDoc CONTROL_SERVICE_NAME = new QName JavaDoc(APP_NAMESPACE, "ControlService");
40     private static final QName JavaDoc SERVICE_NAME = new QName JavaDoc(APP_NAMESPACE, "GreeterService");
41     private static final QName JavaDoc CONTROL_PORT_NAME = new QName JavaDoc(APP_NAMESPACE, "ControlPort");
42     private static final QName JavaDoc PORT_NAME = new QName JavaDoc(APP_NAMESPACE, "GreeterPort");
43
44     private Bus bus;
45     private GreeterService greeterService;
46     private Greeter greeter;
47     private Control control;
48     private String JavaDoc currentConfiguration;
49     private MessageFlow mf;
50     
51     // enable currently disabled tests when transport apis allows to
52
// originate standalone requests from server side
53

54     private boolean doTestOnewayAnonymousAcks = true;
55     private boolean doTestOnewayDeferredAnonymousAcks = true;
56     private boolean doTestOnewayDeferredNonAnonymousAcks = true;
57     private boolean doTestOnewayAnonymousAcksSequenceLength1 = true;
58     private boolean doTestOnewayAnonymousAcksSupressed = true;
59     private boolean doTestTwowayNonAnonymous = true;
60     private boolean doTestTwowayNonAnonymousDeferred = true;
61     private boolean doTestTwowayNonAnonymousMaximumSequenceLength2;
62     private boolean doTestTwowayNonAnonymousNoOffer;
63     private boolean doTestTwowayMessageLoss = true;
64
65
66     public static void main(String JavaDoc[] args) {
67         junit.textui.TestRunner.run(SequenceTest.class);
68     }
69
70     public static Test suite() throws Exception JavaDoc {
71         TestSuite suite = new TestSuite(SequenceTest.class);
72         return new ClientServerSetupBase(suite) {
73             public void startServers() throws Exception JavaDoc {
74                 // special case handling for WS-Addressing system test to avoid
75
// UUID related issue when server is run as separate process
76
// via maven on Win2k
77
assertTrue("server did not launch correctly", launchServer(Server.class, "Windows 2000"
78                     .equals(System.getProperty("os.name"))));
79             }
80
81             public void setUp() throws Exception JavaDoc {
82                 // avoid re-using a previously created configuration for a bus
83
// with id "celtix"
84
ConfigurationBuilder builder = ConfigurationBuilderFactory.getBuilder();
85                 builder.buildConfiguration(BusConfigurationBuilder.BUS_CONFIGURATION_URI, "celtix");
86
87                 super.setUp();
88
89             }
90         };
91     }
92     
93     public void tearDown() {
94         if (null != greeter) {
95             boolean found = false;
96             BindingProvider provider = (BindingProvider)greeter;
97             AbstractBindingImpl abi = (AbstractBindingImpl)provider.getBinding();
98             List JavaDoc<Handler> handlerChain = abi.getPreLogicalSystemHandlers();
99             for (Handler h : handlerChain) {
100                 if (h instanceof RMHandler) {
101                     ((RMHandler)h).destroy();
102                     found = true;
103                     break;
104                 }
105             }
106             assertTrue("Cound not find RM handler in pre logical system handler chain", found);
107         }
108     }
109
110     // --- tests ---
111

112     public void testOnewayAnonymousAcks() throws Exception JavaDoc {
113         if (!doTestOnewayAnonymousAcks) {
114             return;
115         }
116         setupEndpoints("anonymous");
117
118         greeter.greetMeOneWay("once");
119         greeter.greetMeOneWay("twice");
120         greeter.greetMeOneWay("thrice");
121
122         // three application messages plus createSequence
123

124         mf.verifyMessages(4, true);
125         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
126                                                  GREETMEONEWAY_ACTION, GREETMEONEWAY_ACTION};
127         mf.verifyActions(expectedActions, true);
128         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", "3"}, true);
129
130         // createSequenceResponse plus 4 partial responses
131
mf.verifyMessages(5, false);
132         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null, null};
133         mf.verifyActions(expectedActions, false);
134         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, null, null}, false);
135         mf.verifyAcknowledgements(new boolean[] {false, false, true, true, true}, false);
136     }
137    
138     public void testOnewayDeferredAnonymousAcks() throws Exception JavaDoc {
139         if (!doTestOnewayDeferredAnonymousAcks) {
140             return;
141         }
142         setupEndpoints("anonymous-deferred");
143
144         greeter.greetMeOneWay("once");
145         greeter.greetMeOneWay("twice");
146
147         try {
148             Thread.sleep(3 * 1000);
149         } catch (InterruptedException JavaDoc ex) {
150             // ignore
151
}
152
153         greeter.greetMeOneWay("thrice");
154
155         // three application messages plus createSequence
156
mf.verifyMessages(4, true);
157         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
158                                                  GREETMEONEWAY_ACTION, GREETMEONEWAY_ACTION};
159         mf.verifyActions(expectedActions, true);
160         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", "3"}, true);
161
162         // createSequenceResponse message plus 4 partial responses, only the
163
// last one should include a sequence acknowledgment
164

165         mf.verifyMessages(5, false);
166         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null, null};
167         mf.verifyActions(expectedActions, false);
168         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, null, null}, false);
169         mf.verifyAcknowledgements(new boolean[] {false, false, false, false, true}, false);
170     }
171     
172     public void testOnewayDeferredNonAnonymousAcks() throws Exception JavaDoc {
173         if (!doTestOnewayDeferredNonAnonymousAcks) {
174             return;
175         }
176         setupEndpoints("nonanonymous-deferred");
177
178         greeter.greetMeOneWay("once");
179         greeter.greetMeOneWay("twice");
180
181         // CreateSequence plus two greetMeOneWay requests
182

183         mf.verifyMessages(3, true);
184         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
185                                                  GREETMEONEWAY_ACTION};
186         mf.verifyActions(expectedActions, true);
187         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2"}, true);
188
189         // CreateSequenceResponse plus three partial responses, no acknowledgments included
190

191         mf.verifyMessages(4, false);
192         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null};
193         mf.verifyActions(expectedActions, false);
194         mf.verifyMessageNumbers(new String JavaDoc[4], false);
195         mf.verifyAcknowledgements(new boolean[4], false);
196         
197         mf.getInboundContexts().clear();
198         mf.getOutboundMessages().clear();
199         
200         try {
201             Thread.sleep(3 * 1000);
202         } catch (InterruptedException JavaDoc ex) {
203             // ignore
204
}
205         
206         // a standalone acknowledgement should have been sent from the server side by now
207

208         mf.verifyMessages(0, true);
209         mf.verifyMessages(1, false);
210         
211     }
212     
213     public void testOnewayAnonymousAcksSequenceLength1() throws Exception JavaDoc {
214         if (!doTestOnewayAnonymousAcksSequenceLength1) {
215             return;
216         }
217         setupEndpoints("anonymous-seqlength1");
218
219         greeter.greetMeOneWay("once");
220         greeter.greetMeOneWay("twice");
221
222         // two application messages plus two createSequence plus two
223
// terminateSequence
224

225         mf.verifyMessages(6, true);
226         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
227                                                  Names.WSRM_TERMINATE_SEQUENCE_ACTION,
228                                                  Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
229                                                  Names.WSRM_TERMINATE_SEQUENCE_ACTION};
230         mf.verifyActions(expectedActions, true);
231         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", null, null, "1", null}, true);
232         mf.verifyLastMessage(new boolean[] {false, true, false, false, true, false}, true);
233
234         // createSequenceResponse message plus partial responses to
235
// greetMeOneWay and terminateSequence ||: 2
236

237         mf.verifyMessages(8, false, 100, 5);
238        
239         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null,
240                                         null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null};
241         mf.verifyActions(expectedActions, false);
242         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, null, null, null, null, null}, false);
243         mf.verifyLastMessage(new boolean[] {false, false, false, false, false, false, false, false}, false);
244         mf.verifyAcknowledgements(new boolean[] {false, false, true, false,
245                                                  false, false, true, false}, false);
246     }
247
248     public void testOnewayAnonymousAcksSupressed() throws Exception JavaDoc {
249         
250         if (!doTestOnewayAnonymousAcksSupressed) {
251             return;
252         }
253         setupEndpoints("anonymous-suppressed");
254
255         greeter.greetMeOneWay("once");
256         greeter.greetMeOneWay("twice");
257         greeter.greetMeOneWay("thrice");
258
259         // three application messages plus createSequence
260
mf.verifyMessages(4, true);
261         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETMEONEWAY_ACTION,
262                                                  GREETMEONEWAY_ACTION, GREETMEONEWAY_ACTION};
263         mf.verifyActions(expectedActions, true);
264         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", "3"}, true);
265
266         // createSequenceResponse plus 4 partial responses, none of which
267
// contain an acknowledgment
268

269         mf.verifyMessages(5, false);
270         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null, null, null};
271         mf.verifyActions(expectedActions, false);
272         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, null, null}, false);
273         mf.verifyAcknowledgements(new boolean[] {false, false, false, false, false}, false);
274         
275         mf.getOutboundMessages().clear();
276         mf.getInboundContexts().clear();
277
278         // allow resends to kick in
279
Thread.sleep(10 * 1000);
280
281         // between 1 and 3 resends
282
// note that for now neither AckRequested nor up-to-date
283
// SequenceAcknowledgment headers are added to resent messages
284
// also, as the server is configured to not piggyback
285
// SequenceAcknowledgments onto the partial response, the client
286
// will keep retransmitting its messages indefinitely
287

288         int nOutbound = mf.getOutboundMessages().size();
289         assertTrue("unexpected number of resends: " + nOutbound,
290                    nOutbound >= 1);
291         // mf.verifyAckRequestedOutbound();
292
}
293      
294     public void testTwowayNonAnonymous() throws Exception JavaDoc {
295         if (!doTestTwowayNonAnonymous) {
296             return;
297         }
298         setupEndpoints("twoway");
299
300         greeter.greetMe("one");
301         greeter.greetMe("two");
302         greeter.greetMe("three");
303
304         // CreateSequence and three greetMe messages
305
// TODO there should be partial responses to the decoupled responses!
306

307         mf.verifyMessages(4, true);
308         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETME_ACTION,
309                                                  GREETME_ACTION, GREETME_ACTION};
310         mf.verifyActions(expectedActions, true);
311         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", "3"}, true);
312         mf.verifyLastMessage(new boolean[] {false, false, false, false}, true);
313         mf.verifyAcknowledgements(new boolean[] {false, false, true, true}, true);
314         
315         // createSequenceResponse plus 3 greetMeResponse messages plus
316
// one partial response for each of the four messages
317

318         mf.verifyMessages(8, false);
319         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null,
320                                         GREETME_RESPONSE_ACTION, null, GREETME_RESPONSE_ACTION, null,
321                                         GREETME_RESPONSE_ACTION};
322         mf.verifyActions(expectedActions, false);
323         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, "1", null, "2", null, "3"}, false);
324         mf.verifyLastMessage(new boolean[8], false);
325         mf.verifyAcknowledgements(new boolean[] {false, false, false, true, false, true, false, true}, false);
326     }
327     
328     public void testTwowayNonAnonymousDeferred() throws Exception JavaDoc {
329         if (!doTestTwowayNonAnonymousDeferred) {
330             return;
331         }
332         setupEndpoints("nonanonymous-deferred");
333
334         greeter.greetMe("one");
335         greeter.greetMe("two");
336
337         // CreateSequence and three greetMe messages, no acknowledgments included
338

339         mf.verifyMessages(3, true);
340         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETME_ACTION,
341                                                  GREETME_ACTION};
342         mf.verifyActions(expectedActions, true);
343         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2"}, true);
344         mf.verifyLastMessage(new boolean[3], true);
345         mf.verifyAcknowledgements(new boolean[3], true);
346         
347         // CreateSequenceResponse plus 2 greetMeResponse messages plus
348
// one partial response for each of the four messages no acknowledgments included
349

350         mf.verifyMessages(6, false);
351         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null,
352                                         GREETME_RESPONSE_ACTION, null,
353                                         GREETME_RESPONSE_ACTION};
354         mf.verifyActions(expectedActions, false);
355         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, "1", null, "2"}, false);
356         mf.verifyLastMessage(new boolean[6], false);
357         mf.verifyAcknowledgements(new boolean[6], false);
358         
359         mf.getInboundContexts().clear();
360         mf.getOutboundMessages().clear();
361         
362         // a standalone acknowledgement should have been sent from the server side by now
363

364         mf.verifyMessages(1, true, 1000, 5);
365         mf.verifyMessageNumbers(new String JavaDoc[1], true);
366         mf.verifyLastMessage(new boolean[1], true);
367         mf.verifyAcknowledgements(new boolean[] {true} , true);
368         
369         // TODO: verify incoming requests also
370

371     }
372     
373     /**
374      * A maximum sequence length of 2 is configured for the client only.
375      * However, as we use the defaults regarding the including and acceptance for
376      * inbound sequence offers and correlate offered sequences that are included
377      * in a CreateSequence request and accepted with those that are created on behalf
378      * of such a request, the server also tries terminate its sequences.
379      * Note that as part of the sequence termination exchange a standalone sequence
380      * acknowledgment needs to be sent regardless of whether or nor acknowledgments are
381      * delivered steadily with every response.
382      */

383     
384     public void testTwowayNonAnonymousMaximumSequenceLength2() throws Exception JavaDoc {
385         
386         if (!doTestTwowayNonAnonymousMaximumSequenceLength2) {
387             return;
388         }
389         setupEndpoints("twoway-seqlength2");
390
391         greeter.greetMe("one");
392         greeter.greetMe("two");
393         greeter.greetMe("three");
394
395         mf.verifyMessages(7, true);
396         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION,
397                                                  GREETME_ACTION,
398                                                  GREETME_ACTION,
399                                                  Names.WSRM_TERMINATE_SEQUENCE_ACTION,
400                                                  Names.WSRM_SEQUENCE_ACKNOWLEDGMENT_ACTION,
401                                                  Names.WSRM_CREATE_SEQUENCE_ACTION,
402                                                  GREETME_ACTION};
403         mf.verifyActions(expectedActions, true);
404         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", null, null, null, "1"}, true);
405         mf.verifyLastMessage(new boolean[] {false, false, true, false, false, false, false}, true);
406         mf.verifyAcknowledgements(new boolean[] {false, false, true, false, true, false, false}, true);
407
408         // Note that we don't expect a partial response to standalone LastMessage or
409
// SequenceAcknowledgment messages
410

411         mf.verifyMessages(12, false, 100, 5);
412         
413         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION,
414                                         null, GREETME_RESPONSE_ACTION,
415                                         null, GREETME_RESPONSE_ACTION,
416                                         null, Names.WSRM_TERMINATE_SEQUENCE_ACTION,
417                                         null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION,
418                                         null, GREETME_RESPONSE_ACTION};
419         mf.verifyActions(expectedActions, false);
420         mf.verifyMessageNumbers(
421             new String JavaDoc[] {null, null, null, "1", null, "2", null, null, null, null, null, "1"}, false);
422         boolean[] expected = new boolean[12];
423         expected[5] = true;
424         mf.verifyLastMessage(expected, false);
425         expected[3] = true;
426         expected[11] = true;
427         mf.verifyAcknowledgements(expected, false);
428     }
429
430     public void testTwowayNonAnonymousNoOffer() throws Exception JavaDoc {
431         if (!doTestTwowayNonAnonymousNoOffer) {
432             return;
433         }
434         setupEndpoints("twoway-no-offer");
435
436         greeter.greetMe("one");
437         greeter.greetMe("two");
438
439         // Outbound expected:
440
// CreateSequence + (2 * greetMe) + CreateSequenceResponse = 4 messages
441
// TODO there should be partial responses to the decoupled responses!
442

443         mf.verifyMessages(4, true);
444         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETME_ACTION,
445                                                  Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, GREETME_ACTION};
446         mf.verifyActions(expectedActions, true);
447         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", null, "2"}, true);
448         mf.verifyLastMessage(new boolean[] {false, false, false, false}, true);
449         mf.verifyAcknowledgements(new boolean[] {false, false, false, true}, true);
450
451         // Inbound expected:
452
// createSequenceResponse + (2 * greetMeResponse) + CreateSequence +
453
// (4 * partial response [for each outbound message]) = 8
454

455         mf.verifyMessages(8, false, 1000, 3);
456         
457         mf.purgePartialResponses();
458         
459         expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION,
460                                         Names.WSRM_CREATE_SEQUENCE_ACTION,
461                                         GREETME_RESPONSE_ACTION,
462                                         GREETME_RESPONSE_ACTION};
463         mf.verifyActions(expectedActions, false);
464         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, "1", "2"}, false);
465         mf.verifyAcknowledgements(new boolean[] {false, false, true, true}, false);
466     }
467
468     public void testTwowayMessageLoss() throws Exception JavaDoc {
469         if (!doTestTwowayMessageLoss) {
470             return;
471         }
472         setupEndpoints("twoway-message-loss");
473
474         greeter.greetMe("one");
475         greeter.greetMe("two");
476         greeter.greetMe("three");
477         greeter.greetMe("four");
478
479         // CreateSequence and four greetMe messages
480

481         mf.verifyMessages(5, true);
482         String JavaDoc[] expectedActions = new String JavaDoc[] {Names.WSRM_CREATE_SEQUENCE_ACTION, GREETME_ACTION,
483                                                  GREETME_ACTION, GREETME_ACTION, GREETME_ACTION};
484         mf.verifyActions(expectedActions, true);
485         mf.verifyMessageNumbers(new String JavaDoc[] {null, "1", "2", "3", "4"}, true);
486         mf.verifyLastMessage(new boolean[] {false, false, false, false, false}, true);
487         mf.verifyAcknowledgements(new boolean[] {false, false, true, false, true}, true);
488         
489         // createSequenceResponse
490
// + 2 greetMeResponse actions (non-discarded messages)
491
// + 2 greetMe actions (discarded messages)
492
// + 3 partial responses (to CSR & each of the non-discarded messages)
493

494         mf.verifyMessages(8, false);
495         expectedActions = new String JavaDoc[] {null, Names.WSRM_CREATE_SEQUENCE_RESPONSE_ACTION, null,
496                                         GREETME_RESPONSE_ACTION, GREETME_ACTION, null,
497                                         GREETME_RESPONSE_ACTION, GREETME_ACTION};
498         mf.verifyActions(expectedActions, false);
499         mf.verifyMessageNumbers(new String JavaDoc[] {null, null, null, "1", null, null, "2", null}, false);
500         mf.verifyLastMessage(new boolean[8], false);
501         mf.verifyAcknowledgements(new boolean[] {false, false, false, true, false, false, true, false},
502                                   false);
503         
504         
505         mf.clear();
506         
507         // wait for resends to occur
508
// for some reason only the first retransmission for each message works fine
509
// the second time round a message with an empty body is re-transmitted
510
/*
511         mf.verifyMessages(4, true, 1000, 20);
512         expectedActions = new String[] {GREETME_ACTION, GREETME_ACTION,
513                                         GREETME_ACTION, GREETME_ACTION};
514         */

515         mf.verifyMessages(2, true, 1000, 10);
516         expectedActions = new String JavaDoc[] {GREETME_ACTION, GREETME_ACTION};
517         mf.verifyActions(expectedActions, true);
518
519     }
520
521     // --- test setup helpers ---
522

523
524     private void createControl() {
525         if (null == control) {
526             URL JavaDoc wsdl = getClass().getResource("/wsdl/greeter_control.wsdl");
527             ControlService controlService = new ControlService(wsdl, CONTROL_SERVICE_NAME);
528             control = controlService.getPort(CONTROL_PORT_NAME, Control.class);
529         }
530     }
531
532     private void setupEndpoints(String JavaDoc configuration) throws Exception JavaDoc {
533
534         if (configuration != null && configuration.equals(currentConfiguration)) {
535             return;
536         }
537         
538         if (configuration.indexOf("shutdown") > 0 && null != bus) {
539             bus.shutdown(true);
540             bus = null;
541         }
542         
543         if (null == bus) {
544             bus = Bus.init();
545         }
546       
547         createControl();
548
549         control.stopGreeter();
550         control.startGreeter(configuration);
551
552         if (null != configuration && configuration.length() > 0) {
553             ControlImpl.setConfigFileProperty(configuration);
554         }
555
556         TestConfigurator tc = new TestConfigurator();
557         tc.configureClient(SERVICE_NAME, PORT_NAME.getLocalPart());
558
559         URL JavaDoc wsdl = getClass().getResource("/wsdl/greeter_control.wsdl");
560         greeterService = new GreeterService(wsdl, SERVICE_NAME);
561         greeter = greeterService.getPort(PORT_NAME, Greeter.class);
562
563         BindingProvider provider = (BindingProvider)greeter;
564         AbstractBindingImpl abi = (AbstractBindingImpl)provider.getBinding();
565         List JavaDoc<Handler> handlerChain = abi.getHandlerChain();
566         assertTrue(handlerChain.size() > 0);
567         
568         List JavaDoc<SOAPMessage JavaDoc> outboundMessages = null;
569         List JavaDoc<LogicalMessageContext> inboundContexts = null;
570
571         boolean found = false;
572         for (Handler h : handlerChain) {
573             if (!found && h instanceof SOAPMessageRecorder) {
574                 SOAPMessageRecorder recorder = (SOAPMessageRecorder)h;
575                 outboundMessages = recorder.getOutboundMessages();
576                 outboundMessages.clear();
577                 found = true;
578                 break;
579             }
580         }
581         assertTrue("Could not find SOAPMessageRecorder in post protocol handler chain", found);
582         
583         handlerChain = abi.getPreLogicalSystemHandlers();
584         assertTrue(handlerChain.size() > 0);
585         found = false;
586         for (Handler h : handlerChain) {
587             if (!found && h instanceof LogicalMessageContextRecorder) {
588                 LogicalMessageContextRecorder recorder = (LogicalMessageContextRecorder)h;
589                 inboundContexts = recorder.getInboundContexts();
590                 inboundContexts.clear();
591                 found = true;
592                 break;
593             }
594         }
595         assertTrue("Could not find LogicalMessageContextRecorder in pre logical system handler chain", found);
596         currentConfiguration = configuration;
597         
598         mf = new MessageFlow(outboundMessages, inboundContexts);
599         
600     }
601
602 }
603
Popular Tags