001: package test.crispy;
002:
003: import java.lang.reflect.Method;
004: import java.util.HashMap;
005: import java.util.Map;
006: import java.util.Properties;
007:
008: import junit.framework.TestCase;
009: import net.sf.crispy.ExecutorDecorator;
010: import net.sf.crispy.InvocationStrategy;
011: import net.sf.crispy.Property;
012: import net.sf.crispy.impl.JaxRpcExecutor;
013: import net.sf.crispy.impl.RestExecutor;
014: import net.sf.crispy.impl.RmiExecutor;
015: import net.sf.crispy.impl.XmlRpcExecutor;
016: import net.sf.crispy.strategy.NameSpacePlusMethodInvocationStrategy;
017: import net.sf.crispy.strategy.UrlPlusClassNameInvocationStrategy;
018: import test.crispy.example.service.Calculator;
019: import test.crispy.example.service.CalculatorImpl;
020: import test.crispy.example.service.EchoImpl;
021:
022: public class ExecutorDecoratorTest extends TestCase {
023:
024: public void testGetDefaultInvocationStrategy() throws Exception {
025: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
026: new XmlRpcExecutor());
027: InvocationStrategy lvDefaultInvocationStrategy = lvExecutorDecorator
028: .getDefaultInvocationStrategy();
029: assertTrue(lvDefaultInvocationStrategy instanceof NameSpacePlusMethodInvocationStrategy);
030: }
031:
032: /** Test DefaultInvocationStrategy by XmlRpcExecutor. */
033: public void testInvocationStrategy() throws Exception {
034: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
035: new XmlRpcExecutor());
036: Method lvMethodAdd = Calculator.class.getMethod("add",
037: new Class[] { int.class, int.class });
038: String lvInvocationStrategyString = (String) lvExecutorDecorator
039: .createInvocationStrategy(Calculator.class, lvMethodAdd);
040:
041: Map lvMap = new HashMap();
042: lvMap.put(InvocationStrategy.CLASS_NAME, Calculator.class
043: .getName());
044: lvMap
045: .put(InvocationStrategy.METHOD_NAME, lvMethodAdd
046: .getName());
047: NameSpacePlusMethodInvocationStrategy lvNameSpacePlusMethodInvocationStrategy = new NameSpacePlusMethodInvocationStrategy();
048: String lvInvocationStrategyString_2 = (String) lvNameSpacePlusMethodInvocationStrategy
049: .convert(lvMap);
050:
051: assertEquals(lvInvocationStrategyString,
052: lvInvocationStrategyString_2);
053: }
054:
055: /** Test default invocation string by XmlRpcExecutor: class + '.' + method_name */
056: public void testInvocationStrategyString() throws Exception {
057: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
058: new XmlRpcExecutor());
059: Method lvMethod = Calculator.class.getMethod("add",
060: new Class[] { int.class, int.class });
061: String lvInvocationStrategyStr = lvExecutorDecorator
062: .createInvocationStrategy(Calculator.class, lvMethod)
063: .toString();
064: assertEquals(lvInvocationStrategyStr, Calculator.class
065: .getName()
066: + ".add");
067: }
068:
069: /** Test invocation string by XmlRpcExecutor with namespace: namespace + '.' + method_name */
070: public void testInvocationStrategyNameSpaceString()
071: throws Exception {
072: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
073: new XmlRpcExecutor());
074: Properties lvProperties = new Properties();
075: lvProperties.put(Property.INVOCATION_STRATEGY_NAMESPACE,
076: "mynamespace");
077: lvExecutorDecorator.setProperties(lvProperties);
078: Method lvMethod = Calculator.class.getMethod("add",
079: new Class[] { int.class, int.class });
080: String lvInvocationStrategyStr = lvExecutorDecorator
081: .createInvocationStrategy(Calculator.class, lvMethod)
082: .toString();
083: assertEquals(lvInvocationStrategyStr, "mynamespace.add");
084: }
085:
086: /** Test default InvocationStrategy overwrite with UrlPlusClassNameInvocationStrategy. */
087: public void testSetInvocationStrategyUrlPlusClassNameWithProperties()
088: throws Exception {
089: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
090: new XmlRpcExecutor());
091: Properties lvProperties = new Properties();
092: String lvUrl = "http://localhost:8080/axis/services";
093: lvProperties.put(Property.REMOTE_URL_AND_PORT, lvUrl);
094: lvProperties.put(Property.INVOCATION_STRATEGY,
095: UrlPlusClassNameInvocationStrategy.class.getName());
096: lvExecutorDecorator.setProperties(lvProperties);
097: Method lvMethod = Calculator.class.getMethod("add",
098: new Class[] { int.class, int.class });
099: String lvInvocationStrategyStr = lvExecutorDecorator
100: .createInvocationStrategy(Calculator.class, lvMethod)
101: .toString();
102: assertEquals(lvInvocationStrategyStr, lvUrl + "/Calculator");
103: }
104:
105: /** Test invocation string by JaxRpcExecutor with url: url + '/' + class_name */
106: public void testInvocationStrategyUrlPlusClassName()
107: throws Exception {
108: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
109: new JaxRpcExecutor());
110: Properties lvProperties = new Properties();
111: String lvUrl = "http://localhost:8080/axis/services";
112: lvProperties.put(Property.REMOTE_URL_AND_PORT, lvUrl);
113: lvExecutorDecorator.setProperties(lvProperties);
114: Method lvMethod = Calculator.class.getMethod("add",
115: new Class[] { int.class, int.class });
116: String lvInvocationStrategyStr = lvExecutorDecorator
117: .createInvocationStrategy(Calculator.class, lvMethod)
118: .toString();
119: assertEquals(lvInvocationStrategyStr, lvUrl + "/Calculator");
120: }
121:
122: /** Test invocation string by RestExecutor with url: url + '/' + class_name */
123: public void testInvocationStrategyRest() throws Exception {
124: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
125: new RestExecutor());
126: Properties lvProperties = new Properties();
127: String lvUrl = "http://localhost:8092/crispy/rest";
128: lvProperties.put(Property.REMOTE_URL_AND_PORT, lvUrl);
129: lvExecutorDecorator.setProperties(lvProperties);
130: Method lvMethod = Calculator.class.getMethod("add",
131: new Class[] { int.class, int.class });
132: String lvInvocationStrategyStr = lvExecutorDecorator
133: .createInvocationStrategy(Calculator.class, lvMethod)
134: .toString();
135: assertEquals(
136: lvInvocationStrategyStr,
137: lvUrl
138: + "?class=test.crispy.example.service.Calculator&method=add");
139:
140: lvProperties.put(Property.INVOCATION_STRATEGY_NAMESPACE,
141: "service");
142: lvExecutorDecorator.setProperties(lvProperties);
143: lvMethod = Calculator.class.getMethod("add", new Class[] {
144: int.class, int.class });
145: lvInvocationStrategyStr = lvExecutorDecorator
146: .createInvocationStrategy(Calculator.class, lvMethod)
147: .toString();
148: assertEquals(lvInvocationStrategyStr, lvUrl
149: + "?method=service.calculator.add");
150: }
151:
152: /** RmiExecutor has no InvocationStrategy, return value is null. */
153: public void testWithoutDefaultStrategy() throws Exception {
154: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
155: new RmiExecutor());
156: Method lvMethod = Calculator.class.getMethod("add",
157: new Class[] { int.class, int.class });
158: Object lvInvocationStrategy = lvExecutorDecorator
159: .createInvocationStrategy(Calculator.class, lvMethod);
160: assertNull(lvInvocationStrategy);
161: }
162:
163: /** Invoke a not valide remote method, how toString or getClass (java.lang.Object-method)*/
164: public void testExecuteNotRemoteMethod() throws Exception {
165: ExecutorDecorator lvExecutorDecorator = new ExecutorDecorator(
166: new XmlRpcExecutor());
167: Method lvMethod = CalculatorImpl.class.getMethod("toString",
168: null);
169: Object lvResult = lvExecutorDecorator.execute(Calculator.class,
170: new CalculatorImpl(), lvMethod, null);
171: assertEquals(lvResult.toString(),
172: "toString: test.crispy.example.service.Calculator");
173:
174: lvMethod = CalculatorImpl.class.getMethod("getClass", null);
175: lvResult = lvExecutorDecorator.execute(Calculator.class,
176: new CalculatorImpl(), lvMethod, null);
177: assertEquals(lvResult.toString(), Calculator.class.toString());
178: }
179:
180: public void testExecuteNotRemoteMethod2() throws Exception {
181: Object lvResult = ExecutorDecorator.notRemoteMethod(
182: EchoImpl.class.getMethod("wait",
183: new Class[] { long.class }), EchoImpl.class);
184: assertNull(lvResult);
185:
186: lvResult = ExecutorDecorator.notRemoteMethod(EchoImpl.class
187: .getMethod("notify", null), EchoImpl.class);
188: assertNull(lvResult);
189: }
190: }
|