diff --git a/pom.xml b/pom.xml index 1dad257bd..0b627b1ea 100644 --- a/pom.xml +++ b/pom.xml @@ -230,6 +230,40 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + reserve-network-port + + reserve-network-port + + process-resources + + + build.cassandra.native_transport_port + build.cassandra.rpc_port + build.cassandra.storage_port + build.cassandra.ssl_storage_port + + + + + add-shared-source-dir + + add-test-source + + generate-test-sources + + + ../shared/src/test/java + + + + + org.apache.maven.plugins maven-dependency-plugin @@ -285,5 +319,31 @@ + + + + src/main/resources + true + + **/* + + + + + + src/test/resources + true + + **/* + + + + ../shared/src/test/resources + true + + **/* + + + diff --git a/shared/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java b/shared/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java new file mode 100644 index 000000000..9e957e5d5 --- /dev/null +++ b/shared/src/test/java/org/springframework/cassandra/test/integration/support/AbstractTestJavaConfig.java @@ -0,0 +1,16 @@ +package org.springframework.cassandra.test.integration.support; + +import org.springframework.cassandra.config.java.AbstractCassandraConfiguration; +import org.springframework.context.annotation.Configuration; + +@Configuration +public abstract class AbstractTestJavaConfig extends AbstractCassandraConfiguration { + + public static BuildProperties PROPS = new BuildProperties(); + public static final int PORT = PROPS.getCassandraPort(); + + @Override + protected int getPort() { + return PORT; + } +} diff --git a/shared/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java b/shared/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java new file mode 100644 index 000000000..2a07fda77 --- /dev/null +++ b/shared/src/test/java/org/springframework/cassandra/test/integration/support/BuildProperties.java @@ -0,0 +1,64 @@ +package org.springframework.cassandra.test.integration.support; + +import java.io.InputStream; +import java.util.Properties; + +@SuppressWarnings("serial") +public class BuildProperties extends Properties { + + public BuildProperties() { + this("/build.properties"); + } + + public BuildProperties(String resourceName) { + loadProperties(resourceName); + } + + public void loadProperties(String resourceName) { + InputStream in = null; + try { + in = getClass().getResourceAsStream(resourceName); + if (in == null) { + return; + } + load(in); + + } catch (Exception x) { + throw new RuntimeException(x); + + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + // gulp + } + } + } + } + + public int getCassandraPort() { + return getInt("build.cassandra.native_transport_port"); + } + + public int getCassandraRpcPort() { + return getInt("build.cassandra.rpc_port"); + } + + public int getCassandraStoragePort() { + return getInt("build.cassandra.storage_port"); + } + + public int getCassandraSslStoragePort() { + return getInt("build.cassandra.ssl_storage_port"); + } + + public int getInt(String key) { + String property = getProperty(key); + return Integer.parseInt(property); + } + + public boolean getBoolean(String key) { + return Boolean.parseBoolean(getProperty(key)); + } +} diff --git a/shared/src/test/resources/build.properties b/shared/src/test/resources/build.properties new file mode 100644 index 000000000..ba2281c73 --- /dev/null +++ b/shared/src/test/resources/build.properties @@ -0,0 +1,4 @@ +build.cassandra.native_transport_port=@build.cassandra.native_transport_port@ +build.cassandra.rpc_port=@build.cassandra.rpc_port@ +build.cassandra.storage_port=@build.cassandra.storage_port@ +build.cassandra.ssl_storage_port=@build.cassandra.ssl_storage_port@ 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 3315c021a..77633bd68 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 @@ -8,6 +8,7 @@ import org.cassandraunit.utils.EmbeddedCassandraServerHelper; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.cassandra.test.integration.support.BuildProperties; import org.springframework.cassandra.test.unit.support.Utils; import com.datastax.driver.core.Cluster; @@ -22,9 +23,11 @@ public class AbstractEmbeddedCassandraIntegrationTest { static Logger log = LoggerFactory.getLogger(AbstractEmbeddedCassandraIntegrationTest.class); + protected static final BuildProperties PROPS = new BuildProperties(); + protected static final String CASSANDRA_CONFIG = "spring-cassandra.yaml"; protected static final String CASSANDRA_HOST = "localhost"; - protected static final int CASSANDRA_NATIVE_PORT = 9042; + protected static final int CASSANDRA_NATIVE_PORT = PROPS.getCassandraPort(); /** * The session connected to the system keyspace. diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java index 7768526a0..502fc574d 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/Config.java @@ -1,10 +1,10 @@ package org.springframework.cassandra.test.integration.config.java; -import org.springframework.cassandra.config.java.AbstractCassandraConfiguration; import org.springframework.context.annotation.Configuration; +import org.springframework.cassandra.test.integration.support.AbstractTestJavaConfig; @Configuration -public class Config extends AbstractCassandraConfiguration { +public class Config extends AbstractTestJavaConfig { @Override protected String getKeyspaceName() { diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java index 4b0f9be88..3db7d94f4 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/java/KeyspaceCreatingJavaConfig.java @@ -4,13 +4,13 @@ import java.util.ArrayList; import java.util.List; import org.springframework.cassandra.config.KeyspaceAttributes; -import org.springframework.cassandra.config.java.AbstractCassandraConfiguration; import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification; import org.springframework.cassandra.core.keyspace.KeyspaceOption; +import org.springframework.cassandra.test.integration.support.AbstractTestJavaConfig; import org.springframework.context.annotation.Configuration; @Configuration -public class KeyspaceCreatingJavaConfig extends AbstractCassandraConfiguration { +public class KeyspaceCreatingJavaConfig extends AbstractTestJavaConfig { public static final String KEYSPACE_NAME = "foo"; diff --git a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java index 28300bb12..7f77c3791 100644 --- a/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java +++ b/spring-cassandra/src/test/java/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.datastax.driver.core.Session; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration +@ContextConfiguration(locations = "classpath:/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml") public class XmlConfigTest extends AbstractKeyspaceCreatingIntegrationTest { public static final String KEYSPACE = "xmlconfigtest"; diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml index 7958b7eba..ca02147d5 100644 --- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml +++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest-context.xml @@ -8,9 +8,9 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + location="classpath:build.properties,classpath:/org/springframework/cassandra/test/integration/config/xml/FullySpecifiedKeyspaceCreatingXmlConfigTest.properties" /> - + diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalKeyspaceCreatingXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalKeyspaceCreatingXmlConfigTest-context.xml index 05939b0d0..109528a9d 100644 --- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalKeyspaceCreatingXmlConfigTest-context.xml +++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalKeyspaceCreatingXmlConfigTest-context.xml @@ -7,7 +7,10 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - + + + diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml index e0939fdc3..fb716513d 100644 --- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml +++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/MinimalXmlConfigTest-context.xml @@ -6,7 +6,10 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - + + + diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml index 2c52e09dd..ca3483d66 100644 --- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml +++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/XmlConfigTest-context.xml @@ -6,8 +6,11 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + + contactPoints="localhost" port="${build.cassandra.native_transport_port}"> diff --git a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/ppncxct.properties b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/ppncxct.properties index b8d517dc4..d148e3960 100644 --- a/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/ppncxct.properties +++ b/spring-cassandra/src/test/resources/org/springframework/cassandra/test/integration/config/xml/ppncxct.properties @@ -1,5 +1,5 @@ cluster.contactPoints=localhost -cluster.port=9042 +cluster.port=@build.cassandra.native_transport_port@ cluster.compression=SNAPPY cluster.deferredInit=true cluster.metricsEnabled=false diff --git a/spring-cassandra/src/test/resources/spring-cassandra.yaml b/spring-cassandra/src/test/resources/spring-cassandra.yaml index 67c59aba4..b81dca685 100644 --- a/spring-cassandra/src/test/resources/spring-cassandra.yaml +++ b/spring-cassandra/src/test/resources/spring-cassandra.yaml @@ -303,11 +303,11 @@ trickle_fsync: false trickle_fsync_interval_in_kb: 10240 # TCP port, for commands and data -storage_port: 7000 +storage_port: ${build.cassandra.storage_port} # SSL port, for encrypted communication. Unused unless enabled in # encryption_options -ssl_storage_port: 7001 +ssl_storage_port: ${build.cassandra.ssl_storage_port} # Address to bind to and tell other Cassandra nodes to connect to. You # _must_ change this if you want multiple nodes to be able to @@ -334,7 +334,7 @@ listen_address: localhost # same as the rpc_address. The port however is different and specified below. start_native_transport: true # port for the CQL native transport to listen for clients on -native_transport_port: 9042 +native_transport_port: ${build.cassandra.native_transport_port} # The minimum and maximum threads for handling requests when the native # transport is used. They are similar to rpc_min_threads and rpc_max_threads, # though the defaults differ slightly. @@ -352,7 +352,7 @@ start_rpc: true # (i.e. it will be based on the configured hostname of the node). rpc_address: localhost # port for Thrift to listen for clients on -rpc_port: 9160 +rpc_port: ${build.cassandra.rpc_port} # enable or disable keepalive on rpc connections rpc_keepalive: true diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/DriverTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/DriverTests.java deleted file mode 100644 index 7ccbdf563..000000000 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/DriverTests.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.springframework.data.cassandra.test.integration.config; - -import java.io.IOException; - -import org.apache.cassandra.exceptions.ConfigurationException; -import org.apache.thrift.transport.TTransportException; -import org.cassandraunit.utils.EmbeddedCassandraServerHelper; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.Session; - -public class DriverTests { - - @BeforeClass - public static void startCassandra() throws IOException, TTransportException, ConfigurationException, - InterruptedException { - EmbeddedCassandraServerHelper.startEmbeddedCassandra("cassandra.yaml"); - } - - @Test - public void test() throws Exception { - - Cluster.Builder builder = Cluster.builder().addContactPoint("127.0.0.1"); - - // builder.withCompression(ProtocolOptions.Compression.SNAPPY); - - Cluster cluster = builder.build(); - - Session session = cluster.connect(); - - session.shutdown(); - - cluster.shutdown(); - - } - - @After - public void clearCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } - - @AfterClass - public static void stopCassandra() { - EmbeddedCassandraServerHelper.stopEmbeddedCassandra(); - } -} diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java index 5cd565bfd..df65d9842 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/TestConfig.java @@ -1,5 +1,6 @@ package org.springframework.data.cassandra.test.integration.config; +import org.springframework.cassandra.test.integration.support.BuildProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.cassandra.config.java.AbstractSpringDataCassandraConfiguration; @@ -18,11 +19,20 @@ import org.springframework.data.cassandra.mapping.CassandraMappingContext; @Configuration public class TestConfig extends AbstractSpringDataCassandraConfiguration { - public static final String keyspaceName = "test"; + public static final BuildProperties PROPS = new BuildProperties(); + public static final int PORT = PROPS.getCassandraPort(); + public static final int RPC_PORT = PROPS.getCassandraRpcPort(); + + public static final String KEYSPACE_NAME = "test"; @Override protected String getKeyspaceName() { - return keyspaceName; + return KEYSPACE_NAME; + } + + @Override + protected int getPort() { + return PORT; } @Bean @@ -32,6 +42,6 @@ public class TestConfig extends AbstractSpringDataCassandraConfiguration { @Bean public CassandraDataOperations cassandraDataTemplate() throws Exception { - return new CassandraDataTemplate(session().getObject(), converter(), keyspaceName); + return new CassandraDataTemplate(session().getObject(), converter(), KEYSPACE_NAME); } } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraAdminTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraAdminTest.java index ff1b8f81e..0b06d0a99 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraAdminTest.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraAdminTest.java @@ -63,7 +63,7 @@ public class CassandraAdminTest { /* * Load data file to creat the test keyspace before we init the template */ - DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:9160"); + DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:" + TestConfig.RPC_PORT); dataLoader.load(new ClassPathYamlDataSet("cassandra-keyspace.yaml")); } @@ -74,7 +74,7 @@ public class CassandraAdminTest { /* * Load data file to creat the test keyspace before we init the template */ - DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:9160"); + DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:" + TestConfig.RPC_PORT); dataLoader.load(new ClassPathYamlDataSet("cassandra-keyspace.yaml")); } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java index bc4bff66c..95da10e4d 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java @@ -40,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cassandra.core.ConsistencyLevel; import org.springframework.cassandra.core.QueryOptions; import org.springframework.cassandra.core.RetryPolicy; +import org.springframework.cassandra.test.integration.support.BuildProperties; import org.springframework.data.cassandra.core.CassandraDataOperations; import org.springframework.data.cassandra.test.integration.config.TestConfig; import org.springframework.data.cassandra.test.integration.table.Book; @@ -65,11 +66,12 @@ public class CassandraDataOperationsTest { private static Logger log = LoggerFactory.getLogger(CassandraDataOperationsTest.class); + private final static BuildProperties PROPS = new BuildProperties(); private final static String CASSANDRA_CONFIG = "cassandra.yaml"; private final static String KEYSPACE_NAME = "test"; private final static String CASSANDRA_HOST = "localhost"; - private final static int CASSANDRA_NATIVE_PORT = 9042; - private final static int CASSANDRA_THRIFT_PORT = 9160; + private final static int CASSANDRA_NATIVE_PORT = PROPS.getCassandraPort(); + private final static int CASSANDRA_THRIFT_PORT = PROPS.getCassandraRpcPort(); @Rule public CassandraCQLUnit cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet("cql-dataload.cql", diff --git a/spring-data-cassandra/src/test/resources/cassandra.yaml b/spring-data-cassandra/src/test/resources/cassandra.yaml index 82fcfc5ad..1fed13912 100644 --- a/spring-data-cassandra/src/test/resources/cassandra.yaml +++ b/spring-data-cassandra/src/test/resources/cassandra.yaml @@ -303,11 +303,11 @@ trickle_fsync: false trickle_fsync_interval_in_kb: 10240 # TCP port, for commands and data -storage_port: 7000 +storage_port: ${build.cassandra.storage_port} # SSL port, for encrypted communication. Unused unless enabled in # encryption_options -ssl_storage_port: 7001 +ssl_storage_port: ${build.cassandra.ssl_storage_port} # Address to bind to and tell other Cassandra nodes to connect to. You # _must_ change this if you want multiple nodes to be able to @@ -334,7 +334,7 @@ listen_address: localhost # same as the rpc_address. The port however is different and specified below. start_native_transport: true # port for the CQL native transport to listen for clients on -native_transport_port: 9042 +native_transport_port: ${build.cassandra.native_transport_port} # The minimum and maximum threads for handling requests when the native # transport is used. They are similar to rpc_min_threads and rpc_max_threads, # though the defaults differ slightly. @@ -352,7 +352,7 @@ start_rpc: true # (i.e. it will be based on the configured hostname of the node). rpc_address: localhost # port for Thrift to listen for clients on -rpc_port: 9160 +rpc_port: ${build.cassandra.rpc_port} # enable or disable keepalive on rpc connections rpc_keepalive: true diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml index c536d25c6..d15cd052d 100644 --- a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml +++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests-context.xml @@ -11,7 +11,7 @@ location="classpath:/org/springframework/data/cassandra/test/integration/config/cassandra.properties" />