package me.prettyprint.cassandra.service; import me.prettyprint.cassandra.BaseEmbededServerSetupTest; import me.prettyprint.cassandra.serializers.IntegerSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.cassandra.service.template.SliceFilter; import me.prettyprint.hector.api.Cluster; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.beans.Row; import me.prettyprint.hector.api.factory.HFactory; import static me.prettyprint.hector.api.factory.HFactory.*; import me.prettyprint.hector.api.mutation.Mutator; import me.prettyprint.hector.api.query.RangeSlicesQuery; import org.junit.AfterClass; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class RangeSlicesIteratorTest extends BaseEmbededServerSetupTest { private static final StringSerializer se = new StringSerializer(); private static final IntegerSerializer is = IntegerSerializer.get(); private static final String CF = "Standard1"; private static Cluster cluster; private static Keyspace keyspace; @BeforeClass public static void setupClass() { cluster = getOrCreateCluster("Test Cluster", "127.0.0.1:9170"); keyspace = createKeyspace("Keyspace1", cluster); } @AfterClass public static void teardownClass() { keyspace = null; cluster = null; } @Before public void setupCase() { // Insert 21 rows Mutator<String> m = createMutator(keyspace, se); for (int i = 1; i <= 21; i++) { m.addInsertion("k" + i, CF, createColumn(new Integer(i), new Integer(i), is, is)); } m.execute(); } @Test public void testIterator() { RangeSlicesQuery<String, Integer, Integer> query = HFactory.createRangeSlicesQuery(keyspace, se, is, is); query.setColumnFamily(CF); query.setRange(null, null, false, 10); assertKeys(query, 3, null, "k11", null); assertKeys(query, 10, "k2", null, null); assertKeys(query, 21, null, null, null); } @Test public void testFilter() { RangeSlicesQuery<String, Integer, Integer> query = HFactory.createRangeSlicesQuery(keyspace, se, is, is); query.setColumnFamily(CF); query.setRange(null, null, false, 10); SliceFilter<Row<String, Integer, Integer>> filter = new SliceFilter<Row<String, Integer, Integer>>() { @Override public boolean accept(Row<String, Integer, Integer> row) { return Integer.parseInt(row.getKey().replaceAll("^k", "")) < 10; } }; assertKeys(query, 9, null, null, filter); } private void assertKeys(RangeSlicesQuery query, int expected, String start, String end, SliceFilter<Row<String, Integer, Integer>> filter) { RangeSlicesIterator<String, Integer, Integer> iterator = new RangeSlicesIterator<String, Integer, Integer>(query, start, end).setFilter(filter); int total = 0; while(iterator.hasNext()) { iterator.next().getKey(); total ++; } assertEquals(expected, total); } }