package mil.nga.giat.geowave.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.junit.contrib.java.lang.system.EnvironmentVariables;
import mil.nga.giat.geowave.core.store.DataStore;
import mil.nga.giat.geowave.core.store.GenericStoreFactory;
import mil.nga.giat.geowave.core.store.StoreFactoryOptions;
import mil.nga.giat.geowave.datastore.bigtable.BigTableDataStoreFactory;
import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore.GeoWaveStoreType;
public class BigtableStoreTestEnvironment extends
StoreTestEnvironment
{
private static final GenericStoreFactory<DataStore> STORE_FACTORY = new BigTableDataStoreFactory();
private static BigtableStoreTestEnvironment singletonInstance = null;
public static synchronized BigtableStoreTestEnvironment getInstance() {
if (singletonInstance == null) {
singletonInstance = new BigtableStoreTestEnvironment();
}
return singletonInstance;
}
private final static Logger LOGGER = LoggerFactory.getLogger(BigtableStoreTestEnvironment.class);
protected BigtableEmulator emulator;
private BigtableStoreTestEnvironment() {}
@Override
protected void initOptions(
final StoreFactoryOptions options ) {}
@Override
protected GenericStoreFactory<DataStore> getDataStoreFactory() {
return STORE_FACTORY;
}
@Override
protected GeoWaveStoreType getStoreType() {
return GeoWaveStoreType.BIGTABLE;
}
@Override
public void setup() {
// Bigtable IT's rely on an external gcloud emulator
EnvironmentVariables environmentVariables = new EnvironmentVariables();
environmentVariables.set(
"BIGTABLE_EMULATOR_HOST",
"localhost:8128");
if (emulator == null) {
emulator = new BigtableEmulator(
null); // null uses tmp dir
}
// Make sure we clean up any old processes first
if (emulator.isRunning()) {
emulator.stop();
}
if (!emulator.start()) {
LOGGER.error("Bigtable emulator startup failed");
}
}
@Override
public void tearDown() {
emulator.stop();
}
@Override
public TestEnvironment[] getDependentEnvironments() {
return new TestEnvironment[] {};
}
}