1 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 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 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 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 325 assertEquals("initializeService", f.getMethod()); 326 327 verifyControls(); 328 } 329 330 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 |