Repository: incubator-carbondata
Updated Branches:
  refs/heads/master 87f745c60 -> 0a2841a2f


Added unit test for DictionaryBasedResultCollector

added unit test for RawBasedResultCollector


Project: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-carbondata/commit/247f2027
Tree: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/tree/247f2027
Diff: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/diff/247f2027

Branch: refs/heads/master
Commit: 247f2027e6091fc825b31c97461de7b8dea827c4
Parents: 87f745c
Author: kunal642 <kunal.kap...@knoldus.in>
Authored: Wed Nov 23 16:32:43 2016 +0530
Committer: ravipesala <ravi.pes...@gmail.com>
Committed: Mon Dec 5 18:50:20 2016 +0530

----------------------------------------------------------------------
 .../DictionaryBasedResultCollectorTest.java     | 190 +++++++++++++++++++
 .../impl/RawBasedResultCollectorTest.java       | 158 +++++++++++++++
 2 files changed, 348 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/247f2027/core/src/test/java/org/apache/carbondata/scan/collector/impl/DictionaryBasedResultCollectorTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/scan/collector/impl/DictionaryBasedResultCollectorTest.java
 
b/core/src/test/java/org/apache/carbondata/scan/collector/impl/DictionaryBasedResultCollectorTest.java
new file mode 100644
index 0000000..8900cef
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/scan/collector/impl/DictionaryBasedResultCollectorTest.java
@@ -0,0 +1,190 @@
+/*
+ * 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.carbondata.scan.collector.impl;
+
+import java.nio.ByteBuffer;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import 
org.apache.carbondata.core.carbon.datastore.chunk.MeasureColumnDataChunk;
+import 
org.apache.carbondata.core.carbon.metadata.blocklet.datachunk.PresenceMeta;
+import org.apache.carbondata.core.carbon.metadata.datatype.DataType;
+import 
org.apache.carbondata.core.carbon.metadata.schema.table.column.CarbonDimension;
+import 
org.apache.carbondata.core.carbon.metadata.schema.table.column.ColumnSchema;
+import org.apache.carbondata.core.constants.CarbonCommonConstants;
+import 
org.apache.carbondata.core.datastorage.store.dataholder.CarbonReadDataHolder;
+import 
org.apache.carbondata.core.keygenerator.directdictionary.DirectDictionaryGenerator;
+import 
org.apache.carbondata.core.keygenerator.directdictionary.DirectDictionaryKeyGeneratorFactory;
+import 
org.apache.carbondata.core.keygenerator.directdictionary.timestamp.TimeStampDirectDictionaryGenerator;
+import org.apache.carbondata.core.util.CarbonUtil;
+import org.apache.carbondata.core.util.DataTypeUtil;
+import org.apache.carbondata.scan.complextypes.ArrayQueryType;
+import org.apache.carbondata.scan.executor.infos.AggregatorInfo;
+import org.apache.carbondata.scan.executor.infos.BlockExecutionInfo;
+import org.apache.carbondata.scan.executor.infos.KeyStructureInfo;
+import org.apache.carbondata.scan.filter.GenericQueryType;
+import org.apache.carbondata.scan.model.QueryDimension;
+import org.apache.carbondata.scan.model.QueryMeasure;
+import org.apache.carbondata.scan.result.AbstractScannedResult;
+import org.apache.carbondata.scan.result.impl.NonFilterQueryScannedResult;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class DictionaryBasedResultCollectorTest {
+
+  private static DictionaryBasedResultCollector dictionaryBasedResultCollector;
+  private static BlockExecutionInfo blockExecutionInfo;
+
+  @BeforeClass public static void setUp() {
+    blockExecutionInfo = new BlockExecutionInfo();
+    KeyStructureInfo keyStructureInfo = new KeyStructureInfo();
+    blockExecutionInfo.setKeyStructureInfo(keyStructureInfo);
+    AggregatorInfo aggregatorInfo = new AggregatorInfo();
+    aggregatorInfo.setMeasureOrdinals(new int[] { 10, 20, 30, 40 });
+    aggregatorInfo.setMeasureExists(new boolean[] { true, false, false, false 
});
+    aggregatorInfo.setDefaultValues(new Object[] { 1, 2, 3, 4 });
+    aggregatorInfo.setMeasureDataTypes(
+        new DataType[] { DataType.INT, DataType.TIMESTAMP, DataType.INT, 
DataType.INT });
+    blockExecutionInfo.setAggregatorInfo(aggregatorInfo);
+    QueryDimension queryDimension1 = new QueryDimension("QDCol1");
+    queryDimension1.setQueryOrder(1);
+    ColumnSchema columnSchema = new ColumnSchema();
+    queryDimension1.setDimension(new CarbonDimension(columnSchema, 0, 0, 0, 
0));
+    QueryDimension queryDimension2 = new QueryDimension("QDCol2");
+    queryDimension2.setQueryOrder(2);
+    queryDimension2.setDimension(new CarbonDimension(columnSchema, 1, 1, 1, 
1));
+    QueryDimension queryDimension3 = new QueryDimension("QDCol3");
+    queryDimension3.setQueryOrder(3);
+    queryDimension3.setDimension(new CarbonDimension(columnSchema, 2, 0, 0, 
0));
+    QueryDimension queryDimension4 = new QueryDimension("QDCol4");
+    queryDimension4.setQueryOrder(4);
+    queryDimension4.setDimension(new CarbonDimension(columnSchema, 3, 0, 0, 
0));
+    blockExecutionInfo.setQueryDimensions(
+        new QueryDimension[] { queryDimension1, queryDimension2, 
queryDimension3,
+            queryDimension4 });
+    QueryMeasure queryMeasure1 = new QueryMeasure("QMCol1");
+    queryMeasure1.setQueryOrder(1);
+    QueryMeasure queryMeasure2 = new QueryMeasure("QMCol2");
+    queryMeasure1.setQueryOrder(2);
+    QueryMeasure queryMeasure3 = new QueryMeasure("QMCol3");
+    queryMeasure1.setQueryOrder(3);
+    QueryMeasure queryMeasure4 = new QueryMeasure("QMCol4");
+    queryMeasure1.setQueryOrder(4);
+    blockExecutionInfo.setQueryMeasures(
+        new QueryMeasure[] { queryMeasure1, queryMeasure2, queryMeasure3, 
queryMeasure4 });
+    Map<Integer, GenericQueryType> complexDimensionInfoMap = new HashMap<>();
+    complexDimensionInfoMap.put(1, new ArrayQueryType("name1", "parent1", 1));
+    complexDimensionInfoMap.put(2, new ArrayQueryType("name2", "parent2", 2));
+    complexDimensionInfoMap.put(3, new ArrayQueryType("name3", "parent3", 3));
+    complexDimensionInfoMap.put(4, new ArrayQueryType("name4", "parent4", 4));
+    blockExecutionInfo.setComplexDimensionInfoMap(complexDimensionInfoMap);
+    dictionaryBasedResultCollector = new 
DictionaryBasedResultCollector(blockExecutionInfo);
+  }
+
+  @Test public void testToCollectData() {
+    new MockUp<CarbonUtil>() {
+      @SuppressWarnings("unused") @Mock boolean[] getDictionaryEncodingArray(
+          QueryDimension[] queryDimensions) {
+        return new boolean[] { true, false, true, true };
+      }
+
+      @SuppressWarnings("unused") @Mock boolean[] 
getDirectDictionaryEncodingArray(
+          QueryDimension[] queryDimensions) {
+        return new boolean[] { true, true, false, false };
+      }
+
+      @SuppressWarnings("unused") @Mock boolean[] getComplexDataTypeArray(
+          QueryDimension[] queryDimensions) {
+        return new boolean[] { false, false, true, false };
+      }
+    };
+    new MockUp<DataTypeUtil>() {
+      @SuppressWarnings("unused") @Mock Object getDataBasedOnDataType(String 
data,
+          DataType actualDataType) {
+        return 1;
+      }
+    };
+
+    new MockUp<NonFilterQueryScannedResult>() {
+      @SuppressWarnings("unused") @Mock int[] getDictionaryKeyIntegerArray() {
+        this.getMockInstance().incrementCounter();
+        System.out.println("Mocked");
+        return new int[] { 1, 2 };
+      }
+
+      @SuppressWarnings("unused") @Mock String[] 
getNoDictionaryKeyStringArray() {
+        return new String[] { "1", "2" };
+      }
+
+      @SuppressWarnings("unused") @Mock byte[][] getComplexTypeKeyArray() {
+        return new byte[][] { { 1, 2 }, { 1, 2 } };
+      }
+
+      @SuppressWarnings("unused") @Mock public MeasureColumnDataChunk 
getMeasureChunk(int ordinal) {
+        MeasureColumnDataChunk measureColumnDataChunk = new 
MeasureColumnDataChunk();
+        PresenceMeta presenceMeta = new PresenceMeta();
+        BitSet bitSet = new BitSet();
+        bitSet.set(1);
+        presenceMeta.setBitSet(bitSet);
+        measureColumnDataChunk.setNullValueIndexHolder(presenceMeta);
+        CarbonReadDataHolder carbonReadDataHolder = new CarbonReadDataHolder();
+        carbonReadDataHolder.setReadableLongValues(new long[] { 1 });
+        measureColumnDataChunk.setMeasureDataHolder(carbonReadDataHolder);
+        return measureColumnDataChunk;
+      }
+    };
+
+    new MockUp<DirectDictionaryKeyGeneratorFactory>() {
+      @SuppressWarnings("unused") @Mock DirectDictionaryGenerator 
getDirectDictionaryGenerator(
+          DataType dataType) {
+        if (dataType == DataType.TIMESTAMP) return new 
TimeStampDirectDictionaryGenerator(
+            CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT);
+        else return null;
+      }
+    };
+    new MockUp<TimeStampDirectDictionaryGenerator>() {
+      @SuppressWarnings("unused") @Mock Object getValueFromSurrogate(int key) {
+        return 100L;
+      }
+    };
+
+    new MockUp<ArrayQueryType>() {
+      @SuppressWarnings("unused") @Mock Object 
getDataBasedOnDataTypeFromSurrogates(
+          ByteBuffer surrogateData) {
+        return ByteBuffer.wrap("1".getBytes());
+      }
+    };
+
+    AbstractScannedResult abstractScannedResult =
+        new NonFilterQueryScannedResult(blockExecutionInfo);
+    abstractScannedResult.setNumberOfRows(2);
+    List<Object[]> result = 
dictionaryBasedResultCollector.collectData(abstractScannedResult, 2);
+    int expectedResult = 2;
+    assertThat(result.size(), is(equalTo(expectedResult)));
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/247f2027/core/src/test/java/org/apache/carbondata/scan/collector/impl/RawBasedResultCollectorTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/carbondata/scan/collector/impl/RawBasedResultCollectorTest.java
 
b/core/src/test/java/org/apache/carbondata/scan/collector/impl/RawBasedResultCollectorTest.java
new file mode 100644
index 0000000..78b5916
--- /dev/null
+++ 
b/core/src/test/java/org/apache/carbondata/scan/collector/impl/RawBasedResultCollectorTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.carbondata.scan.collector.impl;
+
+import java.util.BitSet;
+import java.util.List;
+
+import 
org.apache.carbondata.core.carbon.datastore.chunk.MeasureColumnDataChunk;
+import 
org.apache.carbondata.core.carbon.metadata.blocklet.datachunk.PresenceMeta;
+import org.apache.carbondata.core.carbon.metadata.datatype.DataType;
+import 
org.apache.carbondata.core.carbon.metadata.schema.table.column.CarbonDimension;
+import 
org.apache.carbondata.core.carbon.metadata.schema.table.column.ColumnSchema;
+import 
org.apache.carbondata.core.datastorage.store.dataholder.CarbonReadDataHolder;
+import org.apache.carbondata.core.keygenerator.KeyGenException;
+import org.apache.carbondata.core.keygenerator.KeyGenerator;
+import org.apache.carbondata.scan.executor.infos.AggregatorInfo;
+import org.apache.carbondata.scan.executor.infos.BlockExecutionInfo;
+import org.apache.carbondata.scan.executor.infos.KeyStructureInfo;
+import org.apache.carbondata.scan.executor.util.QueryUtil;
+import org.apache.carbondata.scan.model.QueryDimension;
+import org.apache.carbondata.scan.model.QueryMeasure;
+import org.apache.carbondata.scan.result.AbstractScannedResult;
+import org.apache.carbondata.scan.result.impl.NonFilterQueryScannedResult;
+
+import mockit.Mock;
+import mockit.MockUp;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class RawBasedResultCollectorTest {
+
+  private static RawBasedResultCollector rawBasedResultCollector;
+  private static BlockExecutionInfo blockExecutionInfo;
+  private static KeyGenerator keyGenerator;
+
+  @BeforeClass public static void setUp() {
+    keyGenerator = new MockUp<KeyGenerator>() {
+      @SuppressWarnings("unused") @Mock long[] getKeyArray(byte[] key, int[] 
maskedByteRanges) {
+        return new long[] { 1, 2 };
+      }
+
+      @SuppressWarnings("unused") @Mock byte[] generateKey(long[] keys) throws 
KeyGenException {
+        return new byte[] { 1, 2 };
+      }
+
+    }.getMockInstance();
+
+    blockExecutionInfo = new BlockExecutionInfo();
+    KeyStructureInfo keyStructureInfo = new KeyStructureInfo();
+    keyStructureInfo.setKeyGenerator(keyGenerator);
+    keyStructureInfo.setMaxKey(new byte[] { 1, 2 });
+    keyStructureInfo.setMaskedBytes(new int[] { 1, 2 });
+    keyStructureInfo.setMaskByteRanges(new int[] { 1, 2 });
+    blockExecutionInfo.setKeyStructureInfo(keyStructureInfo);
+    AggregatorInfo aggregatorInfo = new AggregatorInfo();
+    aggregatorInfo.setMeasureOrdinals(new int[] { 10, 20, 30, 40 });
+    aggregatorInfo.setMeasureExists(new boolean[] { true, false, false, false 
});
+    aggregatorInfo.setDefaultValues(new Object[] { 1, 2, 3, 4 });
+    aggregatorInfo.setMeasureDataTypes(
+        new DataType[] { DataType.INT, DataType.TIMESTAMP, DataType.INT, 
DataType.INT });
+    QueryMeasure queryMeasure1 = new QueryMeasure("QMCol1");
+    queryMeasure1.setQueryOrder(1);
+    QueryMeasure queryMeasure2 = new QueryMeasure("QMCol2");
+    queryMeasure1.setQueryOrder(2);
+    QueryMeasure queryMeasure3 = new QueryMeasure("QMCol3");
+    queryMeasure1.setQueryOrder(3);
+    QueryMeasure queryMeasure4 = new QueryMeasure("QMCol4");
+    queryMeasure1.setQueryOrder(4);
+    QueryDimension queryDimension1 = new QueryDimension("QDCol1");
+    queryDimension1.setQueryOrder(1);
+    ColumnSchema columnSchema = new ColumnSchema();
+    queryDimension1.setDimension(new CarbonDimension(columnSchema, 0, 0, 0, 
0));
+    QueryDimension queryDimension2 = new QueryDimension("QDCol2");
+    queryDimension2.setQueryOrder(2);
+    queryDimension2.setDimension(new CarbonDimension(columnSchema, 1, 1, 1, 
1));
+    QueryDimension queryDimension3 = new QueryDimension("QDCol3");
+    queryDimension3.setQueryOrder(3);
+    queryDimension3.setDimension(new CarbonDimension(columnSchema, 2, 0, 0, 
0));
+    QueryDimension queryDimension4 = new QueryDimension("QDCol4");
+    queryDimension4.setQueryOrder(4);
+    queryDimension4.setDimension(new CarbonDimension(columnSchema, 3, 0, 0, 
0));
+    blockExecutionInfo.setQueryDimensions(
+        new QueryDimension[] { queryDimension1, queryDimension2, 
queryDimension3,
+            queryDimension4 });
+    blockExecutionInfo.setQueryMeasures(
+        new QueryMeasure[] { queryMeasure1, queryMeasure2, queryMeasure3, 
queryMeasure4 });
+    blockExecutionInfo.setFixedKeyUpdateRequired(true);
+    blockExecutionInfo.setAggregatorInfo(aggregatorInfo);
+    blockExecutionInfo.setMaskedByteForBlock(new int[] { 1, 2 });
+    blockExecutionInfo.setBlockKeyGenerator(keyGenerator);
+    rawBasedResultCollector = new RawBasedResultCollector(blockExecutionInfo);
+  }
+
+  @Test public void testToCollectData() {
+
+    new MockUp<NonFilterQueryScannedResult>() {
+      @SuppressWarnings("unused") @Mock byte[] getDictionaryKeyArray() {
+        this.getMockInstance().incrementCounter();
+        return new byte[] { 1, 2 };
+      }
+
+      @SuppressWarnings("unused") @Mock byte[][] getNoDictionaryKeyArray() {
+        return new byte[][] { { 1, 2 } };
+      }
+
+      @SuppressWarnings("unused") @Mock byte[][] getComplexTypeKeyArray() {
+        return new byte[][] { { 1, 2 }, { 1, 2 } };
+      }
+
+      @SuppressWarnings("unused") @Mock public MeasureColumnDataChunk 
getMeasureChunk(int ordinal) {
+        MeasureColumnDataChunk measureColumnDataChunk = new 
MeasureColumnDataChunk();
+        PresenceMeta presenceMeta = new PresenceMeta();
+        BitSet bitSet = new BitSet();
+        bitSet.set(1);
+        presenceMeta.setBitSet(bitSet);
+        measureColumnDataChunk.setNullValueIndexHolder(presenceMeta);
+        CarbonReadDataHolder carbonReadDataHolder = new CarbonReadDataHolder();
+        carbonReadDataHolder.setReadableLongValues(new long[] { 1 });
+        measureColumnDataChunk.setMeasureDataHolder(carbonReadDataHolder);
+        return measureColumnDataChunk;
+      }
+    };
+
+    new MockUp<QueryUtil>() {
+      @SuppressWarnings("unused") @Mock byte[] getMaskedKey(byte[] data, 
byte[] maxKey,
+          int[] maskByteRanges, int byteCount) {
+        return new byte[] { 1, 2 };
+      }
+    };
+
+    AbstractScannedResult abstractScannedResult =
+        new NonFilterQueryScannedResult(blockExecutionInfo);
+    abstractScannedResult.setNumberOfRows(2);
+    List<Object[]> result = 
rawBasedResultCollector.collectData(abstractScannedResult, 2);
+    int expectedResult = 2;
+    assertThat(result.size(), is(equalTo(expectedResult)));
+  }
+}

Reply via email to