Merge pull request #12 from myrle-krantz/develop
Adjusting db and tenant initialization so that cluster can be opened once.
diff --git a/build.gradle b/build.gradle
index dc2ac93..bd29aba 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,6 @@
buildscript {
repositories {
- jcenter();
+ jcenter()
}
}
@@ -66,6 +66,7 @@
jar {
from sourceSets.main.allSource
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
license {
diff --git a/src/main/java/io/mifos/core/test/fixture/cassandra/CassandraInitializer.java b/src/main/java/io/mifos/core/test/fixture/cassandra/CassandraInitializer.java
index fdc954e..ffafac8 100644
--- a/src/main/java/io/mifos/core/test/fixture/cassandra/CassandraInitializer.java
+++ b/src/main/java/io/mifos/core/test/fixture/cassandra/CassandraInitializer.java
@@ -32,6 +32,7 @@
public final class CassandraInitializer extends DataStoreTenantInitializer {
private final boolean useExistingDB;
+ private Cluster cluster;
public CassandraInitializer() {
this(false);
@@ -42,7 +43,11 @@
@Override
public void initialize() throws Exception {
- CassandraInitializer.setup(useExistingDB);
+ final Cluster.Builder clusterBuilder = new Cluster.Builder()
+ .withClusterName(System.getProperty(TestEnvironment.CASSANDRA_CLUSTER_NAME_PROPERTY));
+ ContactPointUtils.process(clusterBuilder, System.getProperty(TestEnvironment.CASSANDRA_CONTACT_POINTS_PROPERTY));
+ cluster = clusterBuilder.build();
+ setup();
}
@Override
@@ -52,91 +57,78 @@
@Override
public void finish() {
- if (!useExistingDB) CassandraInitializer.tearDown();
+ if (cluster != null)
+ cluster.close();
+
+ if (!useExistingDB) this.tearDown();
}
- public static void setup() throws Exception {
- setup(false);
- }
-
- public static void setup(final boolean useExistingDB) throws Exception {
+ private void setup() throws Exception {
if (!useExistingDB) {
- CassandraInitializer.startEmbeddedCassandra();
- CassandraInitializer.createKeyspaceSeshat();
+ startEmbeddedCassandra();
+ createKeyspaceSeshat();
}
}
- public static void tearDown() {
+ private void tearDown() {
EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
}
- private static void startEmbeddedCassandra() throws Exception {
+ private void startEmbeddedCassandra() throws Exception {
EmbeddedCassandraServerHelper.startEmbeddedCassandra(TimeUnit.SECONDS.toMillis(30L));
}
- private static void createKeyspaceSeshat() {
- final Cluster.Builder clusterBuilder = new Cluster.Builder()
- .withClusterName(System.getProperty(TestEnvironment.CASSANDRA_CLUSTER_NAME_PROPERTY));
- ContactPointUtils.process(clusterBuilder, System.getProperty(TestEnvironment.CASSANDRA_CONTACT_POINTS_PROPERTY));
- final Cluster cluster = clusterBuilder.build();
- final Session session = cluster.connect();
- // create meta keyspace seshat
- session.execute("CREATE KEYSPACE " +
- System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY) +
- " WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1}");
- // create needed tenant management table
- final String createTenantsTable = SchemaBuilder.createTable(
- System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY), "tenants")
- .addPartitionKey("identifier", DataType.text())
- .addColumn("cluster_name", DataType.text())
- .addColumn("contact_points", DataType.text())
- .addColumn("keyspace_name", DataType.text())
- .addColumn("replication_type", DataType.text())
- .addColumn("replicas", DataType.text())
- .addColumn("name", DataType.text())
- .addColumn("description", DataType.text())
- .buildInternal();
- session.execute(createTenantsTable);
-
- session.close();
- cluster.close();
+ private void createKeyspaceSeshat() {
+ try (final Session session = cluster.connect()) {
+ // create meta keyspace seshat
+ session.execute("CREATE KEYSPACE " +
+ System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY) +
+ " WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1}");
+ // create needed tenant management table
+ final String createTenantsTable = SchemaBuilder.createTable(
+ System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY), "tenants")
+ .addPartitionKey("identifier", DataType.text())
+ .addColumn("cluster_name", DataType.text())
+ .addColumn("contact_points", DataType.text())
+ .addColumn("keyspace_name", DataType.text())
+ .addColumn("replication_type", DataType.text())
+ .addColumn("replicas", DataType.text())
+ .addColumn("name", DataType.text())
+ .addColumn("description", DataType.text())
+ .buildInternal();
+ session.execute(createTenantsTable);
+ }
}
- public static void createKeyspaceTenant(final String identifier) {
- final Cluster.Builder clusterBuilder = new Cluster.Builder()
- .withClusterName(System.getProperty(TestEnvironment.CASSANDRA_CLUSTER_NAME_PROPERTY));
- ContactPointUtils.process(clusterBuilder, System.getProperty(TestEnvironment.CASSANDRA_CONTACT_POINTS_PROPERTY));
- final Cluster cluster = clusterBuilder.build();
- final Session session = cluster.connect();
- // create tenant keyspace
- session.execute("CREATE KEYSPACE " + identifier
- + " WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1}");
- // create needed command source table for the new tenant
- final String createCommandSourceTable = SchemaBuilder.createTable(identifier, "command_source")
- .addPartitionKey("source", DataType.text())
- .addPartitionKey("bucket", DataType.text())
- .addClusteringColumn("created_on", DataType.timestamp())
- .addColumn("command", DataType.text())
- .addColumn("processed", DataType.cboolean())
- .addColumn("failed", DataType.cboolean())
- .addColumn("failure_message", DataType.text())
- .buildInternal();
- session.execute(createCommandSourceTable);
- // insert tenant connection info in management table
- session.execute("USE " + System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY));
- final MappingManager mappingManager = new MappingManager(session);
- final CassandraTenant cassandraTenant = new CassandraTenant();
- cassandraTenant.setIdentifier(identifier);
- cassandraTenant.setClusterName(System.getProperty(TestEnvironment.CASSANDRA_CLUSTER_NAME_PROPERTY));
- cassandraTenant.setContactPoints(System.getProperty(TestEnvironment.CASSANDRA_CONTACT_POINTS_PROPERTY));
- cassandraTenant.setKeyspaceName(identifier);
- cassandraTenant.setReplicationType("Simple");
- cassandraTenant.setReplicas("1");
- cassandraTenant.setName(identifier);
- final Mapper<CassandraTenant> cassandraTenantMapper = mappingManager.mapper(CassandraTenant.class);
- cassandraTenantMapper.save(cassandraTenant);
-
- session.close();
- cluster.close();
+ private void createKeyspaceTenant(final String identifier) {
+ try (final Session session = cluster.connect()) {
+ // create tenant keyspace
+ session.execute("CREATE KEYSPACE " + identifier
+ + " WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1}");
+ // create needed command source table for the new tenant
+ final String createCommandSourceTable = SchemaBuilder.createTable(identifier, "command_source")
+ .addPartitionKey("source", DataType.text())
+ .addPartitionKey("bucket", DataType.text())
+ .addClusteringColumn("created_on", DataType.timestamp())
+ .addColumn("command", DataType.text())
+ .addColumn("processed", DataType.cboolean())
+ .addColumn("failed", DataType.cboolean())
+ .addColumn("failure_message", DataType.text())
+ .buildInternal();
+ session.execute(createCommandSourceTable);
+ // insert tenant connection info in management table
+ session.execute("USE " + System.getProperty(TestEnvironment.CASSANDRA_META_KEYSPACE_PROPERTY));
+ final MappingManager mappingManager = new MappingManager(session);
+ final CassandraTenant cassandraTenant = new CassandraTenant();
+ cassandraTenant.setIdentifier(identifier);
+ cassandraTenant.setClusterName(System.getProperty(TestEnvironment.CASSANDRA_CLUSTER_NAME_PROPERTY));
+ cassandraTenant.setContactPoints(System.getProperty(TestEnvironment.CASSANDRA_CONTACT_POINTS_PROPERTY));
+ cassandraTenant.setKeyspaceName(identifier);
+ cassandraTenant.setReplicationType("Simple");
+ cassandraTenant.setReplicas("1");
+ cassandraTenant.setName(identifier);
+ final Mapper<CassandraTenant> cassandraTenantMapper = mappingManager.mapper(CassandraTenant.class);
+ cassandraTenantMapper.save(cassandraTenant);
+ }
}
}