Author: [email protected]
Date: Fri Feb 17 12:29:32 2012
New Revision: 2098
Log:
[AMDATUCASSANDRA-167] Added a unit test and fixed possible NullPointerException
found with this test
Added:
trunk/amdatu-cassandra/cassandra-client/src/test/java/org/amdatu/cassandra/test/unit/client/mock/CassandraClientTest.java
Modified:
trunk/amdatu-cassandra/cassandra-client/pom.xml
trunk/amdatu-cassandra/cassandra-client/src/main/java/org/amdatu/cassandra/client/service/CassandraClientServiceImpl.java
trunk/amdatu-cassandra/cassandra-client/src/test/java/org/amdatu/cassandra/test/unit/client/mock/EventAdminMock.java
trunk/amdatu-cassandra/test-unit/framework/src/main/java/org/amdatu/cassandra/test/unit/framework/UnitTestFramework.java
Modified: trunk/amdatu-cassandra/cassandra-client/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/cassandra-client/pom.xml (original)
+++ trunk/amdatu-cassandra/cassandra-client/pom.xml Fri Feb 17 12:29:32 2012
@@ -33,6 +33,12 @@
<artifactId>org.amdatu.cassandra.hector</artifactId>
<type>bundle</type>
</dependency>
+ <dependency>
+ <groupId>org.amdatu.cassandra</groupId>
+ <artifactId>org.amdatu.cassandra.test.unit.framework</artifactId>
+ <type>jar</type>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Modified:
trunk/amdatu-cassandra/cassandra-client/src/main/java/org/amdatu/cassandra/client/service/CassandraClientServiceImpl.java
==============================================================================
---
trunk/amdatu-cassandra/cassandra-client/src/main/java/org/amdatu/cassandra/client/service/CassandraClientServiceImpl.java
(original)
+++
trunk/amdatu-cassandra/cassandra-client/src/main/java/org/amdatu/cassandra/client/service/CassandraClientServiceImpl.java
Fri Feb 17 12:29:32 2012
@@ -519,7 +519,8 @@
if (cfDef.getName().equals(cfName)) {
if (!cfDef.getColumnType().getValue().equals(columnType)
||
!equalComparator(cfDef.getComparatorType().getTypeName(), comparatorType)
- ||
!equalComparator(cfDef.getSubComparatorType().getTypeName(),
subComparatorType)) {
+ || !equalComparator(cfDef.getSubComparatorType() !=
null ?
+ cfDef.getSubComparatorType().getTypeName() : null,
subComparatorType)) {
return true;
}
}
Added:
trunk/amdatu-cassandra/cassandra-client/src/test/java/org/amdatu/cassandra/test/unit/client/mock/CassandraClientTest.java
==============================================================================
--- (empty file)
+++
trunk/amdatu-cassandra/cassandra-client/src/test/java/org/amdatu/cassandra/test/unit/client/mock/CassandraClientTest.java
Fri Feb 17 12:29:32 2012
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2010, 2011 The Amdatu Foundation
+ *
+ * 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.amdatu.cassandra.test.unit.client.mock;
+
+import org.amdatu.cassandra.client.CassandraClientService;
+import org.amdatu.cassandra.test.unit.framework.UnitTestFramework;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.cassandra.thrift.CfDef;
+import org.apache.cassandra.thrift.ColumnDef;
+import org.apache.cassandra.thrift.IndexType;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CassandraClientTest {
+ // Logger for this unit test
+ private static final org.apache.log4j.Logger LOG =
org.apache.log4j.Logger.getLogger(CassandraClientTest.class);
+
+ // Test objects
+ private static final String TEST_KS = "TestKS";
+ private static final String TEST_KS_2 = "TestKS2";
+ private static final String TEST_CF = "TestCF";
+ private static final String TEST_CF_2 = "TestCF2";
+
+ private static final String STANDARD = "Standard";
+ private static final String SUPER = "Super";
+ private static final String BYTESTYPE = "BytesType";
+
+ // The Cassandra client service to test
+ private static CassandraClientService m_client;
+
+ @BeforeClass
+ public static void setup() throws Exception {
+ // Setup the test framework. This will remove the work directory and
start Cassandra
+ m_client = UnitTestFramework.setup();
+ }
+
+ @Test
+ public void run() throws Exception {
+ LOG.info("Starting unit tests");
+
+ testKeyspace();
+ testColumnFamily();
+
+ LOG.info("Unit tests finished");
+ }
+
+ private void testKeyspace() {
+ // Test add keyspace (note that the SYSTEM keyspace is always
available)
+ Assert.assertEquals(m_client.getKeyspaces().size(), 1);
+ Assert.assertTrue(m_client.addKeyspace(TEST_KS));
+ m_client.setReplicationFactor(1);
+ Assert.assertTrue(m_client.keyspaceExists(TEST_KS));
+ Assert.assertEquals(m_client.getKeyspaces().size(), 2);
+
+ // Add keyspace with RF
+ Assert.assertTrue(m_client.addKeyspace(TEST_KS_2, 1));
+ Assert.assertTrue(m_client.keyspaceExists(TEST_KS_2));
+ Assert.assertEquals(m_client.getKeyspaces().size(), 3);
+
+ // Drop them both and re-create the first keyspace
+ Assert.assertTrue(m_client.dropKeyspace(TEST_KS));
+ Assert.assertTrue(m_client.dropKeyspace(TEST_KS_2));
+ Assert.assertTrue(m_client.addKeyspace(TEST_KS));
+ Assert.assertTrue(m_client.keyspaceExists(TEST_KS));
+ Assert.assertEquals(m_client.getKeyspaces().size(), 2);
+ }
+
+ private void testColumnFamily() throws Exception {
+ Assert.assertEquals(m_client.getColumnFamilies(TEST_KS).size(), 0);
+
+ // Simple case
+ Assert.assertTrue(m_client.addColumnFamily(TEST_KS, TEST_CF, STANDARD,
BYTESTYPE, null));
+
Assert.assertTrue(m_client.getColumnFamilies(TEST_KS).contains(TEST_CF));
+ Assert.assertTrue(m_client.columnFamilyExists(TEST_KS, TEST_CF));
+ Assert.assertEquals(m_client.getColumnType(TEST_KS, TEST_CF),
STANDARD);
+ CfDef cfDef = m_client.getColumnFamily(TEST_KS, TEST_CF);
+ Assert.assertEquals(STANDARD, cfDef.getColumn_type());
+ Assert.assertTrue(cfDef.getComparator_type().endsWith(BYTESTYPE));
+ Assert.assertEquals(TEST_KS, cfDef.getKeyspace());
+ Assert.assertEquals(TEST_CF, cfDef.getName());
+ Assert.assertNull(cfDef.getSubcomparator_type());
+ Assert.assertFalse(m_client.isColumnFamilyChanged(TEST_KS, TEST_CF,
STANDARD, BYTESTYPE, null));
+ Assert.assertTrue(m_client.isColumnFamilyChanged(TEST_KS, TEST_CF,
SUPER, BYTESTYPE, BYTESTYPE));
+
+ // Now try a complex update
+ cfDef.setRead_repair_chance(0.37);
+ ByteBuffer name = ByteBuffer.wrap("indexcol".getBytes("UTF-8"));
+ ColumnDef cDef = new ColumnDef(name,
"org.apache.cassandra.db.marshal.UTF8Type");
+ cDef.setIndex_name("indexname");
+ cDef.setIndex_type(IndexType.KEYS);
+ List<ColumnDef> cDefs = new ArrayList<ColumnDef>();
+ cDefs.add(cDef);
+ cfDef.setColumn_metadata(cDefs);
+ m_client.updateColumnFamily(TEST_KS, cfDef);
+ CfDef newCfDef = m_client.getColumnFamily(TEST_KS, TEST_CF);
+ Assert.assertTrue(newCfDef.getRead_repair_chance() == 0.37);
+ List<ColumnDef> newCDefs = newCfDef.getColumn_metadata();
+ Assert.assertTrue(newCDefs.size() == 1);
+ Assert.assertEquals(new String(newCDefs.get(0).getName(), "UTF-8"),
"indexcol");
+ Assert.assertEquals(newCDefs.get(0).getIndex_name(), "indexname");
+ Assert.assertEquals(newCDefs.get(0).getIndex_type(), IndexType.KEYS);
+
+ // Try to remove the index
+ newCfDef.setColumn_metadata(null);
+ m_client.updateColumnFamily(TEST_KS, newCfDef);
+ newCDefs = m_client.getColumnFamily(TEST_KS,
TEST_CF).getColumn_metadata();
+ Assert.assertEquals(newCDefs.size(), 0);
+
+ // Complex case
+ CfDef scfDef = new CfDef(TEST_KS, TEST_CF_2);
+ scfDef.setColumn_type(SUPER);
+ scfDef.setComparator_type(BYTESTYPE);
+ scfDef.setSubcomparator_type(BYTESTYPE);
+ List<ColumnDef> scDefs = new ArrayList<ColumnDef>();
+ scDefs.add(new ColumnDef(name,
"org.apache.cassandra.db.marshal.UTF8Type"));
+ scfDef.setColumn_metadata(scDefs);
+ Assert.assertTrue(m_client.addColumnFamily(TEST_KS, scfDef));
+
Assert.assertTrue(m_client.getColumnFamilies(TEST_KS).contains(TEST_CF_2));
+ Assert.assertTrue(m_client.columnFamilyExists(TEST_KS, TEST_CF_2));
+ Assert.assertEquals(m_client.getColumnType(TEST_KS, TEST_CF_2), SUPER);
+ newCfDef = m_client.getColumnFamily(TEST_KS, TEST_CF_2);
+ newCDefs = newCfDef.getColumn_metadata();
+ Assert.assertTrue(newCDefs.size() == 1);
+ Assert.assertEquals(new String(newCDefs.get(0).getName(), "UTF-8"),
"indexcol");
+ Assert.assertFalse(m_client.isColumnFamilyChanged(TEST_KS, TEST_CF_2,
SUPER, BYTESTYPE, BYTESTYPE));
+ Assert.assertTrue(m_client.isColumnFamilyChanged(TEST_KS, TEST_CF_2,
STANDARD, BYTESTYPE, null));
+ }
+}
Modified:
trunk/amdatu-cassandra/test-unit/framework/src/main/java/org/amdatu/cassandra/test/unit/framework/UnitTestFramework.java
==============================================================================
---
trunk/amdatu-cassandra/test-unit/framework/src/main/java/org/amdatu/cassandra/test/unit/framework/UnitTestFramework.java
(original)
+++
trunk/amdatu-cassandra/test-unit/framework/src/main/java/org/amdatu/cassandra/test/unit/framework/UnitTestFramework.java
Fri Feb 17 12:29:32 2012
@@ -47,7 +47,7 @@
public class UnitTestFramework {
private static boolean INITIALIZED = false;
- private static CassandraClientServiceImpl m_daemonService;
+ private static CassandraClientServiceImpl m_client;
private static CassandraDaemon m_daemon = null;
private static LogService m_logService = null;
@@ -57,7 +57,7 @@
removeWorkDir();
createDaemon();
}
- return m_daemonService;
+ return m_client;
}
private static void removeWorkDir() throws IOException {
@@ -85,13 +85,13 @@
startThread.join();
m_logService = createLogService();
- m_daemonService = new CassandraClientServiceImpl();
- m_daemonService.setLogService(m_logService);
- m_daemonService.setConfiguration(createConfigurationService());
- m_daemonService.setEventAdmin(new EventAdminMock());
- m_daemonService.start();
+ m_client = new CassandraClientServiceImpl();
+ m_client.setLogService(m_logService);
+ m_client.setConfiguration(createConfigurationService());
+ m_client.setEventAdmin(new EventAdminMock());
+ m_client.start();
- return m_daemonService;
+ return m_client;
}
public static LogService createLogService() {
@@ -119,7 +119,7 @@
}
public static CassandraClientService getDaemonService() {
- return m_daemonService;
+ return m_client;
}
public static class CassandraDaemonStartThread extends Thread {
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits