001: package org.objectweb.celtix.handlers;
002:
003: import java.util.Arrays;
004: import java.util.Iterator;
005: import java.util.List;
006: import java.util.Map;
007:
008: import javax.xml.ws.WebServiceException;
009: import javax.xml.ws.handler.Handler;
010: import javax.xml.ws.handler.LogicalHandler;
011: import javax.xml.ws.handler.MessageContext;
012:
013: import junit.framework.TestCase;
014:
015: import org.easymock.EasyMock;
016: import org.objectweb.celtix.bus.jaxws.configuration.types.HandlerChainType;
017: import org.objectweb.celtix.bus.jaxws.configuration.types.HandlerInitParamType;
018: import org.objectweb.celtix.bus.jaxws.configuration.types.HandlerType;
019: import org.objectweb.celtix.bus.jaxws.configuration.types.ObjectFactory;
020:
021: public class HandlerChainBuilderTest extends TestCase {
022:
023: Handler[] allHandlers = {
024: EasyMock.createMock(LogicalHandler.class),
025: EasyMock.createMock(Handler.class),
026: EasyMock.createMock(Handler.class),
027: EasyMock.createMock(LogicalHandler.class) };
028: Handler[] logicalHandlers = { allHandlers[0], allHandlers[3] };
029: Handler[] protocolHandlers = { allHandlers[1], allHandlers[2] };
030:
031: HandlerChainBuilder builder = new HandlerChainBuilder();
032:
033: public void testChainSorting() {
034:
035: List<Handler> sortedHandlerChain = builder.sortHandlers(Arrays
036: .asList(allHandlers));
037: assertSame(logicalHandlers[0], sortedHandlerChain.get(0));
038: assertSame(logicalHandlers[1], sortedHandlerChain.get(1));
039: assertSame(protocolHandlers[0], sortedHandlerChain.get(2));
040: assertSame(protocolHandlers[1], sortedHandlerChain.get(3));
041: }
042:
043: public void testBuildHandlerChainFromConfiguration() {
044:
045: HandlerChainType hc = createHandlerChainType();
046: List<Handler> chain = builder
047: .buildHandlerChainFromConfiguration(hc);
048:
049: assertNotNull(chain);
050: assertEquals(4, chain.size());
051: assertEquals(TestLogicalHandler.class, chain.get(0).getClass());
052: assertEquals(TestLogicalHandler.class, chain.get(1).getClass());
053: assertEquals(TestProtocolHandler.class, chain.get(2).getClass());
054: assertEquals(TestProtocolHandler.class, chain.get(3).getClass());
055:
056: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
057: assertTrue(!tlh.initCalled);
058: assertNull(tlh.config);
059: }
060:
061: public void testBuilderCallsInit() {
062:
063: HandlerChainType hc = createHandlerChainType();
064: hc.getHandler().remove(3);
065: hc.getHandler().remove(2);
066: hc.getHandler().remove(1);
067: HandlerType h = hc.getHandler().get(0);
068: List<HandlerInitParamType> params = h.getInitParam();
069: HandlerInitParamType p = new ObjectFactory()
070: .createHandlerInitParamType();
071: p.setParamName("foo");
072: p.setParamValue("1");
073: params.add(p);
074: p = new ObjectFactory().createHandlerInitParamType();
075: p.setParamName("bar");
076: p.setParamValue("2");
077: params.add(p);
078:
079: List<Handler> chain = builder
080: .buildHandlerChainFromConfiguration(hc);
081: assertEquals(1, chain.size());
082: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
083:
084: assertTrue(tlh.initCalled);
085: Map cfg = tlh.config;
086: assertNotNull(tlh.config);
087:
088: assertEquals(2, cfg.keySet().size());
089: Iterator iter = cfg.keySet().iterator();
090: assertEquals("foo", iter.next());
091: assertEquals("1", cfg.get("foo"));
092: assertEquals("bar", iter.next());
093: assertEquals("2", cfg.get("bar"));
094: }
095:
096: public void testBuilderCallsInitWithNoInitParamValues() {
097:
098: HandlerChainType hc = createHandlerChainType();
099: hc.getHandler().remove(3);
100: hc.getHandler().remove(2);
101: hc.getHandler().remove(1);
102: HandlerType h = hc.getHandler().get(0);
103: List<HandlerInitParamType> params = h.getInitParam();
104: HandlerInitParamType p = new ObjectFactory()
105: .createHandlerInitParamType();
106: p.setParamName("foo");
107: params.add(p);
108: p = new ObjectFactory().createHandlerInitParamType();
109: p.setParamName("bar");
110: params.add(p);
111:
112: List<Handler> chain = builder
113: .buildHandlerChainFromConfiguration(hc);
114: assertEquals(1, chain.size());
115: TestLogicalHandler tlh = (TestLogicalHandler) chain.get(0);
116:
117: assertTrue(tlh.initCalled);
118: Map cfg = tlh.config;
119: assertNotNull(tlh.config);
120: assertEquals(2, cfg.keySet().size());
121: }
122:
123: public void testBuilderCannotLoadHandlerClass() {
124: HandlerChainType hc = createHandlerChainType();
125: hc.getHandler().remove(3);
126: hc.getHandler().remove(2);
127: hc.getHandler().remove(1);
128: hc.getHandler().get(0).setHandlerClass("no.such.class");
129:
130: try {
131: builder.buildHandlerChainFromConfiguration(hc);
132: fail("did not get expected exception");
133: } catch (WebServiceException ex) {
134: // ex.printStackTrace();
135: assertNotNull(ex.getCause());
136: assertEquals(ClassNotFoundException.class, ex.getCause()
137: .getClass());
138: // happy
139: }
140: }
141:
142: private HandlerChainType createHandlerChainType() {
143: HandlerChainType hc = new ObjectFactory()
144: .createHandlerChainType();
145: List<HandlerType> handlers = hc.getHandler();
146: HandlerType h = new ObjectFactory().createHandlerType();
147: h.setHandlerName("lh1");
148: h.setHandlerClass(TestLogicalHandler.class.getName());
149: handlers.add(h);
150: h = new ObjectFactory().createHandlerType();
151: h.setHandlerName("ph1");
152: h.setHandlerClass(TestProtocolHandler.class.getName());
153: handlers.add(h);
154: h = new ObjectFactory().createHandlerType();
155: h.setHandlerName("ph2");
156: h.setHandlerClass(TestProtocolHandler.class.getName());
157: handlers.add(h);
158: h = new ObjectFactory().createHandlerType();
159: h.setHandlerName("lh2");
160: h.setHandlerClass(TestLogicalHandler.class.getName());
161: handlers.add(h);
162: return hc;
163: }
164:
165: public static class TestLogicalHandler implements LogicalHandler {
166:
167: Map config;
168: boolean initCalled;
169:
170: public void close(MessageContext arg0) {
171: }
172:
173: public boolean handleFault(MessageContext arg0) {
174: return false;
175: }
176:
177: public boolean handleMessage(MessageContext arg0) {
178: return false;
179: }
180:
181: public final void init(final Map map) {
182: config = map;
183: initCalled = true;
184: }
185: }
186:
187: public static class TestProtocolHandler implements Handler {
188:
189: public void close(MessageContext arg0) {
190: }
191:
192: public boolean handleFault(MessageContext arg0) {
193: return false;
194: }
195:
196: public boolean handleMessage(MessageContext arg0) {
197: return false;
198: }
199: }
200:
201: }
|