KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > hivemind > test > services > TestBuilderFactory


1 // Copyright 2004, 2005 The Apache Software Foundation
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15 package hivemind.test.services;
16
17 import hivemind.test.services.impl.StringHolderImpl;
18
19 import org.apache.commons.logging.Log;
20 import org.apache.hivemind.ApplicationRuntimeException;
21 import org.apache.hivemind.ClassResolver;
22 import org.apache.hivemind.ErrorHandler;
23 import org.apache.hivemind.ErrorLog;
24 import org.apache.hivemind.Messages;
25 import org.apache.hivemind.Registry;
26 import org.apache.hivemind.ServiceImplementationFactoryParameters;
27 import org.apache.hivemind.internal.Module;
28 import org.apache.hivemind.service.impl.BuilderClassResolverFacet;
29 import org.apache.hivemind.service.impl.BuilderErrorHandlerFacet;
30 import org.apache.hivemind.service.impl.BuilderErrorLogFacet;
31 import org.apache.hivemind.service.impl.BuilderFacet;
32 import org.apache.hivemind.service.impl.BuilderFactoryLogic;
33 import org.apache.hivemind.service.impl.BuilderLogFacet;
34 import org.apache.hivemind.service.impl.BuilderMessagesFacet;
35 import org.apache.hivemind.service.impl.BuilderParameter;
36 import org.apache.hivemind.service.impl.BuilderServiceIdFacet;
37 import org.apache.hivemind.test.HiveMindTestCase;
38 import org.easymock.MockControl;
39
40 /**
41  * Tests for the standard {@link org.apache.hivemind.service.impl.BuilderFactory} service and
42  * various implementations of {@link org.apache.hivemind.service.impl.BuilderFacet}.
43  *
44  * @author Howard Lewis Ship
45  */

46 public class TestBuilderFactory extends HiveMindTestCase
47 {
48     private Object execute(ServiceImplementationFactoryParameters fp, BuilderParameter p)
49     {
50         return new BuilderFactoryLogic(fp, p).createService();
51     }
52
53     public void testSmartFacet() throws Exception
54     {
55         Registry r = buildFrameworkRegistry("SmartFacet.xml");
56
57         SimpleService s = (SimpleService) r.getService(
58                 "hivemind.test.services.Simple",
59                 SimpleService.class);
60
61         assertEquals(99, s.add(1, 1));
62     }
63
64     public void testInitializeMethodFailure() throws Exception
65     {
66         Registry r = buildFrameworkRegistry("InitializeMethodFailure.xml");
67
68         Runnable s = (Runnable) r.getService("hivemind.test.services.Runnable", Runnable.class);
69
70         interceptLogging("hivemind.test.services.Runnable");
71
72         s.run();
73
74         assertLoggedMessagePattern("Error at .*?: Unable to initialize service hivemind\\.test\\.services\\.Runnable "
75                 + "\\(by invoking method doesNotExist on "
76                 + "hivemind\\.test\\.services\\.impl\\.MockRunnable\\):");
77     }
78
79     public void testBuilderErrorHandlerFacet()
80     {
81         MockControl c = newControl(Module.class);
82         Module m = (Module) c.getMock();
83
84         ErrorHandler eh = (ErrorHandler) newMock(ErrorHandler.class);
85
86         MockControl pc = newControl(ServiceImplementationFactoryParameters.class);
87         ServiceImplementationFactoryParameters p = (ServiceImplementationFactoryParameters) pc
88                 .getMock();
89
90         p.getInvokingModule();
91         pc.setReturnValue(m);
92
93         m.getErrorHandler();
94         c.setReturnValue(eh);
95
96         replayControls();
97
98         BuilderFacet f = new BuilderErrorHandlerFacet();
99
100         Object actual = f.getFacetValue(p, null);
101
102         assertSame(eh, actual);
103
104         verifyControls();
105     }
106
107     public void testSetErrorHandler() throws Exception
108     {
109         Registry r = buildFrameworkRegistry("SetErrorHandler.xml");
110
111         ErrorHandlerHolder h = (ErrorHandlerHolder) r.getService(
112                 "hivemind.test.services.SetErrorHandler",
113                 ErrorHandlerHolder.class);
114
115         assertNotNull(h.getErrorHandler());
116     }
117
118     public void testConstructErrorHandler() throws Exception
119     {
120         Registry r = buildFrameworkRegistry("ConstructErrorHandler.xml");
121
122         ErrorHandlerHolder h = (ErrorHandlerHolder) r.getService(
123                 "hivemind.test.services.ConstructErrorHandler",
124                 ErrorHandlerHolder.class);
125
126         assertNotNull(h.getErrorHandler());
127     }
128
129     public void testBuilderClassResolverFacet()
130     {
131         ClassResolver cr = (ClassResolver) newMock(ClassResolver.class);
132
133         MockControl pc = newControl(ServiceImplementationFactoryParameters.class);
134         ServiceImplementationFactoryParameters p = (ServiceImplementationFactoryParameters) pc
135                 .getMock();
136
137         MockControl control = newControl(Module.class);
138         Module module = (Module) control.getMock();
139
140         p.getInvokingModule();
141         pc.setReturnValue(module);
142
143         module.getClassResolver();
144         control.setReturnValue(cr);
145
146         replayControls();
147
148         BuilderClassResolverFacet fc = new BuilderClassResolverFacet();
149
150         Object result = fc.getFacetValue(p, null);
151
152         assertSame(cr, result);
153
154         verifyControls();
155     }
156
157     public void testSetClassResolver() throws Exception
158     {
159         Registry r = buildFrameworkRegistry("SetClassResolver.xml");
160
161         ClassResolverHolder h = (ClassResolverHolder) r.getService(
162                 "hivemind.test.services.SetClassResolver",
163                 ClassResolverHolder.class);
164
165         assertNotNull(h.getClassResolver());
166     }
167
168     public void testConstructClassResolver() throws Exception
169     {
170         Registry r = buildFrameworkRegistry("ConstructClassResolver.xml");
171
172         ClassResolverHolder h = (ClassResolverHolder) r.getService(
173                 "hivemind.test.services.ConstructClassResolver",
174                 ClassResolverHolder.class);
175
176         assertNotNull(h.getClassResolver());
177     }
178
179     public void testAutowire()
180     {
181         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
182         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
183                 .getMock();
184
185         MockControl c = newControl(Module.class);
186         Module module = (Module) c.getMock();
187
188         ErrorHandler eh = (ErrorHandler) newMock(ErrorHandler.class);
189
190         MockControl logc = newControl(Log.class);
191         Log log = (Log) logc.getMock();
192
193         MockControl messagesControl = newControl(Messages.class);
194         Messages messages = (Messages) messagesControl.getMock();
195
196         ErrorLog errorLog = (ErrorLog) newMock(ErrorLog.class);
197
198         // Normally I try and get all the invocations into chronological
199
// order ... but with this refactoring, that's painful; these
200
// are in an order that appeases junit.
201

202         fp.getLog();
203         fpc.setReturnValue(log);
204
205         fp.getServiceId();
206         fpc.setReturnValue("foo.bar.Baz");
207
208         fp.getInvokingModule();
209         fpc.setReturnValue(module);
210
211         module.resolveType("hivemind.test.services.AutowireTarget");
212         c.setReturnValue(AutowireTarget.class);
213
214         fp.getLog();
215         fpc.setReturnValue(log);
216
217         debug(fpc, fp, logc, log, "Autowired property log to " + log);
218
219         fp.getInvokingModule();
220         fpc.setReturnValue(module);
221
222         module.getClassResolver();
223         c.setReturnValue(getClassResolver());
224
225         debug(fpc, fp, logc, log, "Autowired property classResolver to " + getClassResolver());
226
227         fp.getInvokingModule();
228         fpc.setReturnValue(module);
229
230         module.getMessages();
231         c.setReturnValue(messages);
232
233         debug(fpc, fp, logc, log, "Autowired property messages to " + messages);
234
235         fp.getInvokingModule();
236         fpc.setReturnValue(module);
237
238         module.getErrorHandler();
239         c.setReturnValue(eh);
240
241         debug(fpc, fp, logc, log, "Autowired property errorHandler to " + eh);
242
243         fp.getServiceId();
244         fpc.setReturnValue("foo.bar.Baz");
245
246         debug(fpc, fp, logc, log, "Autowired property serviceId to foo.bar.Baz");
247
248         fp.getErrorLog();
249         fpc.setReturnValue(errorLog);
250
251         debug(fpc, fp, logc, log, "Autowired property errorLog to " + errorLog);
252
253         replayControls();
254
255         BuilderParameter p = new BuilderParameter();
256
257         p.setClassName(AutowireTarget.class.getName());
258         p.addProperty(new BuilderLogFacet());
259         p.addProperty(new BuilderClassResolverFacet());
260         p.addProperty(new BuilderMessagesFacet());
261         p.addProperty(new BuilderErrorHandlerFacet());
262         p.addProperty(new BuilderServiceIdFacet());
263         p.addProperty(new BuilderErrorLogFacet());
264
265         AutowireTarget t = (AutowireTarget) execute(fp, p);
266
267         assertSame(eh, t.getErrorHandler());
268         assertSame(getClassResolver(), t.getClassResolver());
269         assertSame(messages, t.getMessages());
270         assertSame(log, t.getLog());
271         assertEquals("foo.bar.Baz", t.getServiceId());
272         assertSame(errorLog, t.getErrorLog());
273
274         verifyControls();
275     }
276
277     private void debug(MockControl fpc, ServiceImplementationFactoryParameters fp,
278             MockControl logc, Log log, String string)
279     {
280         fp.getLog();
281         fpc.setReturnValue(log);
282
283         log.isDebugEnabled();
284         logc.setReturnValue(true);
285
286         log.debug(string);
287     }
288
289     /**
290      * Test that BuilderFactory will invoke the "initializeService" method by default.
291      */

292     public void testAutowireInitializer()
293     {
294         MockControl c = newControl(Module.class);
295         Module module = (Module) c.getMock();
296
297         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
298         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
299                 .getMock();
300
301         Log log = (Log) newMock(Log.class);
302
303         fp.getLog();
304         fpc.setReturnValue(log);
305
306         fp.getServiceId();
307         fpc.setReturnValue("foo");
308
309         fp.getInvokingModule();
310         fpc.setReturnValue(module);
311
312         module.resolveType("hivemind.test.services.InitializeFixture");
313         c.setReturnValue(InitializeFixture.class);
314
315         replayControls();
316
317         BuilderParameter p = new BuilderParameter();
318
319         p.setClassName(InitializeFixture.class.getName());
320
321         InitializeFixture f = (InitializeFixture) execute(fp, p);
322
323         // Check which method was actually invoked (if any)
324

325         assertEquals("initializeService", f.getMethod());
326
327         verifyControls();
328     }
329
330     /**
331      * Test that BuilderFactory will invoke the named initializer.
332      */

333     public void testInitializer()
334     {
335         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
336         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
337                 .getMock();
338
339         MockControl c = newControl(Module.class);
340         Module module = (Module) c.getMock();
341
342         Log log = (Log) newMock(Log.class);
343
344         fp.getLog();
345         fpc.setReturnValue(log);
346
347         fp.getServiceId();
348         fpc.setReturnValue("foo");
349
350         fp.getInvokingModule();
351         fpc.setReturnValue(module);
352
353         module.resolveType("hivemind.test.services.InitializeFixture");
354         c.setReturnValue(InitializeFixture.class);
355
356         replayControls();
357
358         BuilderParameter p = new BuilderParameter();
359
360         p.setClassName(InitializeFixture.class.getName());
361         p.setInitializeMethod("initializeCustom");
362
363         InitializeFixture f = (InitializeFixture) execute(fp, p);
364
365         assertEquals("initializeCustom", f.getMethod());
366
367         verifyControls();
368     }
369
370     public void testAutowireServices()
371     {
372         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
373         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
374                 .getMock();
375
376         MockControl mc = newControl(Module.class);
377         Module module = (Module) mc.getMock();
378
379         MockControl lc = newControl(Log.class);
380         Log log = (Log) lc.getMock();
381
382         fp.getLog();
383         fpc.setReturnValue(log);
384
385         fp.getServiceId();
386         fpc.setReturnValue("foo");
387
388         fp.getInvokingModule();
389         fpc.setReturnValue(module);
390
391         module.resolveType("hivemind.test.services.ServiceAutowireTarget");
392         mc.setReturnValue(ServiceAutowireTarget.class);
393
394         StringHolder h = new StringHolderImpl();
395
396         module.containsService(String.class);
397         mc.setReturnValue(false);
398         module.containsService(StringHolder.class);
399         mc.setReturnValue(true);
400         module.getService(StringHolder.class);
401         mc.setReturnValue(h);
402
403         log.isDebugEnabled();
404         lc.setReturnValue(false);
405
406         replayControls();
407
408         BuilderParameter parameter = new BuilderParameter();
409
410         parameter.setClassName(ServiceAutowireTarget.class.getName());
411         parameter.setAutowireServices(true);
412
413         ServiceAutowireTarget service = (ServiceAutowireTarget) execute(fp, parameter);
414
415         assertSame(h, service.getStringHolder());
416
417         verifyControls();
418     }
419
420     public void testAutowireServicesFailure()
421     {
422         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
423         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
424                 .getMock();
425
426         MockControl mc = newControl(Module.class);
427         Module module = (Module) mc.getMock();
428
429         Log log = (Log) newMock(Log.class);
430
431         fp.getLog();
432         fpc.setReturnValue(log);
433
434         fp.getServiceId();
435         fpc.setReturnValue("foo.bar");
436
437         fp.getInvokingModule();
438         fpc.setReturnValue(module);
439
440         module.resolveType("hivemind.test.services.ServiceAutowireTarget");
441         mc.setReturnValue(ServiceAutowireTarget.class);
442
443         module.containsService(String.class);
444         mc.setReturnValue(false);
445         module.containsService(StringHolder.class);
446         mc.setReturnValue(false);
447
448         replayControls();
449
450         BuilderParameter parameter = new BuilderParameter();
451
452         parameter.setClassName(ServiceAutowireTarget.class.getName());
453         parameter.setAutowireServices(true);
454
455         ServiceAutowireTarget service = (ServiceAutowireTarget) execute(fp, parameter);
456
457         assertNull(service.getStringHolder());
458
459         verifyControls();
460     }
461
462     public void testAutowireConstructor() throws Exception
463     {
464         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
465         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
466                 .getMock();
467
468         MockControl mc = newControl(Module.class);
469         Module module = (Module) mc.getMock();
470
471         MockControl lc = newControl(Log.class);
472         Log log = (Log) lc.getMock();
473
474         fp.getLog();
475         fpc.setReturnValue(log);
476
477         fp.getServiceId();
478         fpc.setReturnValue("foo");
479
480         fp.getInvokingModule();
481         fpc.setReturnValue(module, MockControl.ONE_OR_MORE);
482
483         module.resolveType("hivemind.test.services.ConstructorAutowireTarget");
484         mc.setReturnValue(ConstructorAutowireTarget.class);
485
486         module.containsService(Comparable.class);
487         mc.setReturnValue(false);
488
489         module.containsService(StringHolder.class);
490         mc.setReturnValue(true);
491
492         StringHolder h = new StringHolderImpl();
493
494         module.getService(StringHolder.class);
495         mc.setReturnValue(h);
496
497         module.getClassResolver();
498         mc.setReturnValue(getClassResolver());
499
500         replayControls();
501
502         BuilderParameter parameter = new BuilderParameter();
503
504         parameter.setClassName(ConstructorAutowireTarget.class.getName());
505         parameter.setAutowireServices(true);
506         parameter.addProperty(new BuilderClassResolverFacet());
507
508         ConstructorAutowireTarget service = (ConstructorAutowireTarget) execute(fp, parameter);
509
510         assertSame(h, service.getStringHolder());
511         assertSame(getClassResolver(), service.getClassResolver());
512
513         verifyControls();
514     }
515
516     public void testAutowireConstructorFailure() throws Exception
517     {
518         MockControl fpc = newControl(ServiceImplementationFactoryParameters.class);
519         ServiceImplementationFactoryParameters fp = (ServiceImplementationFactoryParameters) fpc
520                 .getMock();
521
522         MockControl mc = newControl(Module.class);
523         Module module = (Module) mc.getMock();
524
525         MockControl lc = newControl(Log.class);
526         Log log = (Log) lc.getMock();
527
528         fp.getLog();
529         fpc.setReturnValue(log);
530
531         fp.getServiceId();
532         fpc.setReturnValue("foo");
533
534         fp.getInvokingModule();
535         fpc.setReturnValue(module, MockControl.ONE_OR_MORE);
536
537         module.resolveType("hivemind.test.services.ConstructorAutowireTarget");
538         mc.setReturnValue(ConstructorAutowireTarget.class);
539
540         module.containsService(Comparable.class);
541         mc.setReturnValue(false);
542
543         module.containsService(StringHolder.class);
544         mc.setReturnValue(false, 2);
545
546         replayControls();
547
548         BuilderParameter parameter = new BuilderParameter();
549
550         parameter.setClassName(ConstructorAutowireTarget.class.getName());
551         parameter.setAutowireServices(true);
552
553         try
554         {
555             execute(fp, parameter);
556             unreachable();
557         }
558         catch (ApplicationRuntimeException ex)
559         {
560             assertEquals(
561                     "Error building service foo: Unable to find constructor applicable for autowiring. Use explicit constructor parameters.",
562                     ex.getMessage());
563         }
564
565         verifyControls();
566     }
567
568     public void testSetObject() throws Exception
569     {
570         Registry r = buildFrameworkRegistry("SetObject.xml");
571
572         SetObjectFixture f = (SetObjectFixture) r.getService(SetObjectFixture.class);
573
574         assertNotNull(f.getClassFactory1());
575         assertSame(f.getClassFactory1(), f.getClassFactory2());
576     }
577
578     public void testAutowireService() throws Exception
579     {
580         Registry r = buildFrameworkRegistry("AutowireService.xml");
581
582         SetObjectFixture f = (SetObjectFixture) r.getService(SetObjectFixture.class);
583
584         assertNotNull(f.getClassFactory1());
585         assertSame(f.getClassFactory1(), f.getClassFactory2());
586     }
587
588 }
Popular Tags