package me.prettyprint.cassandra.service.template;
import static org.junit.Assert.*;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.HSuperColumn;
import org.junit.Test;
public class SuperCfTemplateTest extends BaseColumnFamilyTemplateTest {
public void afterTest() {
cluster.truncate(keyspace.getKeyspaceName(), "Super1");
}
@Test
public void testSuperCfInsertReadTemplate() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey1","super1");
sUpdater.setString("sub_col_1", "sub_val_1");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey1", "super1");
assertEquals("sub_val_1",result.getString("super1","sub_col_1"));
sUpdater.deleteSuperColumn();
sTemplate.update(sUpdater);
assertEquals("super1",sUpdater.getCurrentSuperColumn());
result = sTemplate.querySuperColumn("skey1", "super1");
assertFalse(result.hasResults());
}
@Test
public void testSuperCfMultiSc() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey2","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sUpdater.addSuperColumn("super2");
sUpdater.setString("sub2_col_1", "sub2_val_1");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumns("skey2", Arrays.asList("super1","super2"));
assertEquals(2,result.getSuperColumns().size());
/*for (String sName : result.getSuperColumns() ) {
result.getString(sName,"sub1_col_1");
}*/
//assertEquals("sub1_val_1",result.getString("sub1_col_1"));
//assertEquals("sub2_val_1",result.next().getString("sub2_col_1"));
}
@Test
public void testQuerySingleSubColumn() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey3","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sTemplate.update(sUpdater);
HColumn<String,String> myCol = sTemplate.querySingleSubColumn("skey3", "super1", "sub1_col_1", se);
assertEquals("sub1_val_1", myCol.getValue());
}
@Test
public void testQuerySingleSubColumnExtractSuper() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey3","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sUpdater.setString("sub1_col_2", "sub1_val_2");
sTemplate.update(sUpdater);
SuperCfResult<String, String, String> result = sTemplate.querySuperColumns("skey3");
HSuperColumn<String, String, ByteBuffer> superColumn = result.getSuperColumn("super1");
assertNotNull(superColumn);
assertEquals("super1",superColumn.getName());
assertEquals(2,superColumn.getColumns().size());
}
@Test
public void testQuerySingleSubColumnEmpty() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey3","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sTemplate.update(sUpdater);
HColumn<String,String> myCol = sTemplate.querySingleSubColumn("skey3", "super2", "sub1_col_1", se);
assertNull(myCol);
}
@Test
public void testSuperCfInsertReadMultiKey() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("s_multi_key1","super1");
sUpdater.setString("sub_col_1", "sub_val_1");
sUpdater.addKey("s_multi_key2");
sUpdater.addSuperColumn("super1");
sUpdater.setString("sub_col_1", "sub_val_2");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumns(Arrays.asList("s_multi_key1","s_multi_key2"), Arrays.asList("super1"));
assertTrue(result.hasResults());
assertEquals("sub_val_2",result.getString("super1","sub_col_1"));
assertEquals("sub_val_1",result.next().getString("super1","sub_col_1"));
}
@Test
public void testSuperCfInsertReadMultiKeyNoSc() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("s_multi_key1","super1");
sUpdater.setString("sub_col_1", "sub_val_1");
sUpdater.addKey("s_multi_key2");
sUpdater.addSuperColumn("super1");
sUpdater.setString("sub_col_1", "sub_val_2");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumns(Arrays.asList("s_multi_key1","s_multi_key2"));
assertTrue(result.hasResults());
assertEquals("sub_val_2",result.getString("super1","sub_col_1"));
assertEquals("sub_val_1",result.next().getString("super1","sub_col_1"));
}
@Test
public void testSuperCfKeyOnly() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey1","super1");
sUpdater.setString("sub_col_1", "sub_val_1");
sUpdater.addSuperColumn("super2");
sUpdater.setString("sub_col_1", "sub_val_2");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumns("skey1");
assertEquals(2, result.getSuperColumns().size());
assertTrue(result.hasResults());
result = sTemplate.querySuperColumns("skey1-non-existing-key");
assertNull(result.getActiveSuperColumn());
}
@Test
public void testSuperCfNoResults() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
assertFalse(sTemplate.querySuperColumns("no_results").hasResults());
}
@Test
public void testDeleteSubColumns() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey3","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sUpdater.setString("sub1_col_2", "sub1_val_2");
sUpdater.setString("sub1_col_3", "sub1_val_3");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey3","super1");
assertEquals(3, result.getColumnNames().size());
sUpdater.deleteSubColumn("sub1_col_1");
sTemplate.update(sUpdater);
result = sTemplate.querySuperColumn("skey3","super1");
assertEquals(2, result.getColumnNames().size());
}
@Test
public void testTemplateLevelDeleteSuper() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey_del_super","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey_del_super","super1");
assertEquals(1, result.getColumnNames().size());
sTemplate.deleteColumn("skey_del_super", "super1");
result = sTemplate.querySuperColumn("skey_del_super","super1");
assertFalse(result.hasResults());
assertEquals(0, result.getColumnNames().size());
}
@Test
public void testTemplateLevelDeleteRow() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey_row_del","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey_row_del","super1");
assertEquals(1, result.getColumnNames().size());
sTemplate.deleteRow("skey_row_del");
result = sTemplate.querySuperColumns("skey_row_del");
assertFalse(result.hasResults());
assertEquals(0, result.getSuperColumns().size());
}
@Test
public void testTemplateLevelDeleteMiss() {
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey_row_del_miss","super1");
sUpdater.setString("sub1_col_1", "sub1_val_1");
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey_row_del_miss","super1");
assertEquals(1, result.getColumnNames().size());
sTemplate.deleteRow("skey_row_miss_foo");
sTemplate.deleteColumn("skey_row_del", "foo");
result = sTemplate.querySuperColumns("skey_row_del_miss");
assertTrue(result.hasResults());
assertEquals(1, result.getSuperColumns().size());
}
@Test
public void testSuperCfColumnValueTypes() {
final float EPSILON = 0.0000001f;
SuperCfTemplate<String, String, String> sTemplate =
new ThriftSuperCfTemplate<String, String, String>(keyspace, "Super1", se, se, se);
SuperCfUpdater<String,String,String> sUpdater = sTemplate.createUpdater("skey1","super1");
sUpdater.setString("subcolumn1","string value");
sUpdater.setUUID("subcolumn2", UUID.fromString("cf316d50-f7c0-11e1-a21f-0800200c9a66"));
sUpdater.setLong("subcolumn3", 829398278497234L);
sUpdater.setInteger("subcolumn4", 27344);
sUpdater.setFloat("subcolumn5",3.14159265f);
sUpdater.setDouble("subcolumn6",3.14159265358979323846264338327950288);
sUpdater.setBoolean("subcolumn7", true);
sUpdater.setByteArray("subcolumn8", new byte[] {97, 91, 99});
final Date date = new Date();
sUpdater.setDate("subcolumn9", date);
sTemplate.update(sUpdater);
SuperCfResult<String,String,String> result = sTemplate.querySuperColumn("skey1", "super1");
assertEquals("string value",result.getString("subcolumn1"));
assertEquals(UUID.fromString("cf316d50-f7c0-11e1-a21f-0800200c9a66"), result.getUUID("subcolumn2"));
assertEquals(Long.valueOf(829398278497234L), result.getLong("subcolumn3"));
assertEquals(Integer.valueOf(27344), result.getInteger("subcolumn4"));
assertEquals(3.14159265f,result.getFloat("subcolumn5"), EPSILON);
assertEquals(3.14159265358979323846264338327950288, result.getDouble("subcolumn6"), EPSILON);
assertEquals(true, result.getBoolean("subcolumn7"));
assertArrayEquals(new byte[] {97, 91, 99}, result.getByteArray("subcolumn8"));
assertEquals(date, result.getDate("subcolumn9"));
}
}