package org.hibernate.search.test.service; import org.hibernate.search.SearchException; import org.hibernate.search.engine.spi.SearchFactoryImplementor; import org.hibernate.search.spi.SearchFactoryBuilder; import org.hibernate.search.test.util.HibernateManualConfiguration; import org.hibernate.search.test.util.ManualConfiguration; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static org.junit.Assert.*; /** * @author Emmanuel Bernard * @author Sanne Grinovero */ public class ServiceProviderTest { @Rule public ExpectedException exceptions = ExpectedException.none(); @Test public void testManagedService() throws Exception { MyServiceProvider.resetActive(); assertFalse( MyServiceProvider.isActive() ); final ManualConfiguration configuration = new HibernateManualConfiguration(); configuration.addProperty( "hibernate.search.default.directory_provider", ServiceDirectoryProvider.class.getName() ) .addClass( Telephone.class ); SearchFactoryImplementor sf = new SearchFactoryBuilder().configuration( configuration ).buildSearchFactory(); assertTrue( MyServiceProvider.isActive() ); sf.close(); assertFalse( MyServiceProvider.isActive() ); } @Test public void testCircularDependenciesNotAllowed() throws Exception { MyServiceProvider.resetActive(); assertFalse( MyServiceProvider.isActive() ); final ManualConfiguration configuration = new HibernateManualConfiguration(); configuration.addProperty( "hibernate.search.default.directory_provider", ServiceDirectoryProvider.class.getName() ) .addClass( Telephone.class ); exceptions.expect( SearchException.class ); MyServiceProvider.setSimulateCircularDependency( true ); SearchFactoryImplementor sf = null; try { sf = new SearchFactoryBuilder().configuration( configuration ).buildSearchFactory(); } finally { MyServiceProvider.setSimulateCircularDependency( false ); if ( sf != null ) { sf.close(); } } } @Test public void testProvidedService() throws Exception { ProvidedServiceProvider.resetActive(); assertFalse( ProvidedServiceProvider.isActive() ); final ManualConfiguration configuration = new HibernateManualConfiguration(); configuration .addProperty( "hibernate.search.default.directory_provider", ProvidedServiceDirectoryProvider.class.getName() ) .addClass( Telephone.class ) .getProvidedServices().put( ProvidedServiceProvider.class, new ProvidedService(true) ); SearchFactoryImplementor sf = new SearchFactoryBuilder().configuration( configuration ).buildSearchFactory(); assertFalse( ProvidedServiceProvider.isActive() ); sf.close(); assertFalse( ProvidedServiceProvider.isActive() ); } @Test public void testServiceNotFound() throws Exception { final ManualConfiguration configuration = new HibernateManualConfiguration(); configuration.addProperty( "hibernate.search.default.directory_provider", NoServiceDirectoryProvider.class.getName() ) .addClass( Telephone.class ); boolean exception = false; try { SearchFactoryImplementor sf = new SearchFactoryBuilder().configuration( configuration ).buildSearchFactory(); } catch ( SearchException e ) { exception = true; } assertTrue( "Service not found should raise a SearchException", exception ); } }