diff --git a/spring-data-cassandra/pom.xml b/spring-data-cassandra/pom.xml index 01c29f55c..389d94e2b 100644 --- a/spring-data-cassandra/pom.xml +++ b/spring-data-cassandra/pom.xml @@ -127,6 +127,12 @@ test + + commons-io + commons-io + 2.4 + test + diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java index 5c06b1447..5a505d5c4 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/java/AbstractSpringDataCassandraConfiguration.java @@ -68,7 +68,7 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC * The base package to scan for entities annotated with {@link Table} annotations. By default, returns the package * name of {@literal this} (this.getClass().getPackage().getName()). */ - public String getMappingBasePackage() { + public String getEntityBasePackage() { return getClass().getPackage().getName(); } @@ -127,13 +127,13 @@ public abstract class AbstractSpringDataCassandraConfiguration extends AbstractC /** * Scans the mapping base package for entity classes annotated with {@link Table} or {@link Persistent}. * - * @see #getMappingBasePackage() + * @see #getEntityBasePackage() * @return Set<Class<?>> representing the annotated entity classes found. * @throws ClassNotFoundException */ protected Set> getInitialEntitySet() throws ClassNotFoundException { - String basePackage = getMappingBasePackage(); + String basePackage = getEntityBasePackage(); Set> initialEntitySet = new HashSet>(); if (StringUtils.hasText(basePackage)) { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java index e0e5d8586..034982f87 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java @@ -249,7 +249,7 @@ public interface CassandraOperations extends CqlOperations { void deleteById(Class type, Object id); - List selectByIds(Class type, Iterable ids); + List selectBySimpleIds(Class type, Iterable ids); List selectAll(Class type); } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java index 6f5ce78c9..438291ed1 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import org.mortbay.log.Log; import org.springframework.cassandra.core.CqlTemplate; import org.springframework.cassandra.core.QueryOptions; import org.springframework.cassandra.core.SessionCallback; @@ -250,7 +251,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation } @Override - public List selectByIds(Class type, Iterable ids) { + public List selectBySimpleIds(Class type, Iterable ids) { CassandraPersistentEntity entity = mappingContext.getRequiredPersistentEntity(type); @@ -479,7 +480,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation execute(query); } - return entity; // TODO: fix this! + return entity; } protected List batchInsert(List entities, QueryOptions options, boolean asychronously) { @@ -497,8 +498,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation execute(query); } - return entities; // TODO: fix this! You're not supposed to necessarily return the very same entities that went in - // because the database may assign values. + return entities; } /** @@ -525,7 +525,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation execute(query); } - return entities; // TODO: fix this! + return entities; } /** @@ -574,7 +574,7 @@ public class CassandraTemplate extends CqlTemplate implements CassandraOperation execute(query); } - return entity; // TODO: fix this! + return entity; } /** diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKeyClass.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKeyClass.java index c99049bd5..613809e86 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKeyClass.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKeyClass.java @@ -21,6 +21,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.data.annotation.Persistent; + /** * Annotates a type that represents the identity type of another class whose instances are stored in a table. *

@@ -33,5 +35,6 @@ import java.lang.annotation.Target; @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE }) +@Persistent public @interface PrimaryKeyClass { } diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java index c00a5e4f4..0f104af68 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java @@ -106,7 +106,7 @@ public class SimpleCassandraRepository implements Ca @Override public Iterable findAll(Iterable ids) { - return template.selectByIds(entityInformation.getJavaType(), ids); + return template.selectBySimpleIds(entityInformation.getJavaType(), ids); } protected List findAll(Select query) { diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/AbstractSpringDataEmbeddedCassandraIntegrationTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/AbstractSpringDataEmbeddedCassandraIntegrationTest.java index da701f3ff..caf1cb27b 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/AbstractSpringDataEmbeddedCassandraIntegrationTest.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/AbstractSpringDataEmbeddedCassandraIntegrationTest.java @@ -1,14 +1,84 @@ package org.springframework.data.cassandra.test.integration; +import static org.springframework.cassandra.core.keyspace.DropTableSpecification.dropTable; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cassandra.test.integration.AbstractEmbeddedCassandraIntegrationTest; +import org.springframework.core.io.ClassPathResource; +import org.springframework.data.cassandra.core.CassandraOperations; import org.springframework.data.cassandra.test.integration.support.SpringDataBuildProperties; +import org.springframework.data.cassandra.test.integration.template.CassandraDataOperationsTest.Config; +import org.springframework.util.Assert; + +import com.datastax.driver.core.TableMetadata; public class AbstractSpringDataEmbeddedCassandraIntegrationTest extends AbstractEmbeddedCassandraIntegrationTest { - static { - // override necessary superclass statics + public static List SCRIPT; + public static List TABLES; + static { SpringDataBuildProperties props = new SpringDataBuildProperties(); CASSANDRA_NATIVE_PORT = props.getCassandraPort(); } + + public Logger log = LoggerFactory.getLogger(getClass()); + + @Autowired + public CassandraOperations template; + + /** + * Saves all table metadata, then drops & creates all tables. + */ + public void recreateAllTables() { + + saveAllTableMetadata(); + + for (TableMetadata table : TABLES) { + template.execute(dropTable(table.getName())); + template.execute(table.asCQLQuery()); + } + } + + public void saveAllTableMetadata() { + saveAllTableMetadata(false); + } + + /** + * Saves all table metadata statically. + */ + public void saveAllTableMetadata(boolean force) { + + if (TABLES != null && !force) { + return; + } + + TABLES = new ArrayList(template.getSession().getCluster().getMetadata() + .getKeyspace(Config.KEYSPACE_NAME).getTables()); + } + + public List readScriptLines(String resourceName) { + return readScriptLines(resourceName); + } + + /** + * Reads the lines from the script referenced by {@link #RESOURCE}. + */ + public List readScriptLines(String resourceName, boolean force) throws IOException { + + if (SCRIPT != null && !force) { + return SCRIPT; + } + + Assert.hasText(resourceName); + + return SCRIPT = FileUtils.readLines(new ClassPathResource(resourceName).getFile()); + } } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Comment.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Comment.java similarity index 96% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Comment.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Comment.java index f01875f11..30e8b06ca 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Comment.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Comment.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; import java.util.Set; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/CommentPK.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentPK.java similarity index 95% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/CommentPK.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentPK.java index 3a870b9ea..8aa49748e 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/CommentPK.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentPK.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Notification.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Notification.java similarity index 96% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Notification.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Notification.java index 999623fa9..1a4cd4a44 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Notification.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Notification.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/NotificationPK.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/NotificationPK.java similarity index 96% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/NotificationPK.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/NotificationPK.java index 1689860e6..be92429b7 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/NotificationPK.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/NotificationPK.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Post.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Post.java similarity index 97% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Post.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Post.java index 89dcc4cc3..3c841695a 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Post.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Post.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; import java.util.Map; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/PostPK.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/PostPK.java similarity index 96% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/PostPK.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/PostPK.java index fcdd78455..aa913449c 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/PostPK.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/PostPK.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Timeline.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Timeline.java similarity index 95% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Timeline.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Timeline.java index 78d3d6854..18666ea47 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Timeline.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/Timeline.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/TimelinePK.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/TimelinePK.java similarity index 95% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/TimelinePK.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/TimelinePK.java index 1107868f1..ae6e296bb 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/TimelinePK.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/TimelinePK.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.composites; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests.java index 3099814bc..66eb3ee1a 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/config/CassandraNamespaceTests.java @@ -1,38 +1,21 @@ 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.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.data.cassandra.test.integration.AbstractSpringDataEmbeddedCassandraIntegrationTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.Assert; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration -public class CassandraNamespaceTests { +public class CassandraNamespaceTests extends AbstractSpringDataEmbeddedCassandraIntegrationTest { @Autowired private ApplicationContext ctx; - @BeforeClass - public static void startCassandra() throws IOException, TTransportException, ConfigurationException, - InterruptedException { - EmbeddedCassandraServerHelper.startEmbeddedCassandra("spring-cassandra.yaml"); - } - - @After - public void clearCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } - @Test public void test() { Assert.notNull(ctx); 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 9ec75b2bc..f83cc04f4 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.unit.support.Utils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.cassandra.config.java.AbstractSpringDataCassandraConfiguration; @@ -23,7 +24,7 @@ public class TestConfig extends AbstractSpringDataCassandraConfiguration { public static final int PORT = PROPS.getCassandraPort(); public static final int RPC_PORT = PROPS.getCassandraRpcPort(); - public static final String KEYSPACE_NAME = "test"; + public static final String KEYSPACE_NAME = Utils.randomKeyspaceName(); @Override protected String getKeyspaceName() { diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java index b5f2e88d6..69dda8e6b 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java @@ -19,13 +19,8 @@ import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.when; -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.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -33,6 +28,7 @@ import org.mockito.runners.MockitoJUnitRunner; import org.springframework.context.ApplicationContext; import org.springframework.data.cassandra.mapping.BasicCassandraPersistentEntity; import org.springframework.data.cassandra.mapping.Table; +import org.springframework.data.cassandra.test.integration.AbstractSpringDataEmbeddedCassandraIntegrationTest; import org.springframework.data.util.ClassTypeInformation; /** @@ -41,17 +37,11 @@ import org.springframework.data.util.ClassTypeInformation; * @author Alex Shvid */ @RunWith(MockitoJUnitRunner.class) -public class BasicCassandraPersistentEntityIntegrationTests { +public class BasicCassandraPersistentEntityIntegrationTests extends AbstractSpringDataEmbeddedCassandraIntegrationTest { @Mock ApplicationContext context; - @BeforeClass - public static void startCassandra() throws IOException, TTransportException, ConfigurationException, - InterruptedException { - EmbeddedCassandraServerHelper.startEmbeddedCassandra("spring-cassandra.yaml"); - } - @Test public void subclassInheritsAtDocumentAnnotation() { @@ -84,11 +74,6 @@ public class BasicCassandraPersistentEntityIntegrationTests { assertThat(entity.getTableName(), is(bean.tableName)); } - @After - public void clearCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } - @Table("messages") static class Message { diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java index 8820a6608..2de6a2a07 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java @@ -68,7 +68,7 @@ public class UserRepositoryJavaConfigIntegrationTests extends AbstractSpringData } @Override - public String getMappingBasePackage() { + public String getEntityBasePackage() { return User.class.getPackage().getName(); } } diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java similarity index 96% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java index 9ba3dd3b9..95fcfd700 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/Book.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.simpletons; import org.springframework.data.cassandra.mapping.PrimaryKey; import org.springframework.data.cassandra.mapping.Table; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/LogEntry.java similarity index 95% rename from spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java rename to spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/LogEntry.java index 3ba920b46..b40d9f379 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/simpletons/LogEntry.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.cassandra.test.integration.table; +package org.springframework.data.cassandra.test.integration.simpletons; import java.util.Date; diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/ManualDataSet.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/ManualDataSet.java new file mode 100644 index 000000000..805b9db13 --- /dev/null +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/ManualDataSet.java @@ -0,0 +1,22 @@ +package org.springframework.data.cassandra.test.integration.support; + +import org.cassandraunit.dataset.commons.AbstractCommonsParserDataSet; +import org.cassandraunit.dataset.commons.ParsedKeyspace; + +public class ManualDataSet extends AbstractCommonsParserDataSet { + + private String keyspaceName; + private ParsedKeyspace pks; + + public ManualDataSet(String keyspaceName) { + this.keyspaceName = keyspaceName; + + pks = new ParsedKeyspace(); + pks.setName(this.keyspaceName); + } + + @Override + protected ParsedKeyspace getParsedKeyspace() { + return pks; + } +} 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 deleted file mode 100644 index d5ccd5d79..000000000 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraAdminTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2011-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.cassandra.test.integration.template; - -import java.io.IOException; - -import org.apache.cassandra.exceptions.ConfigurationException; -import org.apache.thrift.transport.TTransportException; -import org.cassandraunit.DataLoader; -import org.cassandraunit.dataset.yaml.ClassPathYamlDataSet; -import org.cassandraunit.utils.EmbeddedCassandraServerHelper; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cassandra.core.CqlOperations; -import org.springframework.context.ApplicationContext; -import org.springframework.data.cassandra.test.integration.config.TestConfig; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - -/** - * @author David Webb - * - */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class CassandraAdminTest { - - @Autowired - private CqlOperations cassandraTemplate; - - @Mock - ApplicationContext context; - - @BeforeClass - public static void startCassandra() throws IOException, TTransportException, ConfigurationException, - InterruptedException { - EmbeddedCassandraServerHelper.startEmbeddedCassandra("spring-cassandra.yaml"); - - /* - * Load data file to creat the test keyspace before we init the template - */ - DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:" + TestConfig.RPC_PORT); - dataLoader.load(new ClassPathYamlDataSet("cassandra-keyspace.yaml")); - - } - - @Before - public void setupKeyspace() { - - /* - * Load data file to creat the test keyspace before we init the template - */ - DataLoader dataLoader = new DataLoader("Test Cluster", "localhost:" + TestConfig.RPC_PORT); - dataLoader.load(new ClassPathYamlDataSet("cassandra-keyspace.yaml")); - - } - - @Test - public void alterTableTest() { - - // cassandraTemplate.alterTable(UserAlter.class); - - } - - @Test - public void dropTableTest() { - - // cassandraTemplate.dropTable(User.class); - // cassandraTemplate.dropTable("comments"); - - } - - @After - public void clearCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } - - @AfterClass - public static void stopCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } -} 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 b32298259..173729928 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 @@ -15,22 +15,18 @@ */ package org.springframework.data.cassandra.test.integration.template; +import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace; +import static org.springframework.cassandra.core.keyspace.DropTableSpecification.dropTable; + import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.UUID; -import org.apache.cassandra.exceptions.ConfigurationException; -import org.apache.thrift.transport.TTransportException; -import org.cassandraunit.CassandraCQLUnit; -import org.cassandraunit.DataLoader; -import org.cassandraunit.dataset.cql.ClassPathCQLDataSet; -import org.cassandraunit.dataset.yaml.ClassPathYamlDataSet; -import org.cassandraunit.utils.EmbeddedCassandraServerHelper; -import org.junit.After; +import org.apache.commons.io.FileUtils; import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Rule; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; @@ -39,14 +35,19 @@ 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.core.keyspace.CreateKeyspaceSpecification; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.data.cassandra.config.SchemaAction; import org.springframework.data.cassandra.core.CassandraOperations; +import org.springframework.data.cassandra.test.integration.AbstractSpringDataEmbeddedCassandraIntegrationTest; import org.springframework.data.cassandra.test.integration.config.TestConfig; -import org.springframework.data.cassandra.test.integration.support.SpringDataBuildProperties; -import org.springframework.data.cassandra.test.integration.table.Book; +import org.springframework.data.cassandra.test.integration.simpletons.Book; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.datastax.driver.core.TableMetadata; import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; @@ -57,36 +58,31 @@ import com.datastax.driver.core.querybuilder.Select; * */ @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class CassandraDataOperationsTest { +@ContextConfiguration +public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassandraIntegrationTest { - @Autowired - private CassandraOperations template; + @Configuration + public static class Config extends TestConfig { - private static Logger log = LoggerFactory.getLogger(CassandraDataOperationsTest.class); + @Override + public SchemaAction getSchemaAction() { + return SchemaAction.RECREATE; + } - public static final SpringDataBuildProperties PROPS = new SpringDataBuildProperties(); - private final static String CASSANDRA_CONFIG = "spring-cassandra.yaml"; - private final static String KEYSPACE_NAME = "test"; - private final static String CASSANDRA_HOST = "localhost"; - private final static int CASSANDRA_NATIVE_PORT = PROPS.getCassandraPort(); - private final static int CASSANDRA_THRIFT_PORT = PROPS.getCassandraRpcPort(); + @Override + protected List getKeyspaceCreations() { + return Arrays.asList(createKeyspace().name(getKeyspaceName()).withSimpleReplication()); + } - @Rule - public CassandraCQLUnit cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet("cql-dataload.cql", - KEYSPACE_NAME), CASSANDRA_CONFIG, CASSANDRA_HOST, CASSANDRA_NATIVE_PORT); + @Override + public String getEntityBasePackage() { + return Book.class.getPackage().getName(); + } + } - @BeforeClass - public static void startCassandra() throws IOException, TTransportException, ConfigurationException, - InterruptedException { - - EmbeddedCassandraServerHelper.startEmbeddedCassandra(CASSANDRA_CONFIG); - - /* - * Load data file to creat the test keyspace before we init the template - */ - DataLoader dataLoader = new DataLoader("Test Cluster", CASSANDRA_HOST + ":" + CASSANDRA_THRIFT_PORT); - dataLoader.load(new ClassPathYamlDataSet("cassandra-keyspace.yaml")); + @Before + public void before() throws IOException { + recreateAllTables(); } @Test @@ -665,9 +661,4 @@ public class CassandraDataOperationsTest { Assert.assertEquals(count, template.count(Book.class)); } - - @After - public void clearCassandra() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } } diff --git a/spring-data-cassandra/src/test/resources/cassandra-keyspace.yaml b/spring-data-cassandra/src/test/resources/cassandra-keyspace.yaml index a0e13da6e..3442321c5 100644 --- a/spring-data-cassandra/src/test/resources/cassandra-keyspace.yaml +++ b/spring-data-cassandra/src/test/resources/cassandra-keyspace.yaml @@ -1,3 +1,3 @@ -name: test +name: ks9487fb2da1a541e39a05e5545d64411a replicationFactor: 1 strategy: org.apache.cassandra.locator.SimpleStrategy \ No newline at end of file