package com.rayo.storage.cassandra; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.scale7.cassandra.pelops.Cluster; import org.scale7.cassandra.pelops.KeyspaceManager; import org.scale7.cassandra.pelops.Pelops; import com.rayo.server.storage.BaseDatastoreTest; import com.rayo.storage.test.EmbeddedCassandraTestServer; public class CassandraDatastoreTest extends BaseDatastoreTest { // tests use a different port so if there is any existing Cassandra instance // nothing bad will happen public static final String CASSANDRA_TESTING_PORT = "9164"; private DefaultCassandraPrimer primer = createCassandraPrimer(); @BeforeClass public static void startCassandraServer() throws Exception { EmbeddedCassandraTestServer.start(); } @Before public void setup() throws Exception { store = new CassandraDatastore(); ((CassandraDatastore)store).setPort(CASSANDRA_TESTING_PORT); ((CassandraDatastore)store).getSchemaHandler().setWaitForSyncing(false); ((CassandraDatastore)store).init(); } /* @Test public void testCreateDefaultApplication() throws Exception { // This test uses a different data store to test a different set of properties CassandraDatastore datastore = new CassandraDatastore(); datastore.setPrimer(new DefaultCassandraPrimer()); datastore.setPort(CASSANDRA_TESTING_PORT); datastore.init(); assertNotNull(datastore.getApplication("voxeo")); } */ @Test public void testDoNotCreateDefaultApplication() throws Exception { // This test uses a different data store to test a different set of properties CassandraDatastore datastore = new CassandraDatastore(); datastore.setPort(CASSANDRA_TESTING_PORT); datastore.init(); String jid = primer.getDefaultRayoUsername() + "@" + primer.getXmppServer(); assertNull(datastore.getApplication(jid)); } @Test public void testOverrideSchema() throws Exception { // This test uses a different data store to test a different set of properties CassandraDatastore datastore = new CassandraDatastore(); datastore.setPort(CASSANDRA_TESTING_PORT); datastore.setPrimer(primer); datastore.setPrimeTestData(true); datastore.init(); String jid = primer.getDefaultRayoUsername() + "@" + primer.getXmppServer(); datastore.storeAddress("127.0.0.1", jid); assertNotNull(datastore.getApplicationForAddress("127.0.0.1")); datastore.init(); assertNull(datastore.getApplicationForAddress("127.0.0.1")); } @Test public void testDoNotOverrideSchema() throws Exception { // This test uses a different data store to test a different set of properties CassandraDatastore datastore = new CassandraDatastore(); datastore.setPort(CASSANDRA_TESTING_PORT); datastore.setPrimer(primer); datastore.setPrimeTestData(true); datastore.init(); String jid = primer.getDefaultRayoUsername() + "@" + primer.getXmppServer(); datastore.storeAddress("127.0.0.1", jid); assertNotNull(datastore.getApplicationForAddress("127.0.0.1")); datastore.setOverrideExistingSchema(false); datastore.init(); assertNotNull(datastore.getApplicationForAddress("127.0.0.1")); } @Test public void testSchemaCreatedIfDoesNotExist() throws Exception { // use schema handler to first drop any existing rayo schema CassandraSchemaHandler schemaHandler = new CassandraSchemaHandler(); Cluster cluster = new Cluster("localhost", Integer.parseInt(CASSANDRA_TESTING_PORT), false); KeyspaceManager keyspaceManager = Pelops.createKeyspaceManager(cluster); schemaHandler.dropSchema("rayo", keyspaceManager); // This test uses a different data store to test a different set of properties CassandraDatastore datastore = new CassandraDatastore(); datastore.setPort(CASSANDRA_TESTING_PORT); datastore.setOverrideExistingSchema(false); datastore.setPrimer(primer); datastore.setPrimeTestData(true); datastore.init(); String jid = primer.getDefaultRayoUsername() + "@" + primer.getXmppServer(); assertNotNull(datastore.getApplication(jid)); } private DefaultCassandraPrimer createCassandraPrimer() { DefaultCassandraPrimer primer = new DefaultCassandraPrimer(); primer.setDefaultAppName("voxeo"); primer.setDefaultPlatform("staging"); primer.setDefaultRayoUsername("rayo"); primer.setDialUris("localhost"); primer.setLoadTestAppPrefix("test"); primer.setLoadTestPrismUsername("user"); primer.setXmppServer("xmppserver"); return primer; } }