View Javadoc

1   package test.crispy.impl.proxy;
2   
3   import java.lang.reflect.Method;
4   import java.util.Properties;
5   
6   import junit.framework.TestCase;
7   import net.sf.crispy.InterceptorHandler;
8   import net.sf.crispy.InvocationStrategy;
9   import net.sf.crispy.Property;
10  import net.sf.crispy.concurrent.AsynchronousCallback;
11  import net.sf.crispy.proxy.CommonsProxyFactory;
12  import net.sf.crispy.proxy.DynamicJdkProxy;
13  import net.sf.crispy.proxy.DynamicProxy;
14  import net.sf.crispy.proxy.DynamicProxyFactory;
15  import net.sf.crispy.proxy.Proxy;
16  import net.sf.crispy.strategy.NameSpacePlusMethodInvocationStrategy;
17  import net.sf.crispy.util.Invoker;
18  
19  import org.apache.commons.proxy.factory.cglib.CglibProxyFactory;
20  import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory;
21  
22  import test.crispy.concurrent.SystemOutAsynchronousCallback;
23  import test.crispy.example.service.Echo;
24  import test.crispy.example.service.EchoImpl;
25  
26  public class DynamicProxyTest extends TestCase {
27  		
28  	public void testCglibProxy() throws Exception {
29  		DynamicProxy lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(Property.VALUE_FOR_CGLIB_DYNAMIC_PROXY);
30  		assertTrue(lvDynamicProxy instanceof CommonsProxyFactory);
31  		assertEquals(((CommonsProxyFactory) lvDynamicProxy).getProxyFactory().getClass(), CglibProxyFactory.class);
32  		
33  		lvDynamicProxy = DynamicProxyFactory.createDynamicProxy("net.sf.crispy.impl.DynamicCglibProxy");
34  		assertEquals(((CommonsProxyFactory) lvDynamicProxy).getProxyFactory().getClass(), CglibProxyFactory.class);		
35  	}
36  
37  	public void testJdkProxy() throws Exception {
38  		DynamicProxy lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(Property.VALUE_FOR_JDK_DYNAMIC_PROXY);
39  		assertEquals(lvDynamicProxy.getClass(), DynamicJdkProxy.class);
40  		
41  		lvDynamicProxy = DynamicProxyFactory.createDynamicProxy("net.sf.crispy.impl.DynamicJdkProxy");
42  		assertEquals(lvDynamicProxy.getClass(), DynamicJdkProxy.class);
43  		
44  		lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(null);
45  		assertEquals(lvDynamicProxy.getClass(), DynamicJdkProxy.class);
46  		 
47  		lvDynamicProxy = DynamicProxyFactory.getDefaultDynamicProxy();
48  		assertEquals(lvDynamicProxy.getClass(), DynamicJdkProxy.class);		
49  	}
50  
51  	public void testJavassistProxy() throws Exception {
52  		DynamicProxy lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(Property.VALUE_FOR_JAVASSIST_DYNAMIC_PROXY);
53  		assertEquals(((CommonsProxyFactory) lvDynamicProxy).getProxyFactory().getClass(), JavassistProxyFactory.class);
54  				
55  		lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(JavassistProxyFactory.class.getName());
56  		assertEquals(((CommonsProxyFactory) lvDynamicProxy).getProxyFactory().getClass(), JavassistProxyFactory.class);		
57  	}
58  	
59  	public void testNewInstance() throws Exception {
60  		DynamicProxy lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(Property.VALUE_FOR_JDK_DYNAMIC_PROXY);
61  		Echo lvEcho = (Echo) lvDynamicProxy.newInstance(Echo.class);
62  		assertNotNull(lvEcho);
63  		assertEquals("toString: " + Echo.class.getName(), lvEcho.toString());
64  	}
65  	
66  	public void testProperties() throws Exception {
67  		DynamicProxy lvDynamicProxy = DynamicProxyFactory.createDynamicProxy(Property.VALUE_FOR_JDK_DYNAMIC_PROXY);
68  		assertNull(lvDynamicProxy.getUser());
69  		assertNull(lvDynamicProxy.getPasswd());
70  		
71  		lvDynamicProxy.getProperties().put(Property.SECURITY_USER, "user");
72  		lvDynamicProxy.getProperties().put(Property.SECURITY_PASSWD, "passwd");
73  		assertEquals(lvDynamicProxy.getUser(), "user");
74  		assertEquals(lvDynamicProxy.getPasswd(), "passwd");
75  
76  	}
77  	
78  	public void testCommonsProxyFactoryCreateDynamicProxy() throws Exception {
79  		DynamicProxy lvDynamicProxy = new CommonsProxyFactory().createDynamicProxy(null);
80  		assertTrue(lvDynamicProxy instanceof CommonsProxyFactory);
81  		CommonsProxyFactory lvCommonsProxyFactory = (CommonsProxyFactory) lvDynamicProxy;
82  		lvCommonsProxyFactory.setProxyClass(Echo.class);
83  		lvCommonsProxyFactory.setInterceptorHandler(new InterceptorHandler ());
84  		Method lvMethods[] = Invoker.findAllMethods(EchoImpl.class, "toString");
85  		try {
86  			Object lvResult = lvCommonsProxyFactory.invoke(null, lvMethods[0], new Object[0]);
87  			assertEquals("toString: test.crispy.example.service.Echo", lvResult);
88  		} catch (Throwable e) {
89  			e.printStackTrace();
90  		}
91  	}
92  	
93  	public void testCreateAsynchronousCallback() throws Exception {
94  		Properties lvProperties = null;
95  		AsynchronousCallback lvAsynchronousCallback = DynamicProxyFactory.createAsynchronousCallback(lvProperties);
96  		assertNull(lvAsynchronousCallback);
97  		
98  		lvProperties = new Properties();
99  		lvAsynchronousCallback = DynamicProxyFactory.createAsynchronousCallback(lvProperties);
100 		assertNull(lvAsynchronousCallback);
101 
102 		lvProperties.put(Property.ASYNCHRONOUS_CALLBACK_CLASS, SystemOutAsynchronousCallback.class.getName());
103 		lvAsynchronousCallback = DynamicProxyFactory.createAsynchronousCallback(lvProperties);
104 		assertNotNull(lvAsynchronousCallback);
105 		assertTrue(lvAsynchronousCallback instanceof SystemOutAsynchronousCallback);
106 	}
107 	
108 	public void testCreateAsynchronousCallbackWithNotValidClassString() throws Exception {
109 		String lvNotValidClassString = "NotValidAsynchronousCallbackString";
110 		Properties lvProperties = new Properties();
111 		lvProperties.put(Property.ASYNCHRONOUS_CALLBACK_CLASS, lvNotValidClassString);
112 		try {
113 			DynamicProxyFactory.createAsynchronousCallback(lvProperties);
114 			fail(lvNotValidClassString + " is not a valid AsynchronousCallback-Class");
115 		} catch (Exception e) {
116 			assertTrue(true);
117 		}
118 	}
119 	
120 	public void testCreateAsynchronousCallbackWithNotValidAsynchronousCallbackString() throws Exception {
121 		String lvNotValidAsynchronousCallbackString = EchoImpl.class.getName();
122 		Properties lvProperties = new Properties();
123 		lvProperties.put(Property.ASYNCHRONOUS_CALLBACK_CLASS, lvNotValidAsynchronousCallbackString);
124 		try {
125 			DynamicProxyFactory.createAsynchronousCallback(lvProperties);
126 			fail(lvNotValidAsynchronousCallbackString + " is not a valid AsynchronousCallback-Class");
127 		} catch (Exception e) {
128 			assertTrue(true);
129 		}
130 	}
131 
132 	public void testMaxSizeOfThreads() throws Exception {
133 		Properties lvProperties = null;
134 		int lvMaxSizeOfThreads = DynamicProxyFactory.getMaxSizeOfThreads(lvProperties);
135 		assertEquals(0, lvMaxSizeOfThreads);
136 		
137 		lvProperties = new Properties();
138 		lvMaxSizeOfThreads = DynamicProxyFactory.getMaxSizeOfThreads(lvProperties);
139 		assertEquals(0, lvMaxSizeOfThreads);
140 		
141 		lvProperties.put(Property.ASYNCHRONOUS_MAX_SIZE_OF_THREADS, "3");
142 		lvMaxSizeOfThreads = DynamicProxyFactory.getMaxSizeOfThreads(lvProperties);
143 		assertEquals(3, lvMaxSizeOfThreads);
144 		
145 		try {
146 			lvProperties.put(Property.ASYNCHRONOUS_MAX_SIZE_OF_THREADS, "abc");
147 			DynamicProxyFactory.getMaxSizeOfThreads(lvProperties);
148 			fail("The ASYNCHRONOUS_MAX_SIZE_OF_THREADS value must be a digit");
149 		} catch (Exception e) {
150 			assertTrue(true);
151 		}
152 	}
153 	
154 	public void testMaxThreads() throws Exception {
155 		DynamicProxy lvDynamicProxy = DynamicProxyFactory.getDefaultDynamicProxy();
156 		assertEquals(0, lvDynamicProxy.getMaxThreads());
157 		lvDynamicProxy.setAsynchronousCallback(null, null, 3);
158 		assertEquals(3, lvDynamicProxy.getMaxThreads());
159 	}
160 	
161 	public void testIsMethodInFilter() throws Exception {
162 		DynamicProxy lvDynamicProxy = DynamicProxyFactory.getDefaultDynamicProxy();
163 		boolean lvIsMethodInFilter = lvDynamicProxy.isMethodInFilter(null);
164 		assertFalse(lvIsMethodInFilter);
165 		
166 		lvDynamicProxy.setAsynchronousCallback(null, new String [] {"echo", "ping" }, 0);
167 		lvIsMethodInFilter = lvDynamicProxy.isMethodInFilter("echo");
168 		assertTrue(lvIsMethodInFilter);
169 		
170 		lvIsMethodInFilter = lvDynamicProxy.isMethodInFilter("echoFalse");
171 		assertFalse(lvIsMethodInFilter);
172 	}
173 	
174 	public void testProxyCreateInvocationStrategy () throws Exception {
175 		InvocationStrategy lvInvocationStrategy = new NameSpacePlusMethodInvocationStrategy();
176 		Properties lvProperties = new Properties();
177 		lvProperties.put(Property.REMOTE_URL_AND_PORT, "http://localhost:1234");
178 		Object o = Proxy.createInvocationStrategy(lvInvocationStrategy, lvProperties, null, Echo.class, Echo.class.getMethod("ping", new Class[0]));
179 		assertNotNull(o);
180 		assertEquals("test.crispy.example.service.Echo.ping", o);
181 	}
182 	
183 	public void testProxyCreateInvocationStrategyWithException() throws Exception {
184 		Properties lvProperties = new Properties();
185 		lvProperties.put(Property.REMOTE_URL_AND_PORT, "http://localhost:1234");
186 		lvProperties.put(Property.INVOCATION_STRATEGY, "java.util.Vector");
187 		try {
188 			Proxy.createInvocationStrategy(null, lvProperties, null, Echo.class, Echo.class.getMethod("ping", new Class[0]));			
189 			fail("Must thrown Exception, java.util.Vector is not a InvocationStrategy!");
190 		} catch (Exception e) {
191 			assertTrue(true);
192 		}
193 	}
194 }