Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.netflix.astyanax.cql.test.CFStandardTests Maven / Gradle / Ivy
package com.netflix.astyanax.cql.test;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import junit.framework.Assert;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.OperationResult;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.model.ColumnList;
import com.netflix.astyanax.model.ColumnSlice;
import com.netflix.astyanax.model.ConsistencyLevel;
import com.netflix.astyanax.model.CqlResult;
import com.netflix.astyanax.model.Row;
import com.netflix.astyanax.model.Rows;
import com.netflix.astyanax.query.ColumnQuery;
import com.netflix.astyanax.query.RowQuery;
import com.netflix.astyanax.serializers.ObjectSerializer;
import com.netflix.astyanax.serializers.StringSerializer;
import com.netflix.astyanax.util.RangeBuilder;
public class CFStandardTests extends KeyspaceTests {
private static final Logger LOG = Logger.getLogger(CFStandardTests.class);
public static ColumnFamily CF_STANDARD1 = ColumnFamily
.newColumnFamily(
"Standard1",
StringSerializer.get(),
StringSerializer.get());
public static ColumnFamily CF_STANDARD2 = ColumnFamily
.newColumnFamily(
"Standard2",
StringSerializer.get(),
StringSerializer.get());
private static ColumnFamily CF_USER_INFO = ColumnFamily.newColumnFamily(
"UserInfo", // Column Family Name
StringSerializer.get(), // Key Serializer
StringSerializer.get()); // Column Serializer
@BeforeClass
public static void init() throws Exception {
initContext();
keyspace.createColumnFamily(CF_STANDARD1, null);
keyspace.createColumnFamily(CF_STANDARD2, null);
keyspace.createColumnFamily(CF_USER_INFO, null);
CF_STANDARD1.describe(keyspace);
CF_STANDARD2.describe(keyspace);
CF_USER_INFO.describe(keyspace);
}
@AfterClass
public static void tearDown() throws Exception {
keyspace.dropColumnFamily(CF_STANDARD1);
keyspace.dropColumnFamily(CF_STANDARD2);
keyspace.dropColumnFamily(CF_USER_INFO);
}
@Test
public void testSerializedClassValue() throws Exception {
UserInfo smo = new UserInfo();
smo.setLastName("Landau");
smo.setFirstName("Eran");
ByteBuffer bb = ObjectSerializer.get().toByteBuffer(smo);
keyspace.prepareColumnMutation(CF_STANDARD1, "Key_SerializeTest",
"Column1").putValue(bb, null).execute();
UserInfo smo2 = (UserInfo) keyspace.prepareQuery(CF_STANDARD1)
.getKey("Key_SerializeTest").getColumn("Column1").execute()
.getResult().getValue(ObjectSerializer.get());
Assert.assertEquals(smo, smo2);
}
@Test
public void testSingleOps() throws Exception {
String key = "SingleOpsTest";
Random prng = new Random();
// Set a string value
{
String column = "StringColumn";
String value = RandomStringUtils.randomAlphanumeric(32);
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
ColumnQuery query = keyspace.prepareQuery(CF_STANDARD1).getKey(key).getColumn(column);
String v = query.execute().getResult().getStringValue();
Assert.assertEquals(value, v);
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult()
.getStringValue();
Assert.fail();
} catch (RuntimeException e) {
} catch (NotFoundException e) {
} catch (ConnectionException e) {
e.printStackTrace();
Assert.fail();
}
}
// Set a byte value
{
String column = "ByteColumn";
byte value = (byte) prng.nextInt(Byte.MAX_VALUE);
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
byte v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getByteValue();
Assert.assertEquals(value, v);
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
// verify column gone
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getByteValue();
Assert.fail();
} catch (NullPointerException e) {
} catch (NotFoundException e) {
// expected
}
}
// Set a short value
{
String column = "ShortColumn";
short value = (short) prng.nextInt(Short.MAX_VALUE);
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
short v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getShortValue();
Assert.assertEquals(value, v);
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
// verify column gone
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getShortValue();
Assert.fail();
} catch (NullPointerException e) {
// expected
} catch (NotFoundException e) {
// expected
}
}
// Set a int value
{
String column = "IntColumn";
int value = prng.nextInt();
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
int v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getIntegerValue();
Assert.assertEquals(value, v);
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
// verify column gone
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getIntegerValue();
Assert.fail();
} catch (NullPointerException e) {
// expected
} catch (NotFoundException e) {
// expected
}
}
// Set a long value
{
String column = "LongColumn";
long value = prng.nextLong();
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
long v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getLongValue();
Assert.assertEquals(value, v);
// get as integer should fail
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult()
.getIntegerValue();
Assert.fail();
} catch (Exception e) {
// expected
}
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
// verify column gone
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getLongValue();
Assert.fail();
} catch (NullPointerException e) {
// expected
} catch (NotFoundException e) {
// expected
}
}
// Set a float value
{
String column = "FloatColumn";
float value = prng.nextFloat();
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
float v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getFloatValue();
Assert.assertEquals(value, v);
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
// verify column gone
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getFloatValue();
Assert.fail();
} catch (NullPointerException e) {
// expected
} catch (NotFoundException e) {
// expected
}
}
// Set a double value
{
String column = "DoubleColumn";
double value = prng.nextDouble();
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.putValue(value, null).execute();
// Read
double v = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult().getDoubleValue();
Assert.assertEquals(value, v);
// get as integer should fail
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult()
.getIntegerValue();
Assert.fail();
} catch (Exception e) {
// expected
}
// Delete
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.deleteColumn().execute();
try {
keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult()
.getDoubleValue();
Assert.fail();
} catch (NullPointerException e) {
// expected
} catch (NotFoundException e) {
} catch (ConnectionException e) {
Assert.fail();
}
}
// Set long column with timestamp
{
String column = "TimestampColumn";
long value = prng.nextLong();
// Set
keyspace.prepareColumnMutation(CF_STANDARD1, key, column)
.withTimestamp(100)
.putValue(value, null)
.execute();
// Read
Column c = keyspace.prepareQuery(CF_STANDARD1).getKey(key)
.getColumn(column).execute().getResult();
Assert.assertEquals(100, c.getTimestamp());
}
}
@Test
public void testEmptyColumn() {
ColumnListMutation mutation = keyspace.prepareMutationBatch().withRow(CF_STANDARD1, "ABC");
try {
mutation.putColumn(null, 1L);
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
try {
mutation.putColumn("", 1L);
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
try {
mutation.deleteColumn("");
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
try {
mutation.deleteColumn(null);
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
}
@Test
public void testCqlCount() throws Exception {
LOG.info("CQL Test");
OperationResult> result = keyspace
.prepareQuery(CF_STANDARD1)
.withCql("SELECT count(*) FROM astyanaxunittests.standard1 where KEY='A';")
.execute();
long count = result.getResult().getNumber();
LOG.info("CQL Count: " + count);
Assert.assertTrue(0 <= count);
}
@Test
public void testGetSingleColumn() throws Exception {
keyspace.prepareColumnMutation(CF_STANDARD1, "A", "a").putValue(1, null).execute();
Column column = keyspace.prepareQuery(CF_STANDARD1).getRow("A").getColumn("a").execute().getResult();
Assert.assertNotNull(column);
Assert.assertEquals(1, column.getIntegerValue());
}
@Test
public void testGetSingleKeyNotExists() throws Exception {
Column column = keyspace.prepareQuery(CF_STANDARD1).getRow("AA").getColumn("ab").execute().getResult();
Assert.assertNull(column);
}
@Test
public void testFunctionalQuery() throws Exception {
MutationBatch m = keyspace.prepareMutationBatch();
for (char keyName = 'A'; keyName <= 'Z'; keyName++) {
String rowKey = Character.toString(keyName);
ColumnListMutation cfmStandard = m.withRow(CF_STANDARD1, rowKey);
for (char cName = 'a'; cName <= 'z'; cName++) {
cfmStandard.putColumn(Character.toString(cName),
(int) (cName - 'a') + 1, null);
}
m.withCaching(true);
m.execute();
m.discardMutations();
}
OperationResult> r1 = keyspace
.prepareQuery(CF_STANDARD1).getKey("A").execute();
Assert.assertTrue(26 <= r1.getResult().size());
}
@Test
public void testNullKeyInMutation() throws Exception {
try {
keyspace.prepareMutationBatch().withRow(CF_STANDARD1, null).putColumn("abc", "def");
Assert.fail();
}
catch (Exception e) {
}
}
@Test
public void testColumnSlice() throws ConnectionException {
OperationResult> r1 = keyspace
.prepareQuery(CF_STANDARD1).getKey("A")
.withColumnSlice("a", "b").execute();
Assert.assertEquals(2, r1.getResult().size());
}
@Test
public void testColumnRangeSlice() throws ConnectionException {
OperationResult> r1 = keyspace
.prepareQuery(CF_STANDARD1)
.getKey("A")
.withColumnRange(
new RangeBuilder().setStart("a").setEnd("b")
.setLimit(5).build()).execute();
Assert.assertEquals(2, r1.getResult().size());
OperationResult> r2 = keyspace
.prepareQuery(CF_STANDARD1).getKey("A")
.withColumnRange("a", null, false, 5).execute();
Assert.assertEquals(5, r2.getResult().size());
Assert.assertEquals("a", r2.getResult().getColumnByIndex(0).getName());
ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(new byte[0]);
OperationResult> r3 = keyspace
.prepareQuery(CF_STANDARD1).getKey("A")
.withColumnRange(EMPTY_BUFFER, EMPTY_BUFFER, true, 5).execute();
Assert.assertEquals(5, r3.getResult().size());
Assert.assertEquals("z", r3.getResult().getColumnByIndex(0).getName());
}
@Test
public void testGetSingleColumnNotExists() throws ConnectionException {
Column column = keyspace.prepareQuery(CF_STANDARD1).getRow("A").getColumn("DoesNotExist").execute().getResult();
Assert.assertNull(column);
}
@Test
public void testGetSingleColumnNotExistsAsync() {
Future>> future = null;
try {
future = keyspace.prepareQuery(CF_STANDARD1).getKey("A")
.getColumn("DoesNotExist").executeAsync();
future.get(1000, TimeUnit.MILLISECONDS);
} catch (ConnectionException e) {
LOG.info("ConnectionException: " + e.getMessage());
Assert.fail();
} catch (InterruptedException e) {
LOG.info(e.getMessage());
Assert.fail();
} catch (ExecutionException e) {
if (e.getCause() instanceof NotFoundException)
LOG.info(e.getCause().getMessage());
else {
Assert.fail(e.getMessage());
}
} catch (TimeoutException e) {
future.cancel(true);
LOG.info(e.getMessage());
Assert.fail();
}
}
@Test
public void testGetSingleKey() throws ConnectionException {
for (char key = 'A'; key <= 'Z'; key++) {
String keyName = Character.toString(key);
OperationResult> result = keyspace.prepareQuery(CF_STANDARD1).getKey(keyName).execute();
Assert.assertNotNull(result.getResult());
Assert.assertFalse(result.getResult().isEmpty());
}
}
@Test
public void testGetSingleKeyAsync() throws Exception {
Future>> future = keyspace.prepareQuery(CF_STANDARD1).getKey("A").executeAsync();
ColumnList result = future.get(1000, TimeUnit.MILLISECONDS).getResult();
Assert.assertFalse(result.isEmpty());
}
@Test
public void testGetAllKeysRoot() throws ConnectionException {
LOG.info("Starting testGetAllKeysRoot...");
List keys = new ArrayList();
for (char key = 'A'; key <= 'Z'; key++) {
String keyName = Character.toString(key);
keys.add(keyName);
}
OperationResult> result = keyspace
.prepareQuery(CF_STANDARD1)
.getKeySlice(keys.toArray(new String[keys.size()]))
.execute();
Assert.assertEquals(26, result.getResult().size());
Row row;
row = result.getResult().getRow("A");
Assert.assertEquals("A", row.getKey());
row = result.getResult().getRow("B");
Assert.assertEquals("B", row.getKey());
row = result.getResult().getRow("NonExistent");
Assert.assertNull(row);
row = result.getResult().getRowByIndex(10);
Assert.assertEquals("K", row.getKey());
LOG.info("... testGetAllKeysRoot");
}
@Test
public void testEmptyRowKey() {
try {
keyspace.prepareMutationBatch().withRow(CF_STANDARD1, "");
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
try {
keyspace.prepareMutationBatch().withRow(CF_STANDARD1, null);
Assert.fail();
}
catch (Exception e) {
LOG.info(e.getMessage());
}
}
@Test
public void testGetColumnSlice() throws ConnectionException {
LOG.info("Starting testGetColumnSlice...");
OperationResult> result = keyspace
.prepareQuery(CF_STANDARD1)
.getKey("A")
.withColumnSlice(
new ColumnSlice("c", "h").setLimit(5))
.execute();
Assert.assertNotNull(result.getResult());
Assert.assertEquals(5, result.getResult().size());
}
@Test
public void testGetAllKeysPath() throws ConnectionException {
LOG.info("Starting testGetAllKeysPath...");
List keys = new ArrayList();
for (char key = 'A'; key <= 'Z'; key++) {
String keyName = Character.toString(key);
keys.add(keyName);
}
OperationResult> result = keyspace
.prepareQuery(CF_STANDARD1)
.getKeySlice(keys.toArray(new String[keys.size()]))
.execute();
for (Row row : result.getResult()) {
System.out.println(row.getColumns().size());
}
OperationResult> counts = keyspace
.prepareQuery(CF_STANDARD1)
.getKeySlice(keys.toArray(new String[keys.size()]))
.getColumnCounts()
.execute();
Assert.assertEquals(26, counts.getResult().size());
for (Entry count : counts.getResult().entrySet()) {
Assert.assertEquals(new Integer(26), count.getValue());
}
LOG.info("Starting testGetAllKeysPath...");
}
public static class UserInfo implements Serializable {
private static final long serialVersionUID = 6366200973810770033L;
private String firstName;
private String lastName;
public UserInfo() {
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return this.firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return this.lastName;
}
public boolean equals(Object other) {
UserInfo smo = (UserInfo) other;
return firstName.equals(smo.firstName)
&& lastName.equals(smo.lastName);
}
}
@Test
public void testHasValue() throws Exception {
MutationBatch m = keyspace.prepareMutationBatch();
m.withRow(CF_USER_INFO, "acct1234")
.putColumn("firstname", "john", null)
.putColumn("lastname", "smith", null)
.putColumn("address", "555 Elm St", null)
.putColumn("age", 30, null)
.putEmptyColumn("empty");
m.execute();
ColumnList response = keyspace.prepareQuery(CF_USER_INFO).getRow("acct1234").execute().getResult();
Assert.assertEquals("firstname", response.getColumnByName("firstname").getName());
Assert.assertEquals("firstname", response.getColumnByName("firstname").getName());
Assert.assertEquals("john", response.getColumnByName("firstname").getStringValue());
Assert.assertEquals("john", response.getColumnByName("firstname").getStringValue());
Assert.assertEquals(true, response.getColumnByName("firstname").hasValue());
Assert.assertEquals(false, response.getColumnByName("empty").hasValue());
}
@Test
public void testDelete() throws Exception {
LOG.info("Starting testDelete...");
String rowKey = "DeleteMe_testDelete";
MutationBatch m = keyspace.prepareMutationBatch();
m.withRow(CF_STANDARD1, rowKey).putColumn("Column1", "X", null).putColumn("Column2", "X", null);
m.execute();
Column column = keyspace.prepareQuery(CF_STANDARD1).getRow(rowKey).getColumn("Column1").execute().getResult();
Assert.assertEquals("X", column.getStringValue());
m = keyspace.prepareMutationBatch();
m.withRow(CF_STANDARD1, rowKey).deleteColumn("Column1");
m.execute();
column = keyspace.prepareQuery(CF_STANDARD1).getRow(rowKey).getColumn("Column1").execute().getResult();
Assert.assertNull(column);
LOG.info("... testDelete");
}
@Test
public void testDeleteLotsOfColumns() throws Exception {
LOG.info("Starting testDelete...");
String rowKey = "DeleteMe_testDeleteLotsOfColumns";
int nColumns = 100;
int pageSize = 25;
// Insert a bunch of rows
MutationBatch m = keyspace.prepareMutationBatch();
ColumnListMutation rm = m.withRow(CF_STANDARD1, rowKey);
for (int i = 0; i < nColumns; i++) {
rm.putEmptyColumn("" + i, null);
}
m.execute();
// Verify count
int count = keyspace.prepareQuery(CF_STANDARD1)
.setConsistencyLevel(ConsistencyLevel.CL_QUORUM)
.getKey(rowKey).getCount().execute().getResult();
Assert.assertEquals(nColumns, count);
// Delete half of the columns
m = keyspace.prepareMutationBatch().setConsistencyLevel(ConsistencyLevel.CL_QUORUM);
rm = m.withRow(CF_STANDARD1, rowKey);
for (int i = 0; i < nColumns / 2; i++) {
rm.deleteColumn("" + i);
}
m.execute();
// Verify count
count = keyspace.prepareQuery(CF_STANDARD1)
.setConsistencyLevel(ConsistencyLevel.CL_QUORUM)
.getKey(rowKey).getCount().execute().getResult();
Assert.assertEquals(nColumns / 2, count);
// GET ROW COUNT WITH PAGINATION
RowQuery query = keyspace.prepareQuery(CF_STANDARD1)
.setConsistencyLevel(ConsistencyLevel.CL_QUORUM).getKey(rowKey)
.withColumnRange(new RangeBuilder().setLimit(pageSize).build())
.autoPaginate(true);
ColumnList result;
count = 0;
while (!(result = query.execute().getResult()).isEmpty()) {
count += result.size();
}
Assert.assertEquals(nColumns / 2, count);
// Delete all of the columns
m = keyspace.prepareMutationBatch().setConsistencyLevel(ConsistencyLevel.CL_QUORUM);
rm = m.withRow(CF_STANDARD1, rowKey);
for (int i = 0; i < nColumns; i++) {
rm.deleteColumn("" + i);
}
m.execute();
// Verify count
count = keyspace.prepareQuery(CF_STANDARD1)
.setConsistencyLevel(ConsistencyLevel.CL_QUORUM)
.getKey(rowKey).getCount().execute().getResult();
Assert.assertEquals(0, count);
LOG.info("... testDelete");
}
@Test
public void testCopy() throws ConnectionException {
String keyName = "A";
keyspace.prepareQuery(CF_STANDARD1).getKey(keyName).copyTo(CF_STANDARD2, keyName).execute();
ColumnList list1 = keyspace.prepareQuery(CF_STANDARD1).getKey(keyName).execute().getResult();
ColumnList list2 = keyspace.prepareQuery(CF_STANDARD2).getKey(keyName).execute().getResult();
Iterator> iter1 = list1.iterator();
Iterator> iter2 = list2.iterator();
while (iter1.hasNext()) {
Column column1 = iter1.next();
Column column2 = iter2.next();
Assert.assertEquals(column1.getName(), column2.getName());
Assert.assertEquals(column1.getByteBufferValue(),column2.getByteBufferValue());
}
Assert.assertFalse(iter2.hasNext());
}
@Test
public void testMutationMerge() throws Exception {
MutationBatch m1 = keyspace.prepareMutationBatch();
MutationBatch m2 = keyspace.prepareMutationBatch();
MutationBatch m3 = keyspace.prepareMutationBatch();
MutationBatch m4 = keyspace.prepareMutationBatch();
MutationBatch m5 = keyspace.prepareMutationBatch();
m1.withRow(CF_STANDARD1, "1").putColumn("1", "X", null);
m2.withRow(CF_STANDARD1, "2").putColumn("2", "X", null).putColumn("3", "X", null);
m3.withRow(CF_STANDARD1, "3").putColumn("4", "X", null).putColumn("5", "X", null).putColumn("6", "X", null);
m4.withRow(CF_STANDARD1, "1").putColumn("7", "X", null).putColumn("8", "X", null).putColumn("9", "X", null).putColumn("10", "X", null);
MutationBatch merged = keyspace.prepareMutationBatch();
Assert.assertEquals(merged.getRowCount(), 0);
merged.mergeShallow(m1);
Assert.assertEquals(merged.getRowCount(), 1);
merged.mergeShallow(m2);
Assert.assertEquals(merged.getRowCount(), 2);
merged.mergeShallow(m3);
Assert.assertEquals(merged.getRowCount(), 3);
merged.mergeShallow(m4);
Assert.assertEquals(merged.getRowCount(), 3);
merged.mergeShallow(m5);
Assert.assertEquals(merged.getRowCount(), 3);
merged.execute();
Rows result = keyspace.prepareQuery(CF_STANDARD1).getRowSlice("1", "2", "3").execute().getResult();
Assert.assertTrue(5 == result.getRow("1").getColumns().size());
Assert.assertTrue(2 == result.getRow("2").getColumns().size());
Assert.assertTrue(3 == result.getRow("3").getColumns().size());
}
}