/** Tests that a service that comes from a factory that fails in provide */ @Test public void testFactorServiceFailsInProvide() { ServiceLocator locator = LocatorHelper.getServiceLocator(RecordingErrorService.class); FactoryDescriptors fds = BuilderHelper.link(FactoryFailsInProvideService.class) .to(SimpleService.class.getName()) .in(Singleton.class.getName()) .buildFactory(Singleton.class.getName()); ServiceLocatorUtilities.addFactoryDescriptors(locator, fds); ActiveDescriptor<?> serviceDescriptor = locator.getBestDescriptor( BuilderHelper.createContractFilter(SimpleService.class.getName())); Assert.assertNotNull(serviceDescriptor); try { locator.getService(SimpleService.class); Assert.fail("Should have failed"); } catch (MultiException me) { Assert.assertTrue(me.getMessage().contains(ERROR_STRING)); } List<ErrorInformation> errors = locator.getService(RecordingErrorService.class).getAndClearErrors(); Assert.assertEquals(1, errors.size()); ErrorInformation ei = errors.get(0); Assert.assertEquals(ErrorType.SERVICE_CREATION_FAILURE, ei.getErrorType()); Assert.assertEquals(serviceDescriptor, ei.getDescriptor()); Assert.assertNull(ei.getInjectee()); Throwable associatedException = ei.getAssociatedException(); Assert.assertTrue(associatedException.getMessage().contains(ERROR_STRING)); }
/** Tests that a service that is created by a factory where the factory dispose method fails */ @Test public void testFactorServiceFailsInDispose() { ServiceLocator locator = LocatorHelper.getServiceLocator(RecordingErrorService.class); FactoryDescriptors fds = BuilderHelper.link(FactoryFailsInDisposeService.class) .to(SimpleService.class.getName()) .in(Singleton.class.getName()) .buildFactory(Singleton.class.getName()); ServiceLocatorUtilities.addFactoryDescriptors(locator, fds); ActiveDescriptor<?> serviceDescriptor = locator.getBestDescriptor( BuilderHelper.createContractFilter(SimpleService.class.getName())); Assert.assertNotNull(serviceDescriptor); ServiceHandle<SimpleService> handle = locator.getServiceHandle(SimpleService.class); Assert.assertNotNull(handle); Assert.assertNotNull(handle.getService()); handle.destroy(); List<ErrorInformation> errors = locator.getService(RecordingErrorService.class).getAndClearErrors(); Assert.assertEquals(1, errors.size()); ErrorInformation ei = errors.get(0); Assert.assertEquals(ErrorType.SERVICE_DESTRUCTION_FAILURE, ei.getErrorType()); Assert.assertEquals(serviceDescriptor, ei.getDescriptor()); Assert.assertNull(ei.getInjectee()); Throwable associatedException = ei.getAssociatedException(); Assert.assertTrue(associatedException.getMessage().contains(ERROR_STRING)); }