From a7b886c35eb3cd8d62c469d5c0e8b8931d104a97 Mon Sep 17 00:00:00 2001 From: David Webb Date: Thu, 16 Jan 2014 00:39:32 -0500 Subject: [PATCH 1/2] DATACASS-70 - Optimizing Unit Tests for Mac thread limit Make use of static session and template for the entire test suite. Use same keyspace to prevent too many file writer threads. Clean keyspace after each test. --- ...tractEmbeddedCassandraIntegrationTest.java | 27 ++++++++++++---- .../template/CassandraOperationsTest.java | 31 ++++++++++++++++--- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java index 4b5127af6..d7f62cffe 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java @@ -7,6 +7,9 @@ import org.apache.thrift.transport.TTransportException; import org.cassandraunit.utils.EmbeddedCassandraServerHelper; import org.junit.After; +import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.KeyspaceMetadata; @@ -14,22 +17,30 @@ public abstract class AbstractEmbeddedCassandraIntegrationTest { + private static Logger log = LoggerFactory.getLogger(AbstractEmbeddedCassandraIntegrationTest.class); + protected final static String CASSANDRA_CONFIG = "spring-cassandra.yaml"; protected final static String CASSANDRA_HOST = "localhost"; protected final static int CASSANDRA_NATIVE_PORT = 9042; + @BeforeClass public static void startCassandra() throws ConfigurationException, TTransportException, IOException, InterruptedException { + log.info("Starting Cassandra Embedded Server"); EmbeddedCassandraServerHelper.startEmbeddedCassandra(CASSANDRA_CONFIG); } public AbstractEmbeddedCassandraIntegrationTest() { - try { - startCassandra(); - } catch (Exception e) { - throw new RuntimeException(e); + if (session == null) { + connect(); + } + } + + public AbstractEmbeddedCassandraIntegrationTest(String keyspace) { + this.keyspace = keyspace; + if (session == null) { + connect(); } - connect(); } /** @@ -48,10 +59,11 @@ public AbstractEmbeddedCassandraIntegrationTest() { * If not null, get a {@link Session} for the from the {@link #cluster}. */ protected String keyspace = "ks" + UUID.randomUUID().toString().replace("-", ""); + /** * The {@link Session} for the {@link #keyspace} from the {@link #cluster}. */ - protected Session session; + protected static Session session; protected String keyspace() { return keyspace; @@ -91,8 +103,11 @@ public void connect() { @After public void after() { + log.info("After: clear -> " + clear + ", connected -> " + connected()); if (clear && connected()) { + log.info("Cleaning Cassandra"); EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); } } + } diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/template/CassandraOperationsTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/template/CassandraOperationsTest.java index 82340180f..da5a4f636 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/template/CassandraOperationsTest.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/template/CassandraOperationsTest.java @@ -67,7 +67,7 @@ */ public class CassandraOperationsTest extends AbstractEmbeddedCassandraIntegrationTest { - private CassandraOperations cassandraTemplate; + private static CassandraOperations cassandraTemplate; private static Logger log = LoggerFactory.getLogger(CassandraOperationsTest.class); @@ -88,9 +88,26 @@ public class CassandraOperationsTest extends AbstractEmbeddedCassandraIntegratio "cassandraOperationsTest-cql-dataload.cql", this.keyspace), CASSANDRA_CONFIG, CASSANDRA_HOST, CASSANDRA_NATIVE_PORT); + public CassandraOperationsTest() { + super("sdctest"); + clear = true; + } + @Before public void setupTemplate() { - cassandraTemplate = new CassandraTemplate(session); + + log.info("Running setupTemplate()"); + + if (cassandraTemplate == null) { + + log.info("null Template ... Initialzing DB test CQL"); + + // CassandraCQLUnit cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet( + // "cassandraOperationsTest-cql-dataload.cql", keyspace), CASSANDRA_CONFIG, CASSANDRA_HOST, + // CASSANDRA_NATIVE_PORT); + + cassandraTemplate = new CassandraTemplate(session); + } } @Test @@ -140,9 +157,11 @@ public Collection mapHosts(Set host) throws DriverException { } @Test - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") public void ingestionTestListOfList() { + log.info("Keyspace => " + keyspace); + String cql = "insert into book (isbn, title, author, pages) values (?, ?, ?, ?)"; List> values = new LinkedList>(); @@ -166,6 +185,8 @@ public void ingestionTestListOfList() { @Test public void ingestionTestObjectArray() { + log.info("Keyspace => " + keyspace); + String cql = "insert into book (isbn, title, author, pages) values (?, ?, ?, ?)"; Object[][] values = new Object[3][]; @@ -508,7 +529,7 @@ public void queryForObjectTestCqlStringRowMapperNotOneRowReturned() { // Insert our 3 test books. ingestionTestObjectArray(); - @SuppressWarnings( "unused" ) + @SuppressWarnings("unused") Book book = cassandraTemplate.queryForObject("select * from book where isbn in ('1234','2345','3456')", new RowMapper() { @Override @@ -563,7 +584,7 @@ public void quertForObjectTestCqlStringRequiredType() { @Test(expected = ClassCastException.class) public void queryForObjectTestCqlStringRequiredTypeInvalid() { - @SuppressWarnings( "unused" ) + @SuppressWarnings("unused") Float title = cassandraTemplate.queryForObject("select title from book where isbn in ('" + ISBN_NINES + "')", Float.class); From 4ac4d1df29d27d9a6bce10c6bf0d46b1c5f00b46 Mon Sep 17 00:00:00 2001 From: David Webb Date: Thu, 16 Jan 2014 00:58:05 -0500 Subject: [PATCH 2/2] DATACASS-70 - Fixed Table Lifecycle test with new Unit test strategy. --- .../AbstractEmbeddedCassandraIntegrationTest.java | 4 ++++ .../generator/TableLifecycleIntegrationTest.java | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java index d7f62cffe..e4e6fade6 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/AbstractEmbeddedCassandraIntegrationTest.java @@ -81,7 +81,11 @@ public Cluster cluster() { } public void connect() { + if (connect && !connected()) { + + log.info("Connecting to Cassandra"); + cluster = cluster(); if (keyspace() == null) { diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/cql/generator/TableLifecycleIntegrationTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/cql/generator/TableLifecycleIntegrationTest.java index 60e55c9a8..689895a81 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/cql/generator/TableLifecycleIntegrationTest.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/core/cql/generator/TableLifecycleIntegrationTest.java @@ -18,6 +18,9 @@ import static org.springframework.cassandra.test.integration.core.cql.generator.CqlTableSpecificationAssertions.assertNoTable; import static org.springframework.cassandra.test.integration.core.cql.generator.CqlTableSpecificationAssertions.assertTable; +import org.cassandraunit.CassandraCQLUnit; +import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; +import org.junit.Rule; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,6 +42,18 @@ public class TableLifecycleIntegrationTest extends AbstractEmbeddedCassandraInte CreateTableCqlGeneratorTests.MultipleOptionsTest createTableTest = new CreateTableCqlGeneratorTests.MultipleOptionsTest(); + public TableLifecycleIntegrationTest() { + super("tlit"); + clear = true; + } + + // This only ensures the keyspace exists before each test, while using a static session from the parent object. + // TODO - DW Make this better. + @Rule + public CassandraCQLUnit cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet( + "cassandraOperationsTest-cql-dataload.cql", this.keyspace), CASSANDRA_CONFIG, CASSANDRA_HOST, + CASSANDRA_NATIVE_PORT); + @Test public void testDrop() {