1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.discovery.test;
18
19
20 import java.net.URL;
21 import java.util.Properties;
22
23 import junit.framework.Test;
24 import junit.framework.TestCase;
25 import junit.framework.TestSuite;
26
27 import org.apache.commons.discovery.Resource;
28 import org.apache.commons.discovery.ResourceClass;
29 import org.apache.commons.discovery.ResourceClassIterator;
30 import org.apache.commons.discovery.ResourceIterator;
31 import org.apache.commons.discovery.jdk.JDKHooks;
32 import org.apache.commons.discovery.resource.ClassLoaders;
33 import org.apache.commons.discovery.resource.DiscoverResources;
34 import org.apache.commons.discovery.resource.classes.DiscoverClasses;
35 import org.apache.commons.discovery.tools.DefaultClassHolder;
36 import org.apache.commons.discovery.tools.DiscoverClass;
37 import org.apache.commons.discovery.tools.DiscoverSingleton;
38 import org.apache.commons.discovery.tools.ManagedProperties;
39 import org.apache.commons.discovery.tools.PropertiesHolder;
40 import org.apache.commons.discovery.tools.SPInterface;
41
42
43 /***
44 * @author Richard A. Sitze
45 * @version $Revision: 480374 $
46 */
47 public class TestAll extends TestCase {
48 private static final int logLevel =
49 org.apache.commons.discovery.log.SimpleLog.LOG_LEVEL_INFO;
50
51
52
53 public TestAll(String testName) {
54 super(testName);
55 }
56
57 public static Test suite() {
58 return new TestSuite(TestAll.class);
59 }
60
61 public void testFindDefaultImpl_1() {
62 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
63
64 TestInterface1 ti = null;
65
66 try {
67 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
68 TestImpl1_1.class.getName());
69
70 assertTrue(ti.getClass().getName() + "!=" + TestImpl1_1.class.getName(),
71 ti.getClass().getName().equals(TestImpl1_1.class.getName()));
72 } finally {
73 DiscoverSingleton.release();
74 }
75 }
76
77 public void testFindDefaultImpl_2() {
78 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
79
80 TestInterface1 ti = null;
81
82 try {
83 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
84 TestImpl1_2.class.getName());
85
86 assertTrue(ti.getClass().getName() + "!=" + TestImpl1_2.class.getName(),
87 ti.getClass().getName().equals(TestImpl1_2.class.getName()));
88 } finally {
89 DiscoverSingleton.release();
90 }
91 }
92
93 public void testCache() {
94 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
95
96 TestInterface1 ti = null;
97
98 try {
99 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
100 TestImpl1_1.class.getName());
101
102 assertTrue("1. " + ti.getClass().getName() + "!=" + TestImpl1_1.class.getName(),
103 ti.getClass().getName().equals(TestImpl1_1.class.getName()));
104
105
106
107 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
108 TestImpl1_2.class.getName());
109
110
111 assertTrue("2. " + ti.getClass().getName() + "!=" + TestImpl1_1.class.getName(),
112 ti.getClass().getName().equals(TestImpl1_1.class.getName()));
113 } finally {
114 DiscoverSingleton.release();
115 }
116 }
117
118 public void testRelease() {
119 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
120
121 TestInterface1 ti = null;
122
123 try {
124 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
125 TestImpl1_1.class.getName());
126
127 assertTrue("1. " + ti.getClass().getName() + "!=" + TestImpl1_1.class.getName(),
128 ti.getClass().getName().equals(TestImpl1_1.class.getName()));
129
130 DiscoverSingleton.release();
131
132 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class,
133 TestImpl1_2.class.getName());
134
135
136 assertTrue("2. " + ti.getClass().getName() + "!=" + TestImpl1_2.class.getName(),
137 ti.getClass().getName().equals(TestImpl1_2.class.getName()));
138 } finally {
139 DiscoverSingleton.release();
140 }
141 }
142
143 public void testFindPropertyImpl_1() {
144 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
145
146 TestInterface1 ti = null;
147
148 try {
149 Properties props = new Properties();
150
151 props.setProperty(TestInterface1.class.getName(),
152 TestImpl1_2.class.getName());
153
154 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class, props);
155
156 assertTrue(ti.getClass().getName() + "!=" + TestImpl1_2.class.getName(),
157 ti.getClass().getName().equals(TestImpl1_2.class.getName()));
158 } finally {
159 DiscoverSingleton.release();
160 }
161 }
162
163 public void testMyFactoryManagedProperty() {
164 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
165
166 TestInterface1 ti = null;
167
168 try {
169 ManagedProperties.setProperty(TestInterface1.class.getName(),
170 TestImpl1_2.class.getName());
171
172 ti = (TestInterface1)DiscoverSingleton.find(TestInterface1.class);
173
174 assertTrue(ti.getClass().getName() + "!=" + TestImpl1_2.class.getName(),
175 ti.getClass().getName().equals(TestImpl1_2.class.getName()));
176 } finally {
177 DiscoverSingleton.release();
178
179 /***
180 * Cleanup, don't want to affect next test..
181 */
182 ManagedProperties.setProperty(TestInterface1.class.getName(), null);
183 }
184 }
185
186
187 public void testFindPropFileDefault() {
188 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
189
190 TestInterface1 ti = null;
191
192 try {
193 ti = (TestInterface1)DiscoverSingleton.find(null,
194 new SPInterface(TestInterface1.class),
195 new PropertiesHolder("TestInterface.properties"),
196 new DefaultClassHolder(TestImpl1_2.class.getName()));
197
198 assertTrue(ti.getClass().getName() + "!=" + TestImpl1_1.class.getName(),
199 ti.getClass().getName().equals(TestImpl1_1.class.getName()));
200 } finally {
201 DiscoverSingleton.release();
202 }
203 }
204
205 public void testFindServiceFileDefault() {
206 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
207
208 TestInterface2 ti = null;
209
210 try {
211 ti = (TestInterface2)DiscoverSingleton.find(null,
212 new SPInterface(TestInterface2.class),
213 null,
214 new DefaultClassHolder(TestImpl2_2.class.getName()));
215
216 assertTrue(ti.getClass().getName() + "!=" + TestImpl2_1.class.getName(),
217 ti.getClass().getName().equals(TestImpl2_1.class.getName()));
218 } finally {
219 DiscoverSingleton.release();
220 }
221 }
222
223 public void testLowLevelFind() {
224 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
225
226 ClassLoaders loaders = ClassLoaders.getAppLoaders(TestInterface2.class, getClass(), false);
227 String name = "org.apache.commons.discovery.test.TestImpl2_1";
228
229 DiscoverClasses discovery = new DiscoverClasses(loaders);
230 ResourceClassIterator iter = discovery.findResourceClasses(name);
231 while (iter.hasNext()) {
232 ResourceClass resource = iter.nextResourceClass();
233 try {
234 Class implClass = resource.loadClass();
235 if ( implClass != null ) {
236 assertEquals("org.apache.commons.discovery.test.TestImpl2_1", implClass.getName());
237 return;
238 }
239 }
240 catch (Exception e) {
241 fail("Could not load service: " + resource );
242 }
243 }
244 fail("failed to load class resource: " + name);
245 }
246
247 public void testFindResources() {
248 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
249
250 ClassLoaders loaders = new ClassLoaders();
251
252 /***
253 * To many class loaders when searching for multiple
254 * resources means that we can find the same (same URL)
255 * resource for each loader...
256 * let's keep this to a minimum.
257 */
258 ClassLoader cl = getClass().getClassLoader();
259 if (cl != null)
260 loaders.put(getClass().getClassLoader(), true);
261 else
262 loaders.put(JDKHooks.getJDKHooks().getSystemClassLoader(), true);
263
264
265 String name = "testResource";
266
267 String partialPaths[] = { "/test/", "/testAlt1/", "/testAlt2/" };
268 int expected = partialPaths.length;
269
270 DiscoverResources discovery = new DiscoverResources(loaders);
271 ResourceIterator iter = discovery.findResources(name);
272 int count = 0;
273
274 while (iter.hasNext()) {
275 Resource resource = iter.nextResource();
276 URL url = resource.getResource();
277 if ( url != null ) {
278 if (url.getFile().indexOf(partialPaths[count]) == -1) {
279 fail(url + " does not contain " + partialPaths[count]);
280 }
281 count++;
282 }
283 }
284
285 if (count != expected) {
286 fail("located " + count + " resources, failed to locate all " + expected + " resources: " + name);
287 }
288 }
289
290 public void testViaDiscoverClass() {
291 org.apache.commons.discovery.log.SimpleLog.setLevel(logLevel);
292
293 ClassLoaders loaders = ClassLoaders.getAppLoaders(TestInterface2.class, getClass(), false);
294
295 DiscoverClass discover = new DiscoverClass(loaders);
296 Class implClass = discover.find(TestInterface2.class);
297
298 assertTrue("Failed to find an implementation class", implClass != null);
299 assertEquals("org.apache.commons.discovery.test.TestImpl2_1", implClass.getName());
300
301 }
302
303 /***
304 * This allows the tests to run as a standalone application.
305 */
306 public static void main(String args[]) {
307 String[] testCaseName = { TestAll.class.getName() };
308 junit.textui.TestRunner.main(testCaseName);
309 }
310 }