blob: 0b5d8018d698356fcead4c4ae851e2f12d6e07a9 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.pig.backend.hadoop.accumulo;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.accumulo.core.data.ColumnUpdate;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.iterators.user.WholeRowIterator;
import org.apache.commons.cli.ParseException;
import org.apache.pig.data.DataByteArray;
import org.apache.pig.data.DataType;
import org.apache.pig.data.InternalMap;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class TestAccumuloStorage {
@Test
public void testWrite1Tuple() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage();
Tuple t = TupleFactory.getInstance().newTuple(1);
t.set(0, "row");
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(0, mutations.size());
}
@Test(expected = ClassCastException.class)
public void testWriteLiteralAsMap() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage();
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, "value");
storage.getMutations(t).size();
}
@Test(expected = ClassCastException.class)
public void testWriteLiteralAsMapWithAsterisk() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("*");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, "value");
storage.getMutations(t).size();
}
@Test
public void testWrite2TupleWithColumn() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("col");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, "value");
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(1, colUpdates.size());
ColumnUpdate colUpdate = colUpdates.get(0);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes()));
Assert.assertTrue("CQ not equal",
Arrays.equals(colUpdate.getColumnQualifier(), new byte[0]));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value".getBytes()));
}
@Test
public void testWrite2TupleWithColumnQual() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col:qual");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, "value");
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(1, colUpdates.size());
ColumnUpdate colUpdate = colUpdates.get(0);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes()));
Assert.assertTrue("CQ not equal", Arrays.equals(
colUpdate.getColumnQualifier(), "qual".getBytes()));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value".getBytes()));
}
@Test
public void testWrite2TupleWithMixedColumns() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage(
"col1,col1:qual,col2:qual,col2");
Tuple t = TupleFactory.getInstance().newTuple(5);
t.set(0, "row");
t.set(1, "value1");
t.set(2, "value2");
t.set(3, "value3");
t.set(4, "value4");
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(4, colUpdates.size());
ColumnUpdate colUpdate = colUpdates.get(0);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col1".getBytes()));
Assert.assertTrue("CQ not equal",
Arrays.equals(colUpdate.getColumnQualifier(), new byte[0]));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value1".getBytes()));
colUpdate = colUpdates.get(1);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col1".getBytes()));
Assert.assertTrue("CQ not equal", Arrays.equals(
colUpdate.getColumnQualifier(), "qual".getBytes()));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value2".getBytes()));
colUpdate = colUpdates.get(2);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col2".getBytes()));
Assert.assertTrue("CQ not equal", Arrays.equals(
colUpdate.getColumnQualifier(), "qual".getBytes()));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value3".getBytes()));
colUpdate = colUpdates.get(3);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col2".getBytes()));
Assert.assertTrue("CQ not equal",
Arrays.equals(colUpdate.getColumnQualifier(), new byte[0]));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value4".getBytes()));
}
@Test
public void testWriteIgnoredExtraColumns() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col");
Tuple t = TupleFactory.getInstance().newTuple(3);
t.set(0, "row");
t.set(1, "value1");
t.set(2, "value2");
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(1, colUpdates.size());
ColumnUpdate colUpdate = colUpdates.get(0);
Assert.assertTrue("CF not equal",
Arrays.equals(colUpdate.getColumnFamily(), "col".getBytes()));
Assert.assertTrue("CQ not equal",
Arrays.equals(colUpdate.getColumnQualifier(), new byte[0]));
Assert.assertTrue("Values not equal",
Arrays.equals(colUpdate.getValue(), "value1".getBytes()));
}
@Test
public void testWriteIgnoredExtraMap() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("col1");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(3);
t.set(0, "row");
t.set(1, "value1");
t.set(2, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(1, colUpdates.size());
ColumnUpdate update = colUpdates.get(0);
Assert.assertEquals("col1", new String(update.getColumnFamily()));
Assert.assertEquals("", new String(update.getColumnQualifier()));
Assert.assertEquals("value1", new String(update.getValue()));
}
@Test
public void testWriteMultipleColumnsWithNonExpandedMap()
throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("col1,col2");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(3);
t.set(0, "row");
t.set(1, "value1");
t.set(2, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(2, colUpdates.size());
ColumnUpdate update = colUpdates.get(0);
Assert.assertEquals("col1", new String(update.getColumnFamily()));
Assert.assertEquals("", new String(update.getColumnQualifier()));
Assert.assertEquals("value1", new String(update.getValue()));
update = colUpdates.get(1);
Assert.assertEquals("col2", new String(update.getColumnFamily()));
Assert.assertEquals("", new String(update.getColumnQualifier()));
Assert.assertArrayEquals(storage.objToBytes(map, DataType.MAP),
update.getValue());
}
@Test
public void testWriteMultipleColumnsWithExpandedMap() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col1,col2:");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(3);
t.set(0, "row");
t.set(1, "value1");
t.set(2, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(5, colUpdates.size());
ColumnUpdate update = colUpdates.get(0);
Assert.assertEquals("col1", new String(update.getColumnFamily()));
Assert.assertEquals("", new String(update.getColumnQualifier()));
Assert.assertEquals("value1", new String(update.getValue()));
Map<Entry<String, String>, String> expectations = Maps.newHashMap();
expectations.put(Maps.immutableEntry("col2", "mapcol1"), "mapval1");
expectations.put(Maps.immutableEntry("col2", "mapcol2"), "mapval2");
expectations.put(Maps.immutableEntry("col2", "mapcol3"), "mapval3");
expectations.put(Maps.immutableEntry("col2", "mapcol4"), "mapval4");
for (int i = 1; i < 5; i++) {
update = colUpdates.get(i);
Entry<String, String> key = Maps.immutableEntry(
new String(update.getColumnFamily()),
new String(update.getColumnQualifier()));
String value = new String(update.getValue());
Assert.assertTrue("Did not find expected key: " + key,
expectations.containsKey(key));
String actual = expectations.remove(key);
Assert.assertEquals(value, actual);
}
Assert.assertTrue("Did not find all expectations",
expectations.isEmpty());
}
@Test
public void testWriteMapWithColFamWithColon() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col:");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(4, colUpdates.size());
Map<Entry<String, String>, String> expectations = Maps.newHashMap();
expectations.put(Maps.immutableEntry("col", "mapcol1"), "mapval1");
expectations.put(Maps.immutableEntry("col", "mapcol2"), "mapval2");
expectations.put(Maps.immutableEntry("col", "mapcol3"), "mapval3");
expectations.put(Maps.immutableEntry("col", "mapcol4"), "mapval4");
for (ColumnUpdate update : colUpdates) {
Entry<String, String> key = Maps.immutableEntry(
new String(update.getColumnFamily()),
new String(update.getColumnQualifier()));
String value = new String(update.getValue());
Assert.assertTrue("Did not find expected key: " + key,
expectations.containsKey(key));
String actual = expectations.remove(key);
Assert.assertEquals(value, actual);
}
Assert.assertTrue("Did not find all expectations",
expectations.isEmpty());
}
@Test
public void testWriteMapWithColFamWithColonAsterisk() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col:*");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(4, colUpdates.size());
Map<Entry<String, String>, String> expectations = Maps.newHashMap();
expectations.put(Maps.immutableEntry("col", "mapcol1"), "mapval1");
expectations.put(Maps.immutableEntry("col", "mapcol2"), "mapval2");
expectations.put(Maps.immutableEntry("col", "mapcol3"), "mapval3");
expectations.put(Maps.immutableEntry("col", "mapcol4"), "mapval4");
for (ColumnUpdate update : colUpdates) {
Entry<String, String> key = Maps.immutableEntry(
new String(update.getColumnFamily()),
new String(update.getColumnQualifier()));
String value = new String(update.getValue());
Assert.assertTrue("Did not find expected key: " + key,
expectations.containsKey(key));
String actual = expectations.remove(key);
Assert.assertEquals(value, actual);
}
Assert.assertTrue("Did not find all expectations",
expectations.isEmpty());
}
@Test
public void testWriteMapWithColFamColQualPrefix() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("col:qual_*");
Map<String, Object> map = Maps.newHashMap();
map.put("mapcol1", "mapval1");
map.put("mapcol2", "mapval2");
map.put("mapcol3", "mapval3");
map.put("mapcol4", "mapval4");
Tuple t = TupleFactory.getInstance().newTuple(2);
t.set(0, "row");
t.set(1, map);
Collection<Mutation> mutations = storage.getMutations(t);
Assert.assertEquals(1, mutations.size());
Mutation m = mutations.iterator().next();
Assert.assertTrue("Rows not equal",
Arrays.equals(m.getRow(), ((String) t.get(0)).getBytes()));
List<ColumnUpdate> colUpdates = m.getUpdates();
Assert.assertEquals(4, colUpdates.size());
Map<Entry<String, String>, String> expectations = Maps.newHashMap();
expectations.put(Maps.immutableEntry("col", "qual_mapcol1"), "mapval1");
expectations.put(Maps.immutableEntry("col", "qual_mapcol2"), "mapval2");
expectations.put(Maps.immutableEntry("col", "qual_mapcol3"), "mapval3");
expectations.put(Maps.immutableEntry("col", "qual_mapcol4"), "mapval4");
for (ColumnUpdate update : colUpdates) {
Entry<String, String> key = Maps.immutableEntry(
new String(update.getColumnFamily()),
new String(update.getColumnQualifier()));
String value = new String(update.getValue());
Assert.assertTrue(expectations.containsKey(key));
String actual = expectations.remove(key);
Assert.assertEquals(value, actual);
}
Assert.assertTrue("Did not find all expectations",
expectations.isEmpty());
}
@Test
public void testReadSingleKey() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage();
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "", "col1"));
values.add(new Value("value1".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put(":col1", new DataByteArray("value1"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadSingleColumn() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage();
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "col1", "cq1"));
keys.add(new Key("1", "col1", "cq2"));
keys.add(new Key("1", "col1", "cq3"));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put("col1:cq1", new DataByteArray("value1"));
map.put("col1:cq2", new DataByteArray("value2"));
map.put("col1:cq3", new DataByteArray("value3"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadMultipleColumnsAggregateColfamsAsterisk()
throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("*");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "col1", "cq1"));
keys.add(new Key("1", "col1", "cq2"));
keys.add(new Key("1", "col1", "cq3"));
keys.add(new Key("1", "col2", "cq1"));
keys.add(new Key("1", "col3", "cq1"));
keys.add(new Key("1", "col3", "cq2"));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put("col1:cq1", new DataByteArray("value1"));
map.put("col1:cq2", new DataByteArray("value2"));
map.put("col1:cq3", new DataByteArray("value3"));
map.put("col2:cq1", new DataByteArray("value1"));
map.put("col3:cq1", new DataByteArray("value1"));
map.put("col3:cq2", new DataByteArray("value2"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadMultipleColumnsAggregateColfamsAsteriskEmptyColfam()
throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("*");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "col1", ""));
keys.add(new Key("1", "col2", ""));
keys.add(new Key("1", "col3", ""));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put("col1", new DataByteArray("value1"));
map.put("col2", new DataByteArray("value2"));
map.put("col3", new DataByteArray("value3"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadMultipleColumnsEmptyString() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "col1", "cq1"));
keys.add(new Key("1", "col1", "cq2"));
keys.add(new Key("1", "col1", "cq3"));
keys.add(new Key("1", "col2", "cq1"));
keys.add(new Key("1", "col3", "cq1"));
keys.add(new Key("1", "col3", "cq2"));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put("col1:cq1", new DataByteArray("value1"));
map.put("col1:cq2", new DataByteArray("value2"));
map.put("col1:cq3", new DataByteArray("value3"));
map.put("col2:cq1", new DataByteArray("value1"));
map.put("col3:cq1", new DataByteArray("value1"));
map.put("col3:cq2", new DataByteArray("value2"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadMultipleColumnsNoColfamAggregate() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage();
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "col1", "cq1"));
keys.add(new Key("1", "col1", "cq2"));
keys.add(new Key("1", "col1", "cq3"));
keys.add(new Key("1", "col2", "cq1"));
keys.add(new Key("1", "col3", "cq1"));
keys.add(new Key("1", "col3", "cq2"));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value1".getBytes()));
values.add(new Value("value2".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(2, t.size());
Assert.assertEquals("1", t.get(0).toString());
InternalMap map = new InternalMap();
map.put("col1:cq1", new DataByteArray("value1"));
map.put("col1:cq2", new DataByteArray("value2"));
map.put("col1:cq3", new DataByteArray("value3"));
map.put("col2:cq1", new DataByteArray("value1"));
map.put("col3:cq1", new DataByteArray("value1"));
map.put("col3:cq2", new DataByteArray("value2"));
Assert.assertEquals(map, t.get(1));
}
@Test
public void testReadMultipleScalars() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("col1,col3,col5");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
// Filtering by AccumuloInputFormat isn't applied here since we're
// shortcircuiting things
keys.add(new Key("1", "col1", ""));
// keys.add(new Key("1", "col2", ""));
keys.add(new Key("1", "col3", ""));
// keys.add(new Key("1", "col4", ""));
keys.add(new Key("1", "col5", ""));
values.add(new Value("value1".getBytes()));
// values.add(new Value("value2".getBytes()));
values.add(new Value("value3".getBytes()));
// values.add(new Value("value4".getBytes()));
values.add(new Value("value5".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(4, t.size());
Assert.assertEquals("1", t.get(0).toString());
Assert.assertEquals("value1", t.get(1).toString());
Assert.assertEquals("value3", t.get(2).toString());
Assert.assertEquals("value5", t.get(3).toString());
}
@Test
public void testUnsortedColumnList() throws IOException, ParseException {
AccumuloStorage storage = new AccumuloStorage("z,a");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "a", ""));
keys.add(new Key("1", "z", ""));
values.add(new Value("a".getBytes()));
values.add(new Value("z".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(3, t.size());
Assert.assertEquals("z", t.get(1).toString());
Assert.assertEquals("a", t.get(2).toString());
}
@Test
public void testReadMultipleScalarsAndMaps() throws IOException,
ParseException {
AccumuloStorage storage = new AccumuloStorage("z,r:,m:2,b:");
List<Key> keys = Lists.newArrayList();
List<Value> values = Lists.newArrayList();
keys.add(new Key("1", "a", "1"));
keys.add(new Key("1", "b", "1"));
keys.add(new Key("1", "b", "2"));
keys.add(new Key("1", "f", "1"));
keys.add(new Key("1", "f", "2"));
keys.add(new Key("1", "m", "1"));
keys.add(new Key("1", "m", "2"));
keys.add(new Key("1", "r", "1"));
keys.add(new Key("1", "r", "2"));
keys.add(new Key("1", "r", "3"));
keys.add(new Key("1", "z", ""));
values.add(new Value("a1".getBytes()));
values.add(new Value("b1".getBytes()));
values.add(new Value("b2".getBytes()));
values.add(new Value("f1".getBytes()));
values.add(new Value("f2".getBytes()));
values.add(new Value("m1".getBytes()));
values.add(new Value("m2".getBytes()));
values.add(new Value("r1".getBytes()));
values.add(new Value("r2".getBytes()));
values.add(new Value("r3".getBytes()));
values.add(new Value("z1".getBytes()));
Key k = new Key("1");
Value v = WholeRowIterator.encodeRow(keys, values);
Tuple t = storage.getTuple(k, v);
Assert.assertEquals(5, t.size());
Assert.assertEquals(new DataByteArray("z1".getBytes()), t.get(1));
HashMap<String, DataByteArray> rMap = new HashMap<String, DataByteArray>();
rMap.put("r:1", new DataByteArray("r1".getBytes()));
rMap.put("r:2", new DataByteArray("r2".getBytes()));
rMap.put("r:3", new DataByteArray("r3".getBytes()));
Assert.assertEquals(rMap, t.get(2));
Assert.assertEquals(new DataByteArray("m2".getBytes()), t.get(3));
HashMap<String, DataByteArray> bMap = new HashMap<String, DataByteArray>();
bMap.put("b:1", new DataByteArray("b1".getBytes()));
bMap.put("b:2", new DataByteArray("b2".getBytes()));
Assert.assertEquals(bMap, t.get(4));
}
}