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

Reply via email to