/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.jgroups.common;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.search.cfg.Environment;
import org.hibernate.search.test.DefaultTestResourceManager;
import org.hibernate.search.test.util.TestConfiguration;
import org.junit.After;
import org.junit.Before;
/**
* Test class to simulate clustered environment with one master and one or more slave nodes,
* each role being determined dynamically.
*
* @author Lukasz Moren
*/
public abstract class DynamicMasterSlaveSearchTestCase implements TestConfiguration {
private String alreadySelectedBaseIndexDir = null;
private List<DefaultTestResourceManager> resourceManagers = new ArrayList<>();
@Override
public void configure(Map<String,Object> cfg) {
/*
* Configure all nodes to read/write to the exact same index on disk.
* This will lead to bad performance, but it's also the only way to
* use dynamic master selection without an infinispan directory provider.
*/
cfg.put( "hibernate.search.default." + Environment.WORKER_BACKEND, "jgroups" );
cfg.put( "hibernate.search.default.directory_provider", "filesystem" );
cfg.put( "hibernate.search.default.exclusive_index_use", "false" );
if ( alreadySelectedBaseIndexDir != null ) {
cfg.put( "hibernate.search.default.indexBase", alreadySelectedBaseIndexDir );
}
}
@Override
public Set<String> multiTenantIds() {
return Collections.emptySet();
}
protected abstract int getExpectedNumberOfNodes();
@Before
public void setUp() throws Exception {
for ( int i = 0 ; i < getExpectedNumberOfNodes() ; ++i ) {
DefaultTestResourceManager resourceManager = new DefaultTestResourceManager( this, getClass() );
resourceManagers.add( resourceManager );
resourceManager.openSessionFactory();
if ( alreadySelectedBaseIndexDir == null ) {
// Set the base index dir to the dir selected for the first search factory
this.alreadySelectedBaseIndexDir = resourceManager.getBaseIndexDir().toAbsolutePath().toString();
}
}
}
@After
public void tearDown() throws Exception {
for ( DefaultTestResourceManager resourceManager : resourceManagers ) {
resourceManager.defaultTearDown();
}
}
public List<DefaultTestResourceManager> getResourceManagers() {
return resourceManagers;
}
}