http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/system/SourceSwitchingIteratorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/system/SourceSwitchingIteratorTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/system/SourceSwitchingIteratorTest.java index 23f08a8..7567871 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/system/SourceSwitchingIteratorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/system/SourceSwitchingIteratorTest.java @@ -35,19 +35,19 @@ import org.apache.accumulo.core.iterators.system.SourceSwitchingIterator.DataSou import org.apache.hadoop.io.Text; public class SourceSwitchingIteratorTest extends TestCase { - + Key nk(String row, String cf, String cq, long time) { return new Key(new Text(row), new Text(cf), new Text(cq), time); } - + void put(TreeMap<Key,Value> tm, String row, String cf, String cq, long time, Value val) { tm.put(nk(row, cf, cq, time), val); } - + void put(TreeMap<Key,Value> tm, String row, String cf, String cq, long time, String val) { put(tm, row, cf, cq, time, new Value(val.getBytes())); } - + private void ane(SortedKeyValueIterator<Key,Value> rdi, String row, String cf, String cq, long time, String val, boolean callNext) throws Exception { assertTrue(rdi.hasTop()); assertEquals(nk(row, cf, cq, time), rdi.getTopKey()); @@ -55,49 +55,49 @@ public class SourceSwitchingIteratorTest extends TestCase { if (callNext) rdi.next(); } - + class TestDataSource implements DataSource { - + DataSource next; SortedKeyValueIterator<Key,Value> iter; List<TestDataSource> copies = new ArrayList<TestDataSource>(); AtomicBoolean iflag; - + TestDataSource(SortedKeyValueIterator<Key,Value> iter) { this(iter, new ArrayList<TestDataSource>()); } - + public TestDataSource(SortedKeyValueIterator<Key,Value> iter, List<TestDataSource> copies) { this.iter = iter; this.copies = copies; copies.add(this); } - + @Override public DataSource getNewDataSource() { return next; } - + @Override public boolean isCurrent() { return next == null; } - + @Override public SortedKeyValueIterator<Key,Value> iterator() { if (iflag != null) ((InterruptibleIterator) iter).setInterruptFlag(iflag); return iter; } - + @Override public DataSource getDeepCopyDataSource(IteratorEnvironment env) { return new TestDataSource(iter.deepCopy(env), copies); } - + void setNext(TestDataSource next) { this.next = next; - + for (TestDataSource tds : copies) { if (tds != this) tds.next = new TestDataSource(next.iter.deepCopy(null), next.copies); @@ -109,54 +109,54 @@ public class SourceSwitchingIteratorTest extends TestCase { this.iflag = flag; } } - + public void test1() throws Exception { TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); put(tm1, "r1", "cf1", "cq1", 5, "v1"); put(tm1, "r1", "cf1", "cq3", 5, "v2"); put(tm1, "r2", "cf1", "cq1", 5, "v3"); - + SortedMapIterator smi = new SortedMapIterator(tm1); TestDataSource tds = new TestDataSource(smi); SourceSwitchingIterator ssi = new SourceSwitchingIterator(tds); - + ssi.seek(new Range(), new ArrayList<ByteSequence>(), false); ane(ssi, "r1", "cf1", "cq1", 5, "v1", true); ane(ssi, "r1", "cf1", "cq3", 5, "v2", true); ane(ssi, "r2", "cf1", "cq1", 5, "v3", true); assertFalse(ssi.hasTop()); } - + public void test2() throws Exception { TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); put(tm1, "r1", "cf1", "cq1", 5, "v1"); put(tm1, "r1", "cf1", "cq3", 5, "v2"); put(tm1, "r2", "cf1", "cq1", 5, "v3"); - + SortedMapIterator smi = new SortedMapIterator(tm1); TestDataSource tds = new TestDataSource(smi); SourceSwitchingIterator ssi = new SourceSwitchingIterator(tds); - + ssi.seek(new Range(), new ArrayList<ByteSequence>(), false); ane(ssi, "r1", "cf1", "cq1", 5, "v1", true); - + TreeMap<Key,Value> tm2 = new TreeMap<Key,Value>(); put(tm2, "r1", "cf1", "cq1", 5, "v4"); put(tm2, "r1", "cf1", "cq3", 5, "v5"); put(tm2, "r2", "cf1", "cq1", 5, "v6"); - + SortedMapIterator smi2 = new SortedMapIterator(tm2); TestDataSource tds2 = new TestDataSource(smi2); tds.next = tds2; - + ane(ssi, "r1", "cf1", "cq3", 5, "v2", true); ane(ssi, "r2", "cf1", "cq1", 5, "v6", true); assertFalse(ssi.hasTop()); } - + public void test3() throws Exception { // test switching after a row - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); put(tm1, "r1", "cf1", "cq1", 5, "v1"); put(tm1, "r1", "cf1", "cq2", 5, "v2"); @@ -164,82 +164,82 @@ public class SourceSwitchingIteratorTest extends TestCase { put(tm1, "r1", "cf1", "cq4", 5, "v4"); put(tm1, "r3", "cf1", "cq1", 5, "v5"); put(tm1, "r3", "cf1", "cq2", 5, "v6"); - + SortedMapIterator smi = new SortedMapIterator(tm1); TestDataSource tds = new TestDataSource(smi); SourceSwitchingIterator ssi = new SourceSwitchingIterator(tds, true); - + ssi.seek(new Range(), new ArrayList<ByteSequence>(), false); ane(ssi, "r1", "cf1", "cq1", 5, "v1", true); - + TreeMap<Key,Value> tm2 = new TreeMap<Key,Value>(tm1); put(tm2, "r1", "cf1", "cq5", 5, "v7"); // should not see this because it should not switch until the row is finished put(tm2, "r2", "cf1", "cq1", 5, "v8"); // should see this new row after it switches - + // setup a new data source, but it should not switch until the current row is finished SortedMapIterator smi2 = new SortedMapIterator(tm2); TestDataSource tds2 = new TestDataSource(smi2); tds.next = tds2; - + ane(ssi, "r1", "cf1", "cq2", 5, "v2", true); ane(ssi, "r1", "cf1", "cq3", 5, "v3", true); ane(ssi, "r1", "cf1", "cq4", 5, "v4", true); ane(ssi, "r2", "cf1", "cq1", 5, "v8", true); ane(ssi, "r3", "cf1", "cq1", 5, "v5", true); ane(ssi, "r3", "cf1", "cq2", 5, "v6", true); - + } - + public void test4() throws Exception { // ensure switch is done on initial seek TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); put(tm1, "r1", "cf1", "cq1", 5, "v1"); put(tm1, "r1", "cf1", "cq2", 5, "v2"); - + SortedMapIterator smi = new SortedMapIterator(tm1); TestDataSource tds = new TestDataSource(smi); SourceSwitchingIterator ssi = new SourceSwitchingIterator(tds, false); - + TreeMap<Key,Value> tm2 = new TreeMap<Key,Value>(); put(tm2, "r1", "cf1", "cq1", 6, "v3"); put(tm2, "r1", "cf1", "cq2", 6, "v4"); - + SortedMapIterator smi2 = new SortedMapIterator(tm2); TestDataSource tds2 = new TestDataSource(smi2); tds.next = tds2; - + ssi.seek(new Range(), new ArrayList<ByteSequence>(), false); - + ane(ssi, "r1", "cf1", "cq1", 6, "v3", true); ane(ssi, "r1", "cf1", "cq2", 6, "v4", true); - + } - + public void test5() throws Exception { // esnure switchNow() works w/ deepCopy() TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); put(tm1, "r1", "cf1", "cq1", 5, "v1"); put(tm1, "r1", "cf1", "cq2", 5, "v2"); - + SortedMapIterator smi = new SortedMapIterator(tm1); TestDataSource tds = new TestDataSource(smi); SourceSwitchingIterator ssi = new SourceSwitchingIterator(tds, false); - + SortedKeyValueIterator<Key,Value> dc1 = ssi.deepCopy(null); - + TreeMap<Key,Value> tm2 = new TreeMap<Key,Value>(); put(tm2, "r1", "cf1", "cq1", 6, "v3"); put(tm2, "r2", "cf1", "cq2", 6, "v4"); - + SortedMapIterator smi2 = new SortedMapIterator(tm2); TestDataSource tds2 = new TestDataSource(smi2); tds.setNext(tds2); - + ssi.switchNow(); - + ssi.seek(new Range("r1"), new ArrayList<ByteSequence>(), false); dc1.seek(new Range("r2"), new ArrayList<ByteSequence>(), false); - + ane(ssi, "r1", "cf1", "cq1", 6, "v3", true); assertFalse(ssi.hasTop()); ane(dc1, "r2", "cf1", "cq2", 6, "v4", true);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/system/TimeSettingIteratorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/system/TimeSettingIteratorTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/system/TimeSettingIteratorTest.java index 188ec47..783dbc0 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/system/TimeSettingIteratorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/system/TimeSettingIteratorTest.java @@ -28,57 +28,57 @@ import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.iterators.SortedMapIterator; public class TimeSettingIteratorTest extends TestCase { - + public void test1() throws Exception { TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + tm1.put(new Key("r0", "cf1", "cq1", 9l), new Value("v0".getBytes())); tm1.put(new Key("r1", "cf1", "cq1", Long.MAX_VALUE), new Value("v1".getBytes())); tm1.put(new Key("r1", "cf1", "cq1", 90l), new Value("v2".getBytes())); tm1.put(new Key("r1", "cf1", "cq1", 0l), new Value("v3".getBytes())); tm1.put(new Key("r2", "cf1", "cq1", 6l), new Value("v4".getBytes())); - + TimeSettingIterator tsi = new TimeSettingIterator(new SortedMapIterator(tm1), 50); - + tsi.seek(new Range(new Key("r1", "cf1", "cq1", 50l), true, new Key("r1", "cf1", "cq1", 50l), true), new HashSet<ByteSequence>(), false); - + assertTrue(tsi.hasTop()); assertEquals(new Key("r1", "cf1", "cq1", 50l), tsi.getTopKey()); assertEquals("v1", tsi.getTopValue().toString()); tsi.next(); - + assertTrue(tsi.hasTop()); assertEquals(new Key("r1", "cf1", "cq1", 50l), tsi.getTopKey()); assertEquals("v2", tsi.getTopValue().toString()); tsi.next(); - + assertTrue(tsi.hasTop()); assertEquals(new Key("r1", "cf1", "cq1", 50l), tsi.getTopKey()); assertEquals("v3", tsi.getTopValue().toString()); tsi.next(); - + assertFalse(tsi.hasTop()); - + tsi.seek(new Range(new Key("r1", "cf1", "cq1", 50l), false, null, true), new HashSet<ByteSequence>(), false); - + assertTrue(tsi.hasTop()); assertEquals(new Key("r2", "cf1", "cq1", 50l), tsi.getTopKey()); assertEquals("v4", tsi.getTopValue().toString()); tsi.next(); - + assertFalse(tsi.hasTop()); - + tsi.seek(new Range(null, true, new Key("r1", "cf1", "cq1", 50l), false), new HashSet<ByteSequence>(), false); - + assertTrue(tsi.hasTop()); assertEquals(new Key("r0", "cf1", "cq1", 50l), tsi.getTopKey()); assertEquals("v0", tsi.getTopValue().toString()); tsi.next(); - + assertFalse(tsi.hasTop()); - + tsi.seek(new Range(new Key("r1", "cf1", "cq1", 51l), true, new Key("r1", "cf1", "cq1", 50l), false), new HashSet<ByteSequence>(), false); assertFalse(tsi.hasTop()); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java index 6bc7bdc..667aa5f 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java @@ -32,21 +32,21 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; public class VisibilityFilterTest extends TestCase { - + public void testBadVisibility() throws IOException { TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + tm.put(new Key("r1", "cf1", "cq1", "A&"), new Value(new byte[0])); VisibilityFilter filter = new VisibilityFilter(new SortedMapIterator(tm), new Authorizations("A"), "".getBytes()); - + // suppress logging Level prevLevel = Logger.getLogger(VisibilityFilter.class).getLevel(); Logger.getLogger(VisibilityFilter.class).setLevel(Level.FATAL); filter.seek(new Range(), new HashSet<ByteSequence>(), false); assertFalse(filter.hasTop()); - + Logger.getLogger(VisibilityFilter.class).setLevel(prevLevel); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/BigDecimalCombinerTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/BigDecimalCombinerTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/BigDecimalCombinerTest.java index 9e3d975..c15fe55 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/BigDecimalCombinerTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/BigDecimalCombinerTest.java @@ -50,7 +50,6 @@ public class BigDecimalCombinerTest { List<Column> columns; Combiner ai; - @Before public void setup() { encoder = new BigDecimalCombiner.BigDecimalEncoder(); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java index 44fe00f..f15bad4 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/ColumnSliceFilterTest.java @@ -40,238 +40,237 @@ import org.junit.Test; public class ColumnSliceFilterTest { - private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); - - private static final SortedMap<Key,Value> TEST_DATA = new TreeMap<Key,Value>(); - private static final Key KEY_1 = nkv(TEST_DATA, "boo1", "yup", "20080201", "dog"); - private static final Key KEY_2 = nkv(TEST_DATA, "boo1", "yap", "20080202", "cat"); - private static final Key KEY_3 = nkv(TEST_DATA, "boo2", "yap", "20080203", "hamster"); - private static final Key KEY_4 = nkv(TEST_DATA, "boo2", "yop", "20080204", "lion"); - private static final Key KEY_5 = nkv(TEST_DATA, "boo2", "yup", "20080206", "tiger"); - private static final Key KEY_6 = nkv(TEST_DATA, "boo2", "yip", "20080203", "tiger"); - - private static IteratorEnvironment iteratorEnvironment; - - private ColumnSliceFilter columnSliceFilter = new ColumnSliceFilter(); - private IteratorSetting is; - - private static Key nkv(SortedMap<Key,Value> tm, String row, String cf, String cq, String val) { - Key k = nk(row, cf, cq); - tm.put(k, new Value(val.getBytes())); - return k; - } - - private static Key nk(String row, String cf, String cq) { - return new Key(new Text(row), new Text(cf), new Text(cq)); - } - - @Before - public void setUp() throws Exception { - columnSliceFilter.describeOptions(); - iteratorEnvironment = new DefaultIteratorEnvironment(); - is = new IteratorSetting(1, ColumnSliceFilter.class); + private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); + + private static final SortedMap<Key,Value> TEST_DATA = new TreeMap<Key,Value>(); + private static final Key KEY_1 = nkv(TEST_DATA, "boo1", "yup", "20080201", "dog"); + private static final Key KEY_2 = nkv(TEST_DATA, "boo1", "yap", "20080202", "cat"); + private static final Key KEY_3 = nkv(TEST_DATA, "boo2", "yap", "20080203", "hamster"); + private static final Key KEY_4 = nkv(TEST_DATA, "boo2", "yop", "20080204", "lion"); + private static final Key KEY_5 = nkv(TEST_DATA, "boo2", "yup", "20080206", "tiger"); + private static final Key KEY_6 = nkv(TEST_DATA, "boo2", "yip", "20080203", "tiger"); + + private static IteratorEnvironment iteratorEnvironment; + + private ColumnSliceFilter columnSliceFilter = new ColumnSliceFilter(); + private IteratorSetting is; + + private static Key nkv(SortedMap<Key,Value> tm, String row, String cf, String cq, String val) { + Key k = nk(row, cf, cq); + tm.put(k, new Value(val.getBytes())); + return k; + } + + private static Key nk(String row, String cf, String cq) { + return new Key(new Text(row), new Text(cf), new Text(cq)); + } + + @Before + public void setUp() throws Exception { + columnSliceFilter.describeOptions(); + iteratorEnvironment = new DefaultIteratorEnvironment(); + is = new IteratorSetting(1, ColumnSliceFilter.class); + } + + @Test + public void testBasic() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", "20080204"); + + assertTrue(columnSliceFilter.validateOptions(is.getOptions())); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, true); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testBothInclusive() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", true, "20080204", true); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testBothExclusive() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", false, "20080204", false); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testStartExclusiveEndInclusive() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", false, "20080204", true); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testNullStart() throws IOException { + ColumnSliceFilter.setSlice(is, null, "20080204"); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_1)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testNullEnd() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", null); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_5)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testBothNull() throws IOException { + ColumnSliceFilter.setSlice(is, null, null); + + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); + + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_1)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); + columnSliceFilter.next(); + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_5)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testStartAfterEnd() throws IOException { + try { + ColumnSliceFilter.setSlice(is, "20080204", "20080202"); + fail("IllegalArgumentException expected but not thrown"); + } catch (IllegalArgumentException expectedException) { + // Exception successfully thrown } - - @Test - public void testBasic() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", "20080204"); - - assertTrue(columnSliceFilter.validateOptions(is.getOptions())); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, true); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testStartEqualToEndStartInclusiveEndExclusive() throws IOException { + try { + ColumnSliceFilter.setSlice(is, "20080202", "20080202"); + fail("IllegalArgumentException expected but not thrown"); + } catch (IllegalArgumentException expectedException) { + // Exception successfully thrown } - - @Test - public void testBothInclusive() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", true, "20080204", true); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); + } + + @Test + public void testStartEqualToEndStartExclusiveEndInclusive() throws IOException { + try { + ColumnSliceFilter.setSlice(is, "20080202", false, "20080202", true); + fail("IllegalArgumentException expected but not thrown"); + } catch (IllegalArgumentException expectedException) { + // Exception successfully thrown } + } - @Test - public void testBothExclusive() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", false, "20080204", false); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } + @Test + public void testStartEqualToEndBothInclusive() throws IOException { + ColumnSliceFilter.setSlice(is, "20080202", true, "20080202", true); - @Test - public void testStartExclusiveEndInclusive() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", false, "20080204", true); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } + columnSliceFilter.validateOptions(is.getOptions()); + columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); + columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - @Test - public void testNullStart() throws IOException { - ColumnSliceFilter.setSlice(is, null, "20080204"); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_1)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } - - @Test - public void testNullEnd() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", null); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_5)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } - - @Test - public void testBothNull() throws IOException { - ColumnSliceFilter.setSlice(is, null, null); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_1)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_3)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_6)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_4)); - columnSliceFilter.next(); - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_5)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } - - @Test - public void testStartAfterEnd() throws IOException { - try { - ColumnSliceFilter.setSlice(is, "20080204", "20080202"); - fail("IllegalArgumentException expected but not thrown"); - } catch(IllegalArgumentException expectedException) { - // Exception successfully thrown - } - } - - @Test - public void testStartEqualToEndStartInclusiveEndExclusive() throws IOException { - try { - ColumnSliceFilter.setSlice(is, "20080202", "20080202"); - fail("IllegalArgumentException expected but not thrown"); - } catch(IllegalArgumentException expectedException) { - // Exception successfully thrown - } - } - - @Test - public void testStartEqualToEndStartExclusiveEndInclusive() throws IOException { - try { - ColumnSliceFilter.setSlice(is, "20080202", false, "20080202", true); - fail("IllegalArgumentException expected but not thrown"); - } catch(IllegalArgumentException expectedException) { - // Exception successfully thrown - } - } - - @Test - public void testStartEqualToEndBothInclusive() throws IOException { - ColumnSliceFilter.setSlice(is, "20080202", true, "20080202", true); - - columnSliceFilter.validateOptions(is.getOptions()); - columnSliceFilter.init(new SortedMapIterator(TEST_DATA), is.getOptions(), iteratorEnvironment); - columnSliceFilter.seek(new Range(), EMPTY_COL_FAMS, false); - - assertTrue(columnSliceFilter.hasTop()); - assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); - columnSliceFilter.next(); - assertFalse(columnSliceFilter.hasTop()); - } + assertTrue(columnSliceFilter.hasTop()); + assertTrue(columnSliceFilter.getTopKey().equals(KEY_2)); + columnSliceFilter.next(); + assertFalse(columnSliceFilter.hasTop()); + } } - http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java index 41d6425..cdac2fb 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/CombinerTest.java @@ -50,511 +50,511 @@ import org.junit.Assert; import org.junit.Test; public class CombinerTest { - + private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); - + static Key nk(int row, int colf, int colq, long ts, boolean deleted) { Key k = nk(row, colf, colq, ts); k.setDeleted(deleted); return k; } - + static Key nk(int row, int colf, int colq, long ts) { return new Key(nr(row), new Text(String.format("cf%03d", colf)), new Text(String.format("cq%03d", colq)), ts); } - + static Range nr(int row, int colf, int colq, long ts, boolean inclusive) { return new Range(nk(row, colf, colq, ts), inclusive, null, true); } - + static Range nr(int row, int colf, int colq, long ts) { return nr(row, colf, colq, ts, true); } - + static <V> void nkv(TreeMap<Key,Value> tm, int row, int colf, int colq, long ts, boolean deleted, V val, Encoder<V> encoder) { Key k = nk(row, colf, colq, ts); k.setDeleted(deleted); tm.put(k, new Value(encoder.encode(val))); } - + static Text nr(int row) { return new Text(String.format("r%03d", row)); } - + @Test public void test1() throws IOException { Encoder<Long> encoder = LongCombiner.VAR_LEN_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that do not aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, SummingCombiner.Type.VARLEN); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("2"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("4", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 1), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // try seeking - + ai.seek(nr(1, 1, 1, 2), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 1), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // seek after everything ai.seek(nr(1, 1, 1, 0), EMPTY_COL_FAMS, false); - + assertFalse(ai.hasTop()); - + } - + @Test public void test2() throws IOException { Encoder<Long> encoder = LongCombiner.VAR_LEN_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, VarLenEncoder.class); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // try seeking to the beginning of a key that aggregates - + ai.seek(nr(1, 1, 1, 3), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // try seeking the middle of a key the aggregates ai.seek(nr(1, 1, 1, 2), EMPTY_COL_FAMS, false); - + assertFalse(ai.hasTop()); - + // try seeking to the end of a key the aggregates ai.seek(nr(1, 1, 1, 1), EMPTY_COL_FAMS, false); - + assertFalse(ai.hasTop()); - + // try seeking before a key the aggregates ai.seek(nr(1, 1, 1, 4), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); } - + @Test public void test3() throws IOException { Encoder<Long> encoder = LongCombiner.FIXED_LEN_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + // keys that do not aggregate nkv(tm1, 2, 2, 1, 1, false, 2l, encoder); nkv(tm1, 2, 2, 1, 2, false, 3l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, FixedLenEncoder.class.getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 1), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // seek after key that aggregates ai.seek(nr(1, 1, 1, 2), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + // seek before key that aggregates ai.seek(nr(1, 1, 1, 4), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + } - + @Test public void testDeepCopy() throws IOException { Encoder<Long> encoder = LongCombiner.FIXED_LEN_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + // keys that do not aggregate nkv(tm1, 2, 2, 1, 1, false, 2l, encoder); nkv(tm1, 2, 2, 1, 2, false, 3l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, FixedLenEncoder.class.getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); - + SortedKeyValueIterator<Key,Value> ai2 = ai.deepCopy(null); SortedKeyValueIterator<Key,Value> ai3 = ai.deepCopy(null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 1), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // seek after key that aggregates ai2.seek(nr(1, 1, 1, 2), EMPTY_COL_FAMS, false); - + assertTrue(ai2.hasTop()); assertEquals(nk(2, 2, 1, 2), ai2.getTopKey()); assertEquals("3", encoder.decode(ai2.getTopValue().get()).toString()); - + // seek before key that aggregates ai3.seek(nr(1, 1, 1, 4), EMPTY_COL_FAMS, false); - + assertTrue(ai3.hasTop()); assertEquals(nk(1, 1, 1, 3), ai3.getTopKey()); assertEquals("9", encoder.decode(ai3.getTopValue().get()).toString()); - + ai3.next(); - + assertTrue(ai3.hasTop()); assertEquals(nk(2, 2, 1, 2), ai3.getTopKey()); assertEquals("3", encoder.decode(ai3.getTopValue().get()).toString()); } - + @Test public void test4() throws IOException { Encoder<Long> encoder = LongCombiner.STRING_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that do not aggregate nkv(tm1, 0, 0, 1, 1, false, 7l, encoder); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + // keys that do not aggregate nkv(tm1, 2, 2, 1, 1, false, 2l, encoder); nkv(tm1, 2, 2, 1, 2, false, 3l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, SummingCombiner.Type.STRING); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(0, 0, 1, 1), ai.getTopKey()); assertEquals("7", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 1), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + // seek test ai.seek(nr(0, 0, 1, 0), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + // seek after key that aggregates ai.seek(nr(1, 1, 1, 2), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("3", encoder.decode(ai.getTopValue().get()).toString()); - + // combine all columns - + is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, SummingCombiner.Type.STRING); Combiner.setCombineAllColumns(is, true); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(0, 0, 1, 1), ai.getTopKey()); assertEquals("7", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertTrue(ai.hasTop()); assertEquals(nk(2, 2, 1, 2), ai.getTopKey()); assertEquals("5", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); } - + @Test public void test5() throws IOException { Encoder<Long> encoder = LongCombiner.STRING_ENCODER; // try aggregating across multiple data sets that contain // the exact same keys w/ different values - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); - + TreeMap<Key,Value> tm2 = new TreeMap<Key,Value>(); nkv(tm2, 1, 1, 1, 1, false, 3l, encoder); - + TreeMap<Key,Value> tm3 = new TreeMap<Key,Value>(); nkv(tm3, 1, 1, 1, 1, false, 4l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, StringEncoder.class); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + List<SortedKeyValueIterator<Key,Value>> sources = new ArrayList<SortedKeyValueIterator<Key,Value>>(3); sources.add(new SortedMapIterator(tm1)); sources.add(new SortedMapIterator(tm2)); sources.add(new SortedMapIterator(tm3)); - + MultiIterator mi = new MultiIterator(sources, true); ai.init(mi, is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 1), ai.getTopKey()); assertEquals("9", encoder.decode(ai.getTopValue().get()).toString()); } - + @Test public void test6() throws IOException { Encoder<Long> encoder = LongCombiner.VAR_LEN_ENCODER; TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 2l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, VarLenEncoder.class.getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), new DefaultIteratorEnvironment()); - + // try seeking to the beginning of a key that aggregates - + ai.seek(nr(1, 1, 1, 3, false), EMPTY_COL_FAMS, false); - + assertFalse(ai.hasTop()); - + } - + @Test public void test7() throws IOException { Encoder<Long> encoder = LongCombiner.FIXED_LEN_ENCODER; - + // test that delete is not aggregated - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + nkv(tm1, 1, 1, 1, 2, true, 0l, encoder); nkv(tm1, 1, 1, 1, 3, false, 4l, encoder); nkv(tm1, 1, 1, 1, 4, false, 3l, encoder); - + Combiner ai = new SummingCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, SummingCombiner.Type.FIXEDLEN); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), new DefaultIteratorEnvironment()); - + ai.seek(nr(1, 1, 1, 4, true), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 4), ai.getTopKey()); assertEquals("7", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 2, true), ai.getTopKey()); assertEquals("0", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); assertFalse(ai.hasTop()); - + tm1 = new TreeMap<Key,Value>(); nkv(tm1, 1, 1, 1, 2, true, 0l, encoder); ai = new SummingCombiner(); ai.init(new SortedMapIterator(tm1), is.getOptions(), new DefaultIteratorEnvironment()); - + ai.seek(nr(1, 1, 1, 4, true), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 2, true), ai.getTopKey()); assertEquals("0", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); assertFalse(ai.hasTop()); } - + @Test public void valueIteratorTest() throws IOException { TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); @@ -567,7 +567,7 @@ public class CombinerTest { assertEquals(iter.next().toString(), "1"); assertFalse(iter.hasNext()); } - + @Test public void sumAllColumns() throws IOException { TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); @@ -585,11 +585,11 @@ public class CombinerTest { iter.init(smi, s.getOptions(), new DefaultIteratorEnvironment()); Combiner iter2 = new SummingCombiner(); IteratorSetting s2 = new IteratorSetting(10, "s2", SummingCombiner.class); - SummingCombiner.setColumns(s2, Collections.singletonList(new IteratorSetting.Column("count","a"))); + SummingCombiner.setColumns(s2, Collections.singletonList(new IteratorSetting.Column("count", "a"))); SummingCombiner.setEncodingType(s2, LongCombiner.StringEncoder.class); iter2.init(iter, s.getOptions(), new DefaultIteratorEnvironment()); iter2.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(iter2.hasTop()); assertEquals("2", iter2.getTopValue().toString()); iter2.next(); @@ -601,51 +601,49 @@ public class CombinerTest { iter2.next(); assertFalse(iter2.hasTop()); } - - @Test public void maxMinTest() throws IOException { Encoder<Long> encoder = LongCombiner.VAR_LEN_ENCODER; - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, 4l, encoder); nkv(tm1, 1, 1, 1, 2, false, 3l, encoder); nkv(tm1, 1, 1, 1, 3, false, 2l, encoder); - + Combiner ai = new MaxCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingCombiner.class); LongCombiner.setEncodingType(is, SummingCombiner.Type.VARLEN); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("4", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); - + ai = new MinCombiner(); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertEquals("2", encoder.decode(ai.getTopValue().get()).toString()); - + ai.next(); - + assertFalse(ai.hasTop()); } - + public static List<Long> nal(Long... longs) { List<Long> al = new ArrayList<Long>(longs.length); for (Long l : longs) { @@ -653,110 +651,110 @@ public class CombinerTest { } return al; } - + public static void assertBytesEqual(byte[] a, byte[] b) { assertEquals(a.length, b.length); for (int i = 0; i < a.length; i++) assertEquals(a[i], b[i]); } - + public static void sumArray(Class<? extends Encoder<List<Long>>> encoderClass, SummingArrayCombiner.Type type) throws IOException, InstantiationException, IllegalAccessException { Encoder<List<Long>> encoder = encoderClass.newInstance(); - + TreeMap<Key,Value> tm1 = new TreeMap<Key,Value>(); - + // keys that aggregate nkv(tm1, 1, 1, 1, 1, false, nal(1l, 2l), encoder); nkv(tm1, 1, 1, 1, 2, false, nal(3l, 4l, 5l), encoder); nkv(tm1, 1, 1, 1, 3, false, nal(), encoder); - + Combiner ai = new SummingArrayCombiner(); - + IteratorSetting is = new IteratorSetting(1, SummingArrayCombiner.class); SummingArrayCombiner.setEncodingType(is, type); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertBytesEqual(encoder.encode(nal(4l, 6l, 5l)), ai.getTopValue().get()); - + ai.next(); - + assertFalse(ai.hasTop()); - + is.clearOptions(); SummingArrayCombiner.setEncodingType(is, encoderClass); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertBytesEqual(encoder.encode(nal(4l, 6l, 5l)), ai.getTopValue().get()); - + ai.next(); - + assertFalse(ai.hasTop()); - + is.clearOptions(); SummingArrayCombiner.setEncodingType(is, encoderClass.getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + ai.init(new SortedMapIterator(tm1), is.getOptions(), null); ai.seek(new Range(), EMPTY_COL_FAMS, false); - + assertTrue(ai.hasTop()); assertEquals(nk(1, 1, 1, 3), ai.getTopKey()); assertBytesEqual(encoder.encode(nal(4l, 6l, 5l)), ai.getTopValue().get()); - + ai.next(); - + assertFalse(ai.hasTop()); - + is.clearOptions(); SummingArrayCombiner.setEncodingType(is, SummingCombiner.VAR_LEN_ENCODER.getClass().getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + try { ai.init(new SortedMapIterator(tm1), is.getOptions(), null); Assert.fail(); } catch (IllegalArgumentException e) {} - + is.clearOptions(); SummingArrayCombiner.setEncodingType(is, BadEncoder.class.getName()); Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("cf001"))); - + try { ai.init(new SortedMapIterator(tm1), is.getOptions(), null); Assert.fail(); } catch (IllegalArgumentException e) {} } - + public static class BadEncoder implements Encoder<List<Long>> { @Override public byte[] encode(List<Long> v) { return new byte[0]; } - + @Override public List<Long> decode(byte[] b) { return new ArrayList<Long>(); } - + } - + @Test public void sumArrayTest() throws IOException, InstantiationException, IllegalAccessException { sumArray(SummingArrayCombiner.VarLongArrayEncoder.class, SummingArrayCombiner.Type.VARLEN); sumArray(SummingArrayCombiner.FixedLongArrayEncoder.class, SummingArrayCombiner.Type.FIXEDLEN); sumArray(SummingArrayCombiner.StringArrayEncoder.class, SummingArrayCombiner.Type.STRING); } - + @Test public void testEncoders() { TypedValueCombiner.testEncoder(SummingCombiner.FIXED_LEN_ENCODER, Long.MAX_VALUE); @@ -774,12 +772,12 @@ public class CombinerTest { TypedValueCombiner.testEncoder(SummingCombiner.STRING_ENCODER, 42l); TypedValueCombiner.testEncoder(SummingCombiner.STRING_ENCODER, -42l); TypedValueCombiner.testEncoder(SummingCombiner.STRING_ENCODER, 0l); - + TypedValueCombiner.testEncoder(SummingArrayCombiner.FIXED_LONG_ARRAY_ENCODER, Arrays.asList(0l, -1l, 10l, Long.MAX_VALUE, Long.MIN_VALUE)); TypedValueCombiner.testEncoder(SummingArrayCombiner.VAR_LONG_ARRAY_ENCODER, Arrays.asList(0l, -1l, 10l, Long.MAX_VALUE, Long.MIN_VALUE)); TypedValueCombiner.testEncoder(SummingArrayCombiner.STRING_ARRAY_ENCODER, Arrays.asList(0l, -1l, 10l, Long.MAX_VALUE, Long.MIN_VALUE)); } - + @Test public void testAdds() { assertEquals(LongCombiner.safeAdd(Long.MIN_VALUE + 5, -10), Long.MIN_VALUE); @@ -787,5 +785,5 @@ public class CombinerTest { assertEquals(LongCombiner.safeAdd(Long.MIN_VALUE + 5, -5), Long.MIN_VALUE); assertEquals(LongCombiner.safeAdd(Long.MAX_VALUE - 5, 5), Long.MAX_VALUE); } - + } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java index b7a842f..3aefdf1 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java @@ -47,10 +47,10 @@ import org.apache.hadoop.io.Text; import org.junit.Test; public class FilterTest { - + private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); private static final Map<String,String> EMPTY_OPTS = new HashMap<String,String>(); - + public static class SimpleFilter extends Filter { public boolean accept(Key k, Value v) { // System.out.println(k.getRow()); @@ -59,7 +59,7 @@ public class FilterTest { return false; } } - + public static class SimpleFilter2 extends Filter { public boolean accept(Key k, Value v) { if (k.getColumnFamily().toString().equals("a")) @@ -67,7 +67,7 @@ public class FilterTest { return true; } } - + private static int size(SortedKeyValueIterator<Key,Value> iterator) throws IOException { int size = 0; while (iterator.hasTop()) { @@ -77,33 +77,33 @@ public class FilterTest { } return size; } - + @Test public void test1() throws IOException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + for (int i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), colf, colq); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + Filter filter1 = new SimpleFilter(); filter1.init(new SortedMapIterator(tm), EMPTY_OPTS, null); filter1.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(filter1); assertTrue("size = " + size, size == 100); - + Filter fi = new SimpleFilter(); fi.init(new SortedMapIterator(tm), EMPTY_OPTS, null); Key k = new Key(new Text("500")); fi.seek(new Range(k, null), EMPTY_COL_FAMS, false); size = size(fi); assertTrue("size = " + size, size == 50); - + filter1 = new SimpleFilter(); filter1.init(new SortedMapIterator(tm), EMPTY_OPTS, null); Filter filter2 = new SimpleFilter2(); @@ -112,36 +112,36 @@ public class FilterTest { size = size(filter2); assertTrue("size = " + size, size == 0); } - + @Test public void test1neg() throws IOException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + for (int i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), colf, colq); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + Filter filter = new SimpleFilter(); - + IteratorSetting is = new IteratorSetting(1, SimpleFilter.class); Filter.setNegate(is, true); - + filter.init(new SortedMapIterator(tm), is.getOptions(), null); filter.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(filter); assertTrue("size = " + size, size == 900); - + filter.init(new SortedMapIterator(tm), is.getOptions(), null); Key k = new Key(new Text("500")); filter.seek(new Range(k, null), EMPTY_COL_FAMS, false); size = size(filter); assertTrue("size = " + size, size == 450); - + filter.init(new SortedMapIterator(tm), EMPTY_OPTS, null); Filter filter2 = new SimpleFilter2(); filter2.init(filter, is.getOptions(), null); @@ -149,25 +149,25 @@ public class FilterTest { size = size(filter2); assertTrue("size = " + size, size == 100); } - + @Test public void testDeepCopy() throws IOException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + for (int i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), colf, colq); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + SimpleFilter filter = new SimpleFilter(); - + IteratorSetting is = new IteratorSetting(1, SimpleFilter.class); Filter.setNegate(is, true); - + filter.init(new SortedMapIterator(tm), is.getOptions(), null); SortedKeyValueIterator<Key,Value> copy = filter.deepCopy(null); filter.seek(new Range(), EMPTY_COL_FAMS, false); @@ -177,21 +177,21 @@ public class FilterTest { size = size(copy); assertTrue("size = " + size, size == 900); } - + @Test public void test2() throws IOException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + for (int i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), colf, colq); k.setTimestamp(i); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + SortedKeyValueIterator<Key,Value> a = new AgeOffFilter(); IteratorSetting is = new IteratorSetting(1, AgeOffFilter.class); AgeOffFilter.setTTL(is, 101l); @@ -210,7 +210,7 @@ public class FilterTest { copy.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(copy), 900); } - + @Test public void test2a() throws IOException { Text colf = new Text("a"); @@ -220,26 +220,26 @@ public class FilterTest { IteratorSetting is = new IteratorSetting(1, ColumnAgeOffFilter.class); ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a"), 901l); long ts = System.currentTimeMillis(); - + for (long i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), colf, colq, ts - i); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + ColumnAgeOffFilter a = new ColumnAgeOffFilter(); assertTrue(a.validateOptions(is.getOptions())); a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment()); a.overrideCurrentTime(ts); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 902); - + ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a", "b"), 101l); a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment()); a.overrideCurrentTime(ts); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 102); - + ColumnAgeOffFilter.removeTTL(is, new IteratorSetting.Column("a", "b")); a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment()); a = (ColumnAgeOffFilter) a.deepCopy(null); @@ -247,14 +247,14 @@ public class FilterTest { a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 902); } - + @Test public void test3() throws IOException { Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); HashSet<Column> hsc = new HashSet<Column>(); hsc.add(new Column("c".getBytes(), null, null)); - + Text colf1 = new Text("a"); Text colq1 = new Text("b"); Text colf2 = new Text("c"); @@ -274,93 +274,93 @@ public class FilterTest { tm.put(k, dv); } assertTrue(tm.size() == 1000); - + ColumnQualifierFilter a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 1000); - + hsc = new HashSet<Column>(); hsc.add(new Column("a".getBytes(), "b".getBytes(), null)); a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(a); assertTrue("size was " + size, size == 500); - + hsc = new HashSet<Column>(); a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); size = size(a); assertTrue("size was " + size, size == 1000); } - + @Test public void test4() throws IOException { Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + ColumnVisibility le1 = new ColumnVisibility("L1"); ColumnVisibility le2 = new ColumnVisibility("L0&OFFICIAL"); ColumnVisibility le3 = new ColumnVisibility("L1&L2"); ColumnVisibility le4 = new ColumnVisibility("L1&L2&G1"); ColumnVisibility[] lea = {le1, le2, le3, le4}; Authorizations auths = new Authorizations("L1", "L2", "L0", "OFFICIAL"); - + for (int i = 0; i < 1000; i++) { Key k = new Key(new Text(String.format("%03d", i)), new Text("a"), new Text("b"), new Text(lea[i % 4].getExpression())); tm.put(k, dv); } assertTrue(tm.size() == 1000); - + VisibilityFilter a = new VisibilityFilter(new SortedMapIterator(tm), auths, le2.getExpression()); a.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(a); assertTrue("size was " + size, size == 750); } - + private ColumnQualifierFilter ncqf(TreeMap<Key,Value> tm, Column... columns) throws IOException { HashSet<Column> hsc = new HashSet<Column>(); - + for (Column column : columns) { hsc.add(column); } - + ColumnQualifierFilter a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); return a; } - + @Test public void test5() throws IOException { Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + tm.put(new Key(new Text(String.format("%03d", 1)), new Text("a"), new Text("x")), dv); tm.put(new Key(new Text(String.format("%03d", 2)), new Text("a"), new Text("y")), dv); tm.put(new Key(new Text(String.format("%03d", 3)), new Text("a"), new Text("z")), dv); tm.put(new Key(new Text(String.format("%03d", 4)), new Text("b"), new Text("x")), dv); tm.put(new Key(new Text(String.format("%03d", 5)), new Text("b"), new Text("y")), dv); - + assertTrue(tm.size() == 5); - + int size = size(ncqf(tm, new Column("c".getBytes(), null, null))); assertTrue(size == 5); - + size = size(ncqf(tm, new Column("a".getBytes(), null, null))); assertTrue(size == 5); - + size = size(ncqf(tm, new Column("a".getBytes(), "x".getBytes(), null))); assertTrue(size == 1); - + size = size(ncqf(tm, new Column("a".getBytes(), "x".getBytes(), null), new Column("b".getBytes(), "x".getBytes(), null))); assertTrue(size == 2); - + size = size(ncqf(tm, new Column("a".getBytes(), "x".getBytes(), null), new Column("b".getBytes(), "y".getBytes(), null))); assertTrue(size == 2); - + size = size(ncqf(tm, new Column("a".getBytes(), "x".getBytes(), null), new Column("b".getBytes(), null, null))); assertTrue(size == 3); } - + @Test public void testNoVisFilter() throws IOException { TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); @@ -370,28 +370,28 @@ public class FilterTest { tm.put(k, v); } assertTrue(tm.size() == 1000); - + Filter filter = new ReqVisFilter(); filter.init(new SortedMapIterator(tm), EMPTY_OPTS, null); filter.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(filter); assertTrue("size = " + size, size == 100); } - + @Test public void testTimestampFilter() throws IOException, ParseException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + for (int i = 0; i < 100; i++) { Key k = new Key(new Text(String.format("%02d", i)), colf, colq); k.setTimestamp(i); tm.put(k, dv); } assertTrue(tm.size() == 100); - + SimpleDateFormat dateParser = new SimpleDateFormat("yyyyMMddHHmmssz"); long baseTime = dateParser.parse("19990101000000GMT").getTime(); tm.clear(); @@ -412,76 +412,76 @@ public class FilterTest { a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 21); - + TimestampFilter.setEnd(is, "19990101000031GMT", false); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 20); - + TimestampFilter.setStart(is, "19990101000011GMT", false); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 19); - + TimestampFilter.setEnd(is, "19990101000031GMT", true); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 20); - + is.clearOptions(); TimestampFilter.setStart(is, "19990101000011GMT", true); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 89); - + TimestampFilter.setStart(is, "19990101000011GMT", false); assertTrue(a.validateOptions(is.getOptions())); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 88); - + is.clearOptions(); TimestampFilter.setEnd(is, "19990101000031GMT", true); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 32); - + TimestampFilter.setEnd(is, "19990101000031GMT", false); assertTrue(a.validateOptions(is.getOptions())); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 31); - + TimestampFilter.setEnd(is, 253402300800001l, true); a.init(new SortedMapIterator(tm), is.getOptions(), null); - + is.clearOptions(); is.addOption(TimestampFilter.START, "19990101000011GMT"); assertTrue(a.validateOptions(is.getOptions())); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 89); - + is.clearOptions(); is.addOption(TimestampFilter.END, "19990101000031GMT"); assertTrue(a.validateOptions(is.getOptions())); a.init(new SortedMapIterator(tm), is.getOptions(), null); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 32); - + try { a.validateOptions(EMPTY_OPTS); assertTrue(false); } catch (IllegalArgumentException e) {} } - + @Test public void testDeletes() throws IOException { Text colf = new Text("a"); Text colq = new Text("b"); Value dv = new Value(); TreeMap<Key,Value> tm = new TreeMap<Key,Value>(); - + Key k = new Key(new Text("0"), colf, colq); tm.put(k, dv); k = new Key(new Text("1"), colf, colq, 10); @@ -491,14 +491,14 @@ public class FilterTest { tm.put(k, dv); k = new Key(new Text("10"), colf, colq); tm.put(k, dv); - + assertTrue(tm.size() == 4); - + Filter filter = new SimpleFilter(); filter.init(new SortedMapIterator(tm), EMPTY_OPTS, null); filter.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(filter); assertTrue("size = " + size, size == 3); - + } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/GrepIteratorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/GrepIteratorTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/GrepIteratorTest.java index bfce3db..23af994 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/GrepIteratorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/GrepIteratorTest.java @@ -41,33 +41,33 @@ public class GrepIteratorTest { private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); SortedMap<Key,Value> input; SortedMap<Key,Value> output; - + @Before public void init() { input = new TreeMap<Key,Value>(); output = new TreeMap<Key,Value>(); input.put(new Key("abcdef", "xyz", "xyz", 0), new Value("xyz".getBytes())); output.put(new Key("abcdef", "xyz", "xyz", 0), new Value("xyz".getBytes())); - + input.put(new Key("bdf", "ace", "xyz", 0), new Value("xyz".getBytes())); input.put(new Key("bdf", "abcdef", "xyz", 0), new Value("xyz".getBytes())); output.put(new Key("bdf", "abcdef", "xyz", 0), new Value("xyz".getBytes())); input.put(new Key("bdf", "xyz", "xyz", 0), new Value("xyz".getBytes())); - + input.put(new Key("ceg", "xyz", "abcdef", 0), new Value("xyz".getBytes())); output.put(new Key("ceg", "xyz", "abcdef", 0), new Value("xyz".getBytes())); input.put(new Key("ceg", "xyz", "xyz", 0), new Value("xyz".getBytes())); - + input.put(new Key("dfh", "xyz", "xyz", 0), new Value("abcdef".getBytes())); output.put(new Key("dfh", "xyz", "xyz", 0), new Value("abcdef".getBytes())); input.put(new Key("dfh", "xyz", "xyz", 1), new Value("xyz".getBytes())); - + Key k = new Key("dfh", "xyz", "xyz", 1); k.setDeleted(true); input.put(k, new Value("xyz".getBytes())); output.put(k, new Value("xyz".getBytes())); } - + public static void checkEntries(SortedKeyValueIterator<Key,Value> skvi, SortedMap<Key,Value> map) throws IOException { for (Entry<Key,Value> e : map.entrySet()) { assertTrue(skvi.hasTop()); @@ -77,7 +77,7 @@ public class GrepIteratorTest { } assertFalse(skvi.hasTop()); } - + @Test public void test() throws IOException { GrepIterator gi = new GrepIterator(); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6bc67602/core/src/test/java/org/apache/accumulo/core/iterators/user/IndexedDocIteratorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/IndexedDocIteratorTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/IndexedDocIteratorTest.java index ac0ab6b..117fcac 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/IndexedDocIteratorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/IndexedDocIteratorTest.java @@ -43,29 +43,29 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; public class IndexedDocIteratorTest extends TestCase { - + private static final Logger log = Logger.getLogger(IndexedDocIteratorTest.class); - + private static final Collection<ByteSequence> EMPTY_COL_FAMS = new ArrayList<ByteSequence>(); private static final byte[] nullByte = {0}; - + private static IteratorEnvironment env = new DefaultIteratorEnvironment(); - + TreeMap<Key,Value> map; Text[] columnFamilies; Text[] otherColumnFamilies; - + static int docid = 0; static String docColfPrefix = "doc"; static Text indexColf = new Text("index"); static Text docColf = new Text(docColfPrefix); - + static { log.setLevel(Level.OFF); docColf.append(nullByte, 0, 1); docColf.append("type".getBytes(), 0, "type".getBytes().length); } - + private TreeMap<Key,Value> createSortedMap(float hitRatio, int numRows, int numDocsPerRow, Text[] columnFamilies, Text[] otherColumnFamilies, HashSet<Text> docs, Text[] negatedColumns) { StringBuilder sb = new StringBuilder(); @@ -73,7 +73,7 @@ public class IndexedDocIteratorTest extends TestCase { Value v = new Value(new byte[0]); TreeMap<Key,Value> map = new TreeMap<Key,Value>(); boolean[] negateMask = new boolean[columnFamilies.length]; - + for (int i = 0; i < columnFamilies.length; i++) { negateMask[i] = false; if (negatedColumns.length > 0) @@ -131,20 +131,20 @@ public class IndexedDocIteratorTest extends TestCase { } return map; } - + static TestRFile trf = new TestRFile(AccumuloConfiguration.getDefaultConfiguration()); - + private SortedKeyValueIterator<Key,Value> createIteratorStack(float hitRatio, int numRows, int numDocsPerRow, Text[] columnFamilies, Text[] otherColumnFamilies, HashSet<Text> docs) throws IOException { Text nullText[] = new Text[0]; return createIteratorStack(hitRatio, numRows, numDocsPerRow, columnFamilies, otherColumnFamilies, docs, nullText); } - + private SortedKeyValueIterator<Key,Value> createIteratorStack(float hitRatio, int numRows, int numDocsPerRow, Text[] columnFamilies, Text[] otherColumnFamilies, HashSet<Text> docs, Text[] negatedColumns) throws IOException { // write a map file trf.openWriter(false); - + TreeMap<Key,Value> inMemoryMap = createSortedMap(hitRatio, numRows, numDocsPerRow, columnFamilies, otherColumnFamilies, docs, negatedColumns); trf.writer.startNewLocalityGroup("docs", RFileTest.ncfs(docColf.toString())); for (Entry<Key,Value> entry : inMemoryMap.entrySet()) { @@ -156,28 +156,28 @@ public class IndexedDocIteratorTest extends TestCase { if (entry.getKey().getColumnFamily().equals(indexColf)) trf.writer.append(entry.getKey(), entry.getValue()); } - + trf.closeWriter(); - + trf.openReader(); return trf.reader; } - + private synchronized static void cleanup() throws IOException { trf.closeReader(); docid = 0; } - + public void testNull() {} - + @Override public void setUp() { Logger.getRootLogger().setLevel(Level.ERROR); } - + private static final int NUM_ROWS = 5; private static final int NUM_DOCIDS = 200; - + public void test1() throws IOException { columnFamilies = new Text[2]; columnFamilies[0] = new Text("CC"); @@ -187,7 +187,7 @@ public class IndexedDocIteratorTest extends TestCase { otherColumnFamilies[1] = new Text("B"); otherColumnFamilies[2] = new Text("D"); otherColumnFamilies[3] = new Text("F"); - + float hitRatio = 0.5f; HashSet<Text> docs = new HashSet<Text>(); SortedKeyValueIterator<Key,Value> source = createIteratorStack(hitRatio, NUM_ROWS, NUM_DOCIDS, columnFamilies, otherColumnFamilies, docs); @@ -204,17 +204,17 @@ public class IndexedDocIteratorTest extends TestCase { Value v = iter.getTopValue(); // System.out.println(k.toString()); // System.out.println(iter.getDocID(k)); - + Text d = IndexedDocIterator.parseDocID(k); assertTrue(docs.contains(d)); assertTrue(new String(v.get()).endsWith(" docID=" + d)); - + iter.next(); } assertEquals(hitCount, docs.size()); cleanup(); } - + public void test2() throws IOException { columnFamilies = new Text[3]; columnFamilies[0] = new Text("A"); @@ -225,7 +225,7 @@ public class IndexedDocIteratorTest extends TestCase { otherColumnFamilies[1] = new Text("C"); otherColumnFamilies[2] = new Text("D"); otherColumnFamilies[3] = new Text("F"); - + float hitRatio = 0.5f; HashSet<Text> docs = new HashSet<Text>(); SortedKeyValueIterator<Key,Value> source = createIteratorStack(hitRatio, NUM_ROWS, NUM_DOCIDS, columnFamilies, otherColumnFamilies, docs); @@ -248,7 +248,7 @@ public class IndexedDocIteratorTest extends TestCase { assertEquals(hitCount, docs.size()); cleanup(); } - + public void test3() throws IOException { columnFamilies = new Text[6]; columnFamilies[0] = new Text("C"); @@ -262,7 +262,7 @@ public class IndexedDocIteratorTest extends TestCase { otherColumnFamilies[1] = new Text("B"); otherColumnFamilies[2] = new Text("D"); otherColumnFamilies[3] = new Text("F"); - + float hitRatio = 0.5f; HashSet<Text> docs = new HashSet<Text>(); SortedKeyValueIterator<Key,Value> source = createIteratorStack(hitRatio, NUM_ROWS, NUM_DOCIDS, columnFamilies, otherColumnFamilies, docs); @@ -290,7 +290,7 @@ public class IndexedDocIteratorTest extends TestCase { assertEquals(hitCount, docs.size()); cleanup(); } - + public void test4() throws IOException { columnFamilies = new Text[3]; boolean[] notFlags = new boolean[3]; @@ -308,7 +308,7 @@ public class IndexedDocIteratorTest extends TestCase { otherColumnFamilies[1] = new Text("C"); otherColumnFamilies[2] = new Text("D"); otherColumnFamilies[3] = new Text("F"); - + float hitRatio = 0.5f; HashSet<Text> docs = new HashSet<Text>(); SortedKeyValueIterator<Key,Value> source = createIteratorStack(hitRatio, NUM_ROWS, NUM_DOCIDS, columnFamilies, otherColumnFamilies, docs, negatedColumns);