package mil.nga.giat.geowave.test; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.junit.Assert; import com.github.sakserv.minicluster.config.ConfigVars; import com.github.sakserv.minicluster.impl.ZookeeperLocalCluster; import com.github.sakserv.propertyparser.PropertyParser; public class ZookeeperTestEnvironment implements TestEnvironment { private static ZookeeperTestEnvironment singletonInstance = null; public static synchronized ZookeeperTestEnvironment getInstance() { if (singletonInstance == null) { singletonInstance = new ZookeeperTestEnvironment(); } return singletonInstance; } private final static Logger LOGGER = LoggerFactory.getLogger(ZookeeperTestEnvironment.class); protected String zookeeper; private ZookeeperLocalCluster zookeeperLocalCluster; public static final String ZK_PROPERTY_NAME = "zookeeperUrl"; private ZookeeperTestEnvironment() {} @Override public void setup() throws Exception { if (!TestUtils.isSet(zookeeper)) { zookeeper = System.getProperty(ZK_PROPERTY_NAME); if (!TestUtils.isSet(zookeeper)) { PropertyParser propertyParser = null; try { propertyParser = new PropertyParser( HBaseStoreTestEnvironment.HBASE_PROPS_FILE); propertyParser.parsePropsFile(); } catch (final IOException e) { LOGGER.error( "Unable to load property file: {}" + HBaseStoreTestEnvironment.HBASE_PROPS_FILE, e); } if (System.getProperty( "os.name").startsWith( "Windows")) { System.setProperty( "HADOOP_HOME", System.getenv().get( "HADOOP_HOME")); } try { zookeeperLocalCluster = new ZookeeperLocalCluster.Builder() .setPort( Integer.parseInt(propertyParser.getProperty(ConfigVars.ZOOKEEPER_PORT_KEY))) .setTempDir( propertyParser.getProperty(ConfigVars.ZOOKEEPER_TEMP_DIR_KEY)) .setZookeeperConnectionString( propertyParser.getProperty(ConfigVars.ZOOKEEPER_CONNECTION_STRING_KEY)) .build(); zookeeperLocalCluster.start(); } catch (final Exception e) { LOGGER.error( "Exception starting zookeeperLocalCluster: " + e, e); Assert.fail(); } zookeeper = zookeeperLocalCluster.getZookeeperConnectionString(); } } } @Override public void tearDown() throws Exception { try { zookeeperLocalCluster.stop(true); } catch (final Exception e) { LOGGER.warn( "Unable to delete mini zookeeper temporary directory", e); } zookeeper = null; } public String getZookeeper() { return zookeeper; } @Override public TestEnvironment[] getDependentEnvironments() { return new TestEnvironment[] {}; } }