package org.scale7.cassandra.pelops.support; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.cassandra.thrift.CfDef; import org.apache.cassandra.thrift.KsDef; import org.junit.Before; import org.scale7.cassandra.pelops.Cluster; import org.scale7.cassandra.pelops.ColumnFamilyManager; import org.scale7.cassandra.pelops.KeyspaceManager; import org.scale7.cassandra.pelops.Mutator; import org.scale7.cassandra.pelops.OperandPolicy; import org.scale7.cassandra.pelops.Selector; import org.scale7.cassandra.pelops.pool.DebuggingPool; import org.scale7.cassandra.pelops.pool.IThriftPool; import org.scale7.portability.SystemProxy; import org.slf4j.Logger; /** * Abstract integration test class which runs its own embedded cassandra server. */ public abstract class AbstractIntegrationTest { protected final Logger logger = SystemProxy.getLoggerFromFactory(this .getClass()); public static final String RPC_LISTEN_ADDRESS = "localhost"; public static final int RPC_PORT = 19160; public static final String KEYSPACE = "PelopsTesting"; private static EmbeddedCassandraServer cassandraServer; public static Cluster cluster = new Cluster(RPC_LISTEN_ADDRESS, RPC_PORT); private static KeyspaceManager keyspaceManager; private static ColumnFamilyManager columnFamilyManager; private static List<CfDef> colFamilyDefs; private IThriftPool pool = new DebuggingPool(cluster, KEYSPACE, new OperandPolicy()); public KeyspaceManager getKeyspaceManager() { return keyspaceManager; } public ColumnFamilyManager getColumnFamilyManager() { return columnFamilyManager; } protected Cluster getCluster() { return cluster; } protected IThriftPool getPool() { return pool; } /** * Starts embedded cassandra server. * * @throws Exception * if an error occurs */ public static void setup(List<CfDef> columnDefinitions) throws Exception { if (cassandraServer == null) { cassandraServer = new EmbeddedCassandraServer(); cassandraServer.start(); // wait until cassandra server starts up. could wait less time, but // 2 seconds to be sure. Thread.sleep(2000); } colFamilyDefs = columnDefinitions; keyspaceManager = new KeyspaceManager(cluster); columnFamilyManager = new ColumnFamilyManager(cluster, KEYSPACE); List<KsDef> keyspaces = keyspaceManager.getKeyspaceNames(); for (KsDef ksDef : keyspaces) if (ksDef.name.equals(KEYSPACE)) { keyspaceManager.dropKeyspace(KEYSPACE); } KsDef keyspaceDefinition = new KsDef(KEYSPACE, KeyspaceManager.KSDEF_STRATEGY_SIMPLE, new ArrayList<CfDef>()); Map<String, String> strategyOptions = new HashMap<String, String>(); strategyOptions.put("replication_factor", "1"); keyspaceDefinition.setStrategy_options(strategyOptions); for (CfDef colFamilyDef : colFamilyDefs) { keyspaceDefinition.addToCf_defs(colFamilyDef); } keyspaceManager.addKeyspace(keyspaceDefinition); } /** * Database prepare before test. * * @throws Exception * if an error occurs */ @Before public void setupTest() throws Exception { truncate(); prepareData(); } /** * Data prepare. Its purpose is to be overloaded from test class. * * @throws Exception * if an error occurs */ public void prepareData() throws Exception { } /** * Truncate all column families. */ public void truncate() { for (CfDef colFamilyDef : colFamilyDefs) { try { columnFamilyManager .truncateColumnFamily(colFamilyDef.getName()); } catch (Exception e) { throw new IllegalStateException( "Failed to truncate column family " + colFamilyDef.getName(), e); } } } /** * @return new mutator instance */ public Mutator createMutator() { return pool.createMutator(); } /** * @return new selector instance */ public Selector createSelector() { return pool.createSelector(); } }