You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2015/12/11 14:11:39 UTC
[3/4] lens git commit: LENS-885: Cleanup of Cube test cases
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
index e5dbde7..c6ce6ad 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
@@ -19,9 +19,9 @@
package org.apache.lens.cube.metadata;
+import static org.apache.lens.cube.metadata.DateFactory.*;
import static org.apache.lens.cube.metadata.MetastoreUtil.*;
import static org.apache.lens.cube.metadata.UpdatePeriod.*;
-import static org.apache.lens.cube.parse.CubeTestSetup.DateOffsetProvider;
import static org.apache.lens.server.api.util.LensUtil.getHashMap;
import static org.testng.Assert.*;
@@ -35,7 +35,6 @@ import org.apache.lens.cube.metadata.timeline.EndsAndHolesPartitionTimeline;
import org.apache.lens.cube.metadata.timeline.PartitionTimeline;
import org.apache.lens.cube.metadata.timeline.StoreAllPartitionTimeline;
import org.apache.lens.cube.metadata.timeline.TestPartitionTimelines;
-import org.apache.lens.cube.parse.TimeRange;
import org.apache.lens.server.api.error.LensException;
import org.apache.lens.server.api.util.LensUtil;
@@ -100,11 +99,7 @@ public class TestCubeMetastoreClient {
private static Set<ExprColumn> cubeExpressions = new HashSet<>();
private static Set<JoinChain> joinChains = new HashSet<>();
private static Set<ExprColumn> dimExpressions = new HashSet<>();
- private static DateOffsetProvider dateOffsetProvider = new DateOffsetProvider(HOURLY);
- public static Date getDateWithOffset(int i) {
- return dateOffsetProvider.get(i);
- }
/**
* Get the date partition as field schema
@@ -127,7 +122,7 @@ public class TestCubeMetastoreClient {
private static HashMap<String, Date> getTimePartitionByOffsets(Object... args) {
for (int i = 1; i < args.length; i += 2) {
if (args[i] instanceof Integer) {
- args[i] = getDateWithOffset((Integer) args[i]);
+ args[i] = getDateWithOffset(HOURLY, (Integer) args[i]);
}
}
return getHashMap(args);
@@ -169,13 +164,13 @@ public class TestCubeMetastoreClient {
new FieldSchema("msr4", "bigint", "fourth measure"), "Measure4", null, "COUNT", null));
cubeMeasures.add(new ColumnMeasure(
new FieldSchema("msrstarttime", "int", "measure with start time"),
- "Measure With Starttime", null, null, null, getDateWithOffset(0), null, null, 0.0, 999999.0));
+ "Measure With Starttime", null, null, null, NOW, null, null, 0.0, 999999.0));
cubeMeasures.add(new ColumnMeasure(
new FieldSchema("msrendtime", "float", "measure with end time"),
- "Measure With Endtime", null, "SUM", "RS", getDateWithOffset(0), getDateWithOffset(0), null));
+ "Measure With Endtime", null, "SUM", "RS", NOW, NOW, null));
cubeMeasures.add(new ColumnMeasure(
new FieldSchema("msrcost", "double", "measure with cost"), "Measure With cost",
- null, "MAX", null, getDateWithOffset(0), getDateWithOffset(0), 100.0));
+ null, "MAX", null, NOW, NOW, 100.0));
cubeMeasures.add(new ColumnMeasure(
new FieldSchema("msrcost2", "bigint", "measure with cost"),
"Measure With cost2", null, "MAX", null, null, null, 100.0, 0.0, 999999999999999999999999999.0));
@@ -234,12 +229,12 @@ public class TestCubeMetastoreClient {
List<CubeDimAttribute> locationHierarchyWithStartTime = new ArrayList<>();
locationHierarchyWithStartTime.add(new ReferencedDimAtrribute(new FieldSchema("zipcode2", "int", "zip"),
- "Zip refer2", new TableReference("zipdim", "zipcode"), getDateWithOffset(0), getDateWithOffset(0),
+ "Zip refer2", new TableReference("zipdim", "zipcode"), NOW, NOW,
100.0, true, 1000L));
locationHierarchyWithStartTime.add(new ReferencedDimAtrribute(new FieldSchema("cityid2", "int", "city"),
- "City refer2", new TableReference("citydim", "id"), getDateWithOffset(0), null, null));
+ "City refer2", new TableReference("citydim", "id"), NOW, null, null));
locationHierarchyWithStartTime.add(new ReferencedDimAtrribute(new FieldSchema("stateid2", "int", "state"),
- "state refer2", new TableReference("statedim", "id"), getDateWithOffset(0), null, 100.0));
+ "state refer2", new TableReference("statedim", "id"), NOW, null, 100.0));
locationHierarchyWithStartTime.add(new ReferencedDimAtrribute(new FieldSchema("countryid2", "int", "country"),
"Country refer2", new TableReference("countrydim", "id"), null, null, null));
locationHierarchyWithStartTime.add(new BaseDimAttribute(new FieldSchema("regionname2", "string", "region"),
@@ -248,9 +243,10 @@ public class TestCubeMetastoreClient {
cubeDimensions
.add(new HierarchicalDimAttribute("location2", "localtion hierarchy2", locationHierarchyWithStartTime));
cubeDimensions.add(new BaseDimAttribute(new FieldSchema("dim1startTime", "string", "basedim"),
- "Dim With starttime", getDateWithOffset(0), null, 100.0));
+ "Dim With starttime", NOW, null, 100.0));
cubeDimensions.add(new ReferencedDimAtrribute(new FieldSchema("dim2start", "string", "ref dim"),
- "Dim2 with starttime", new TableReference("testdim2", "id"), getDateWithOffset(0), getDateWithOffset(0), 100.0));
+ "Dim2 with starttime", new TableReference("testdim2", "id"),
+ NOW, NOW, 100.0));
List<TableReference> multiRefs = new ArrayList<>();
multiRefs.add(new TableReference("testdim2", "id"));
@@ -260,12 +256,12 @@ public class TestCubeMetastoreClient {
cubeDimensions.add(new ReferencedDimAtrribute(new FieldSchema("dim3", "string", "multi ref dim"), "Dim3 refer",
multiRefs));
cubeDimensions.add(new ReferencedDimAtrribute(new FieldSchema("dim3start", "string", "multi ref dim"),
- "Dim3 with starttime", multiRefs, getDateWithOffset(0), null, 100.0));
+ "Dim3 with starttime", multiRefs, NOW, null, 100.0));
cubeDimensions.add(new BaseDimAttribute(new FieldSchema("region", "string", "region dim"), "region", null, null,
null, null, regions));
cubeDimensions.add(new BaseDimAttribute(new FieldSchema("regionstart", "string", "region dim"),
- "Region with starttime", getDateWithOffset(0), null, 100.0, null, regions));
+ "Region with starttime", NOW, null, 100.0, null, regions));
JoinChain zipCity = new JoinChain("cityFromZip", "Zip City", "zip city desc");
List<TableReference> chain = new ArrayList<>();
chain.add(new TableReference(cubeName, "zipcode"));
@@ -1317,13 +1313,12 @@ public class TestCubeMetastoreClient {
StoreAllPartitionTimeline storeAllPartitionTimeline, UpdatePeriod updatePeriod,
int firstOffset, int latestOffset, int... holeOffsets) throws LensException {
Date[] holeDates = new Date[holeOffsets.length];
- for (int i = 0; i < holeOffsets.length; i++) {
- holeDates[i] = getDateWithOffset(holeOffsets[i]);
+ for(int i = 0; i < holeOffsets.length; i++) {
+ holeDates[i] = getDateWithOffset(HOURLY, holeOffsets[i]);
}
assertTimeline(endsAndHolesPartitionTimeline, storeAllPartitionTimeline, updatePeriod,
- getDateWithOffset(firstOffset), getDateWithOffset(latestOffset), holeDates);
+ getDateWithOffset(HOURLY, firstOffset), getDateWithOffset(HOURLY, latestOffset), holeDates);
}
-
private void assertTimeline(EndsAndHolesPartitionTimeline endsAndHolesPartitionTimeline,
StoreAllPartitionTimeline storeAllPartitionTimeline, UpdatePeriod updatePeriod,
Date first, Date latest, Date... holes) throws LensException {
@@ -1397,10 +1392,10 @@ public class TestCubeMetastoreClient {
return values;
}
- private TimePartition[] toPartitionArray(UpdatePeriod updatePeriod, Date... dates) throws LensException {
- TimePartition[] values = new TimePartition[dates.length];
- for (int i = 0; i < dates.length; i++) {
- values[i] = TimePartition.of(updatePeriod, dates[i]);
+ private TimePartition[] toPartitionArray(UpdatePeriod updatePeriod, int... offsets) throws LensException {
+ TimePartition[] values = new TimePartition[offsets.length];
+ for (int i = 0; i < offsets.length; i++) {
+ values[i] = TimePartition.of(updatePeriod, getDateWithOffset(updatePeriod, offsets[i]));
}
return values;
}
@@ -1709,8 +1704,7 @@ public class TestCubeMetastoreClient {
List<Partition> parts = client.getPartitionsByFilter(storageTableName, "dt='latest'");
assertEquals(1, parts.size());
assertEquals(TextInputFormat.class.getCanonicalName(), parts.get(0).getInputFormatClass().getCanonicalName());
- assertEquals(parts.get(0).getParameters().get(getLatestPartTimestampKey("dt")),
- HOURLY.format(getDateWithOffset(0)));
+ assertEquals(parts.get(0).getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 0));
client.dropPartition(cubeDim.getName(), c1, timeParts, null, HOURLY);
assertFalse(client.dimPartitionExists(cubeDim.getName(), c1, timeParts));
@@ -1769,7 +1763,7 @@ public class TestCubeMetastoreClient {
String storageTableName = getFactOrDimtableStorageTableName(dimName, c1);
assertFalse(client.dimTableLatestPartitionExists(storageTableName));
- Map<String, Date> timePartsNow = getHashMap(getDatePartitionKey(), getDateWithOffset(0));
+ Map<String, Date> timePartsNow = getHashMap(getDatePartitionKey(), NOW);
StoragePartitionDesc sPartSpec0 = new StoragePartitionDesc(cubeDim.getName(), timePartsNow, null, HOURLY);
client.addPartition(sPartSpec0, c1);
@@ -1782,7 +1776,7 @@ public class TestCubeMetastoreClient {
Partition latestPart = parts.get(0);
assertEquals(latestPart.getInputFormatClass(), TextInputFormat.class);
assertFalse(latestPart.getCols().contains(newcol));
- assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), HOURLY.format(getDateWithOffset(0)));
+ assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 0));
// Partition with different schema
cubeDim.alterColumn(newcol);
@@ -1805,7 +1799,7 @@ public class TestCubeMetastoreClient {
latestPart = parts.get(0);
assertEquals(latestPart.getInputFormatClass(), SequenceFileInputFormat.class);
assertTrue(latestPart.getCols().contains(newcol));
- assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), HOURLY.format(getDateWithOffset(1)));
+ assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 1));
// add one more partition
Map<String, Date> timeParts2 = getTimePartitionByOffsets(getDatePartitionKey(), 2);
@@ -1824,7 +1818,7 @@ public class TestCubeMetastoreClient {
latestPart = parts.get(0);
assertEquals(latestPart.getInputFormatClass(), TextInputFormat.class);
assertTrue(latestPart.getCols().contains(newcol));
- assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), HOURLY.format(getDateWithOffset(2)));
+ assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 2));
// drop the last added partition
client.dropPartition(cubeDim.getName(), c1, timeParts2, null, HOURLY);
@@ -1835,8 +1829,7 @@ public class TestCubeMetastoreClient {
assertEquals(parts.size(), 1);
latestPart = parts.get(0);
assertEquals(latestPart.getInputFormatClass(), SequenceFileInputFormat.class);
- assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")),
- HOURLY.format(getDateWithOffset(1)));
+ assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 1));
assertEquals(client.getAllParts(storageTableName).size(), 3);
// drop the first partition, leaving the middle.
@@ -1848,8 +1841,7 @@ public class TestCubeMetastoreClient {
assertEquals(parts.size(), 1);
latestPart = parts.get(0);
assertEquals(latestPart.getInputFormatClass(), SequenceFileInputFormat.class);
- assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")),
- HOURLY.format(getDateWithOffset(1)));
+ assertEquals(latestPart.getParameters().get(getLatestPartTimestampKey("dt")), getDateStringWithOffset(HOURLY, 1));
assertEquals(client.getAllParts(storageTableName).size(), 2);
client.dropPartition(cubeDim.getName(), c1, timeParts1, null, HOURLY);
@@ -1892,52 +1884,52 @@ public class TestCubeMetastoreClient {
Map<String, Date> timeParts = new HashMap<>();
Map<String, String> nonTimeParts = new HashMap<>();
- timeParts.put(getDatePartitionKey(), getDateWithOffset(0));
+ timeParts.put(getDatePartitionKey(), NOW);
nonTimeParts.put("region", "asia");
StoragePartitionDesc sPartSpec = new StoragePartitionDesc(dimName, timeParts, nonTimeParts, HOURLY);
client.addPartition(sPartSpec, c3);
- expectedLatestValues.put("asia", getDateWithOffset(0));
+ expectedLatestValues.put("asia", NOW);
assertLatestForRegions(storageTableName, expectedLatestValues);
- timeParts.put(getDatePartitionKey(), getDateWithOffset(-1));
+ timeParts.put(getDatePartitionKey(), getDateWithOffset(HOURLY, -1));
nonTimeParts.put("region", "africa");
sPartSpec = new StoragePartitionDesc(dimName, timeParts, nonTimeParts, HOURLY);
client.addPartition(sPartSpec, c3);
- expectedLatestValues.put("asia", getDateWithOffset(0));
- expectedLatestValues.put("africa", getDateWithOffset(-1));
+ expectedLatestValues.put("asia", NOW);
+ expectedLatestValues.put("africa", getDateWithOffset(HOURLY, -1));
assertLatestForRegions(storageTableName, expectedLatestValues);
- timeParts.put(getDatePartitionKey(), getDateWithOffset(1));
+ timeParts.put(getDatePartitionKey(), getDateWithOffset(HOURLY, 1));
nonTimeParts.put("region", "africa");
sPartSpec = new StoragePartitionDesc(dimName, timeParts, nonTimeParts, HOURLY);
client.addPartition(sPartSpec, c3);
- expectedLatestValues.put("asia", getDateWithOffset(0));
- expectedLatestValues.put("africa", getDateWithOffset(1));
+ expectedLatestValues.put("asia", NOW);
+ expectedLatestValues.put("africa", getDateWithOffset(HOURLY, 1));
assertLatestForRegions(storageTableName, expectedLatestValues);
- timeParts.put(getDatePartitionKey(), getDateWithOffset(3));
+ timeParts.put(getDatePartitionKey(), getDateWithOffset(HOURLY, 3));
nonTimeParts.put("region", "asia");
sPartSpec = new StoragePartitionDesc(dimName, timeParts, nonTimeParts, HOURLY);
client.addPartition(sPartSpec, c3);
- expectedLatestValues.put("asia", getDateWithOffset(3));
- expectedLatestValues.put("africa", getDateWithOffset(1));
+ expectedLatestValues.put("asia", getDateWithOffset(HOURLY, 3));
+ expectedLatestValues.put("africa", getDateWithOffset(HOURLY, 1));
assertLatestForRegions(storageTableName, expectedLatestValues);
client.dropPartition(dimName, c3, timeParts, nonTimeParts, HOURLY);
- expectedLatestValues.put("asia", getDateWithOffset(0));
- expectedLatestValues.put("africa", getDateWithOffset(1));
+ expectedLatestValues.put("asia", NOW);
+ expectedLatestValues.put("africa", getDateWithOffset(HOURLY, 1));
assertLatestForRegions(storageTableName, expectedLatestValues);
- timeParts.put(getDatePartitionKey(), getDateWithOffset(0));
+ timeParts.put(getDatePartitionKey(), NOW);
client.dropPartition(dimName, c3, timeParts, nonTimeParts, HOURLY);
expectedLatestValues.remove("asia");
assertLatestForRegions(storageTableName, expectedLatestValues);
nonTimeParts.put("region", "africa");
- timeParts.put(getDatePartitionKey(), getDateWithOffset(-1));
+ timeParts.put(getDatePartitionKey(), getDateWithOffset(HOURLY, -1));
assertLatestForRegions(storageTableName, expectedLatestValues);
- timeParts.put(getDatePartitionKey(), getDateWithOffset(3));
+ timeParts.put(getDatePartitionKey(), getDateWithOffset(HOURLY, 3));
nonTimeParts.remove("africa");
assertLatestForRegions(storageTableName, expectedLatestValues);
}
@@ -2016,8 +2008,7 @@ public class TestCubeMetastoreClient {
String c1TableName = getFactOrDimtableStorageTableName(cubeDim.getName(), c1);
assertEquals(client.getAllParts(c1TableName).size(), 8);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(0), getDateWithOffset(0), getDateWithOffset(1)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 0, 0, 1));
Map<String, Date> timeParts4 = getTimePartitionByOffsets(getDatePartitionKey(), 0, itPart.getName(), 1,
etPart.getName(), -1);
@@ -2030,8 +2021,7 @@ public class TestCubeMetastoreClient {
client.addPartitions(Arrays.asList(partSpec4, partSpec5), c1);
assertEquals(client.getAllParts(c1TableName).size(), 10);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(1), getDateWithOffset(1), getDateWithOffset(1)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 1, 1, 1));
Map<String, Date> timeParts6 = getTimePartitionByOffsets(getDatePartitionKey(), -2, itPart.getName(), -1,
etPart.getName(), -2);
final StoragePartitionDesc partSpec6 = new StoragePartitionDesc(cubeDim.getName(), timeParts6, null, HOURLY);
@@ -2046,28 +2036,23 @@ public class TestCubeMetastoreClient {
client.addPartition(partSpec7, c1);
assertEquals(client.getAllParts(c1TableName).size(), 12);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(1), getDateWithOffset(1), getDateWithOffset(1)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 1, 1, 1));
client.dropPartition(cubeDim.getName(), c1, timeParts5, null, HOURLY);
assertEquals(client.getAllParts(c1TableName).size(), 11);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(0), getDateWithOffset(1), getDateWithOffset(1)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 0, 1, 1));
client.dropPartition(cubeDim.getName(), c1, timeParts7, null, HOURLY);
assertEquals(client.getAllParts(c1TableName).size(), 10);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(0), getDateWithOffset(1), getDateWithOffset(1)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 0, 1, 1));
client.dropPartition(cubeDim.getName(), c1, timeParts2, nonTimeSpec, HOURLY);
assertEquals(client.getAllParts(c1TableName).size(), 9);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(0), getDateWithOffset(1), getDateWithOffset(0)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 0, 1, 0));
client.dropPartition(cubeDim.getName(), c1, timeParts4, null, HOURLY);
assertEquals(client.getAllParts(c1TableName).size(), 8);
- assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null),
- toPartitionArray(HOURLY, getDateWithOffset(0), getDateWithOffset(0), getDateWithOffset(0)));
+ assertEquals(getLatestValues(c1TableName, HOURLY, partColNames, null), toPartitionArray(HOURLY, 0, 0, 0));
client.dropPartition(cubeDim.getName(), c1, timeParts3, nonTimeSpec, HOURLY);
assertEquals(client.getAllParts(c1TableName).size(), 5);
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestDateUtil.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestDateUtil.java b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestDateUtil.java
new file mode 100644
index 0000000..7e239f3
--- /dev/null
+++ b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestDateUtil.java
@@ -0,0 +1,297 @@
+/**
+ * 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.lens.cube.metadata;
+
+import static java.util.Calendar.DAY_OF_MONTH;
+import static java.util.Calendar.MONTH;
+
+import static org.apache.lens.cube.metadata.DateUtil.*;
+import static org.apache.lens.cube.metadata.UpdatePeriod.*;
+
+import static org.apache.commons.lang.time.DateUtils.addMilliseconds;
+
+import static org.testng.Assert.assertEquals;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Set;
+
+import org.apache.lens.server.api.error.LensException;
+
+import org.apache.commons.lang.time.DateUtils;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import com.beust.jcommander.internal.Sets;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Unit tests for cube DateUtil class TestDateUtil.
+ */
+@Slf4j
+public class TestDateUtil {
+
+ public static final String[] TEST_PAIRS = {
+ "2013-Jan-01", "2013-Jan-31", "2013-Jan-01", "2013-May-31",
+ "2013-Jan-01", "2013-Dec-31", "2013-Feb-01", "2013-Apr-25",
+ "2012-Feb-01", "2013-Feb-01", "2011-Feb-01", "2013-Feb-01",
+ "2013-Jan-02", "2013-Feb-02", "2013-Jan-02", "2013-Mar-02",
+ };
+
+ public static final SimpleDateFormat DATE_FMT = new SimpleDateFormat("yyyy-MMM-dd");
+
+ private Date[] pairs;
+
+ @BeforeTest
+ public void setUp() {
+ pairs = new Date[TEST_PAIRS.length];
+ for (int i = 0; i < TEST_PAIRS.length; i++) {
+ try {
+ pairs[i] = DATE_FMT.parse(TEST_PAIRS[i]);
+ } catch (ParseException e) {
+ log.error("Parsing exception while setup.", e);
+ }
+ }
+ }
+
+
+ @Test
+ public void testMonthsBetween() throws Exception {
+ int i = 0;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], MONTH)),
+ new CoveringInfo(1, true),
+ "2013-Jan-01 to 2013-Jan-31");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], MONTH)),
+ new CoveringInfo(5, true),
+ "2013-Jan-01 to 2013-May-31");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], MONTH)),
+ new CoveringInfo(12, true),
+ "2013-Jan-01 to 2013-Dec-31");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(2, false),
+ "2013-Feb-01 to 2013-Apr-25");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(12, true),
+ "2012-Feb-01 to 2013-Feb-01");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(24, true),
+ "2011-Feb-01 to 2013-Feb-01");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "2013-Jan-02 to 2013-Feb-02");
+
+ i += 2;
+ assertEquals(getMonthlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
+ "2013-Jan-02 to 2013-Mar-02");
+ }
+
+ @Test
+ public void testQuartersBetween() throws Exception {
+ int i = 0;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "2013-Jan-01 to 2013-Jan-31");
+
+ i += 2;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
+ "2013-Jan-01 to 2013-May-31");
+
+ i += 2;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], MONTH)),
+ new CoveringInfo(4, true),
+ "2013-Jan-01 to 2013-Dec-31");
+
+ i += 2;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "2013-Feb-01 to 2013-Apr-25");
+
+ i += 2;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(3, false),
+ "2012-Feb-01 to 2013-Feb-01");
+
+ i += 2;
+ assertEquals(getQuarterlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(7, false),
+ "2011-Feb-01 to 2013-Feb-01");
+ }
+
+ @Test
+ public void testYearsBetween() throws Exception {
+ int i = 0;
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "" + pairs[i] + "->" + pairs[i + 1]);
+
+ i += 2;
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "" + pairs[i] + "->" + pairs[i + 1]);
+
+ i += 2;
+ assertEquals(getYearlyCoveringInfo(pairs[i], DateUtils.round(pairs[i + 1], MONTH)),
+ new CoveringInfo(1, true), ""
+ + pairs[i] + "->" + pairs[i + 1]);
+
+ i += 2;
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "" + pairs[i] + "->" + pairs[i + 1]);
+
+ i += 2;
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(0, false),
+ "" + pairs[i] + "->" + pairs[i + 1]);
+
+ i += 2;
+ assertEquals(getYearlyCoveringInfo(pairs[i], pairs[i + 1]), new CoveringInfo(1, false),
+ "" + pairs[i] + "->" + pairs[i + 1]);
+ }
+
+ @Test
+ public void testWeeksBetween() throws Exception {
+ CoveringInfo weeks;
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-2"));
+ assertEquals(weeks, new CoveringInfo(1, true), "2013-May-26 to 2013-Jun-2");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-3"));
+ assertEquals(weeks, new CoveringInfo(0, false), "2013-May-26 to 2013-Jun-2");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-9"));
+ assertEquals(weeks, new CoveringInfo(1, false), "2013-May-26 to 2013-Jun-2");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-27"), DATE_FMT.parse("2013-Jun-1"));
+ assertEquals(weeks, new CoveringInfo(0, false), "2013-May-27 to 2013-Jun-1");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-25"), DATE_FMT.parse("2013-Jun-2"));
+ assertEquals(weeks, new CoveringInfo(1, false), "2013-May-25 to 2013-Jun-1");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-9"));
+ assertEquals(weeks, new CoveringInfo(2, true), "2013-May-26 to 2013-Jun-8");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2013-May-26"), DATE_FMT.parse("2013-Jun-10"));
+ assertEquals(weeks, new CoveringInfo(2, false), "2013-May-26 to 2013-Jun-10");
+
+ weeks = getWeeklyCoveringInfo(DATE_FMT.parse("2015-Dec-27"), DATE_FMT.parse("2016-Jan-03"));
+ assertEquals(weeks, new CoveringInfo(1, true), "2015-Dec-27 to 2016-Jan-03");
+ }
+
+ @Test
+ public void testNowWithGranularity() throws Exception {
+ String dateFmt = "yyyy/MM/dd-HH.mm.ss.SSS";
+ // Tuesday Sept 23, 2014, 12.02.05.500 pm
+ String testDateStr = "2014/09/23-12.02.05.500";
+ final SimpleDateFormat sdf = new SimpleDateFormat(dateFmt);
+ final Date testDate = sdf.parse(testDateStr);
+
+ System.out.print("@@ testDateStr=" + testDateStr + " parsed date=" + testDate);
+
+ // Tests without a diff, just resolve now with different granularity
+ assertEquals(testDateStr, sdf.format(resolveDate("now", testDate)));
+ assertEquals("2014/01/01-00.00.00.000", sdf.format(resolveDate("now.year", testDate)));
+ assertEquals("2014/09/01-00.00.00.000", sdf.format(resolveDate("now.month", testDate)));
+ // Start of week resolves to Sunday
+ assertEquals("2014/09/21-00.00.00.000", sdf.format(resolveDate("now.week", testDate)));
+ assertEquals("2014/09/23-00.00.00.000", sdf.format(resolveDate("now.day", testDate)));
+ assertEquals("2014/09/23-12.00.00.000", sdf.format(resolveDate("now.hour", testDate)));
+ assertEquals("2014/09/23-12.02.00.000", sdf.format(resolveDate("now.minute", testDate)));
+ assertEquals("2014/09/23-12.02.05.000", sdf.format(resolveDate("now.second", testDate)));
+
+ // Tests with a diff
+ assertEquals("2014/09/22-00.00.00.000", sdf.format(resolveDate("now.day -1day", testDate)));
+ assertEquals("2014/09/23-10.00.00.000", sdf.format(resolveDate("now.hour -2hour", testDate)));
+ assertEquals("2014/09/24-12.00.00.000", sdf.format(resolveDate("now.hour +24hour", testDate)));
+ assertEquals("2015/01/01-00.00.00.000", sdf.format(resolveDate("now.year +1year", testDate)));
+ assertEquals("2014/02/01-00.00.00.000", sdf.format(resolveDate("now.year +1month", testDate)));
+ }
+
+ @Test
+ public void testFloorDate() throws ParseException {
+ Date date = ABSDATE_PARSER.get().parse("2015-01-01-00:00:00,000");
+ Date curDate = date;
+ for (int i = 0; i < 284; i++) {
+ assertEquals(getFloorDate(curDate, YEARLY), date);
+ curDate = addMilliseconds(curDate, 111111111);
+ }
+ assertEquals(getFloorDate(curDate, YEARLY), DateUtils.addYears(date, 1));
+ assertEquals(getFloorDate(date, WEEKLY), ABSDATE_PARSER.get().parse("2014-12-28-00:00:00,000"));
+ }
+
+ @Test
+ public void testCeilDate() throws ParseException {
+ Date date = ABSDATE_PARSER.get().parse("2015-12-26-06:30:15,040");
+ assertEquals(getCeilDate(date, YEARLY), ABSDATE_PARSER.get().parse("2016-01-01-00:00:00,000"));
+ assertEquals(getCeilDate(date, MONTHLY), ABSDATE_PARSER.get().parse("2016-01-01-00:00:00,000"));
+ assertEquals(getCeilDate(date, DAILY), ABSDATE_PARSER.get().parse("2015-12-27-00:00:00,000"));
+ assertEquals(getCeilDate(date, HOURLY), ABSDATE_PARSER.get().parse("2015-12-26-07:00:00,000"));
+ assertEquals(getCeilDate(date, MINUTELY), ABSDATE_PARSER.get().parse("2015-12-26-06:31:00,000"));
+ assertEquals(getCeilDate(date, SECONDLY), ABSDATE_PARSER.get().parse("2015-12-26-06:30:16,000"));
+ assertEquals(getCeilDate(date, WEEKLY), ABSDATE_PARSER.get().parse("2015-12-27-00:00:00,000"));
+ }
+
+ @Test
+ public void testTimeDiff() throws LensException {
+ ArrayList<String> minusFourDays =
+ Lists.newArrayList("-4 days", "-4days", "-4day", "-4 day", "- 4days", "- 4 day");
+ ArrayList<String> plusFourDays =
+ Lists.newArrayList("+4 days", "4 days", "+4days", "4day", "4 day", "+ 4days", "+ 4 day", "+4 day");
+ Set<TimeDiff> diffs = Sets.newHashSet();
+ for (String diffStr : minusFourDays) {
+ diffs.add(TimeDiff.parseFrom(diffStr));
+ }
+ assertEquals(diffs.size(), 1);
+ TimeDiff minusFourDaysDiff = diffs.iterator().next();
+ assertEquals(minusFourDaysDiff.quantity, -4);
+ assertEquals(minusFourDaysDiff.updatePeriod, DAILY);
+
+ diffs.clear();
+ for (String diffStr : plusFourDays) {
+ diffs.add(TimeDiff.parseFrom(diffStr));
+ }
+ assertEquals(diffs.size(), 1);
+ TimeDiff plusFourDaysDiff = diffs.iterator().next();
+ assertEquals(plusFourDaysDiff.quantity, 4);
+ assertEquals(plusFourDaysDiff.updatePeriod, DAILY);
+ Date now = new Date();
+ assertEquals(minusFourDaysDiff.offsetFrom(plusFourDaysDiff.offsetFrom(now)), now);
+ assertEquals(plusFourDaysDiff.offsetFrom(minusFourDaysDiff.offsetFrom(now)), now);
+ assertEquals(minusFourDaysDiff.negativeOffsetFrom(now), plusFourDaysDiff.offsetFrom(now));
+ assertEquals(minusFourDaysDiff.offsetFrom(now), plusFourDaysDiff.negativeOffsetFrom(now));
+ }
+
+ @Test
+ public void testRelativeToAbsolute() throws LensException {
+ Date now = new Date();
+ Date nowDay = DateUtils.truncate(now, DAY_OF_MONTH);
+ Date nowDayMinus2Days = DateUtils.add(nowDay, DAY_OF_MONTH, -2);
+ assertEquals(relativeToAbsolute("now", now), DateUtil.ABSDATE_PARSER.get().format(now));
+ assertEquals(relativeToAbsolute("now.day", now), DateUtil.ABSDATE_PARSER.get().format(nowDay));
+ assertEquals(relativeToAbsolute("now.day - 2 days", now), DateUtil.ABSDATE_PARSER.get().format(nowDayMinus2Days));
+ assertEquals(relativeToAbsolute("now.day - 2 day", now), DateUtil.ABSDATE_PARSER.get().format(nowDayMinus2Days));
+ assertEquals(relativeToAbsolute("now.day - 2day", now), DateUtil.ABSDATE_PARSER.get().format(nowDayMinus2Days));
+ assertEquals(relativeToAbsolute("now.day -2 day", now), DateUtil.ABSDATE_PARSER.get().format(nowDayMinus2Days));
+ assertEquals(relativeToAbsolute("now.day -2 days", now), DateUtil.ABSDATE_PARSER.get().format(nowDayMinus2Days));
+ }
+}
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
index 1357035..2a50d74 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
@@ -19,14 +19,14 @@
package org.apache.lens.cube.parse;
-import static java.util.Calendar.*;
+import static java.util.Calendar.DAY_OF_MONTH;
+import static java.util.Calendar.HOUR_OF_DAY;
+import static org.apache.lens.cube.metadata.DateFactory.*;
import static org.apache.lens.cube.metadata.UpdatePeriod.*;
import static org.testng.Assert.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.lens.cube.metadata.*;
@@ -39,7 +39,6 @@ import org.apache.lens.server.api.LensConfConstants;
import org.apache.lens.server.api.error.LensException;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.api.Database;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -88,10 +87,6 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CubeTestSetup {
- public static final String HOUR_FMT = "yyyy-MM-dd-HH";
- public static final SimpleDateFormat HOUR_PARSER = new SimpleDateFormat(HOUR_FMT);
- public static final String MONTH_FMT = "yyyy-MM";
- public static final SimpleDateFormat MONTH_PARSER = new SimpleDateFormat(MONTH_FMT);
private Set<CubeMeasure> cubeMeasures;
private Set<CubeDimAttribute> cubeDimensions;
public static final String TEST_CUBE_NAME = "testCube";
@@ -101,30 +96,6 @@ public class CubeTestSetup {
public static final String DERIVED_CUBE_NAME2 = "der2";
public static final String DERIVED_CUBE_NAME3 = "der3";
- // Time Instances as Date Type
- public static final Date NOW;
- public static final Date LAST_HOUR;
- public static final Date TWODAYS_BACK;
- public static final Date ONE_DAY_BACK;
- public static final Date TWO_MONTHS_BACK;
- public static final Date BEFORE_4_DAYS_START;
- public static final Date BEFORE_4_DAYS_END;
- public static final Date THIS_YEAR_START;
- public static final Date THIS_YEAR_END;
- public static final Date LAST_YEAR_START;
- public static final Date LAST_YEAR_END;
-
- // Time Ranges
- public static final String LAST_HOUR_TIME_RANGE;
- public static final String TWO_DAYS_RANGE;
- public static final String TWO_DAYS_RANGE_TTD;
- public static final String THIS_YEAR_RANGE;
- public static final String LAST_YEAR_RANGE;
- public static final String TWO_MONTHS_RANGE_UPTO_MONTH;
- public static final String TWO_MONTHS_RANGE_UPTO_HOURS;
- public static final String TWO_DAYS_RANGE_BEFORE_4_DAYS;
-
- private static boolean zerothHour;
private static String c0 = "C0";
private static String c1 = "C1";
private static String c2 = "C2";
@@ -134,99 +105,13 @@ public class CubeTestSetup {
private static Map<String, String> factValidityProperties = Maps.newHashMap();
@Getter
private static Map<String, List<UpdatePeriod>> storageToUpdatePeriodMap = new LinkedHashMap<>();
- public static class DateOffsetProvider extends HashMap<Integer, Date> {
- private final UpdatePeriod updatePeriod;
- Calendar calendar = Calendar.getInstance();
-
- public DateOffsetProvider(UpdatePeriod updatePeriod) {
- this.updatePeriod = updatePeriod;
- }
- {
- put(0, calendar.getTime());
- }
-
- @Override
- public Date get(Object key) {
- if (!containsKey(key) && key instanceof Integer) {
- calendar.setTime(super.get(0));
- calendar.add(updatePeriod.calendarField(), (Integer) key);
- put((Integer) key, calendar.getTime());
- }
- return super.get(key);
- }
- }
-
static {
- Calendar cal = Calendar.getInstance();
- // Keep in sync
- NOW = cal.getTime();
- log.debug("Test now:{}", NOW);
-
- // Figure out if current hour is 0th hour
- zerothHour = (cal.get(HOUR_OF_DAY) == 0);
-
- // Figure out last hour
- cal.add(HOUR_OF_DAY, -1);
- LAST_HOUR = cal.getTime();
- log.debug("LastHour:{}", LAST_HOUR);
-
- cal.setTime(NOW);
- cal.add(DAY_OF_MONTH, -1);
- ONE_DAY_BACK = cal.getTime();
- cal.add(DAY_OF_MONTH, -1);
- TWODAYS_BACK = cal.getTime();
- System.out.println("Test TWODAYS_BACK:" + TWODAYS_BACK);
-
- // two months back
- cal.setTime(NOW);
- cal.add(MONTH, -2);
- TWO_MONTHS_BACK = cal.getTime();
- System.out.println("Test TWO_MONTHS_BACK:" + TWO_MONTHS_BACK);
-
- // Before 4days
- cal.setTime(NOW);
- cal.add(DAY_OF_MONTH, -4);
- BEFORE_4_DAYS_END = cal.getTime();
- cal.add(DAY_OF_MONTH, -2);
- BEFORE_4_DAYS_START = cal.getTime();
-
-
- THIS_YEAR_START = DateUtils.truncate(NOW, YEARLY.calendarField());
- THIS_YEAR_END = DateUtils.addYears(THIS_YEAR_START, 1);
- LAST_YEAR_START = DateUtils.addYears(THIS_YEAR_START, -1);
- LAST_YEAR_END = THIS_YEAR_START;
- TWO_DAYS_RANGE_BEFORE_4_DAYS =
- "time_range_in(d_time, '" + CubeTestSetup.getDateUptoHours(BEFORE_4_DAYS_START) + "','"
- + CubeTestSetup.getDateUptoHours(BEFORE_4_DAYS_END) + "')";
-
-
- TWO_DAYS_RANGE = "time_range_in(d_time, '" + getDateUptoHours(TWODAYS_BACK) + "','" + getDateUptoHours(NOW) + "')";
- TWO_DAYS_RANGE_TTD = "time_range_in(test_time_dim, '" + getDateUptoHours(TWODAYS_BACK) + "','"
- + getDateUptoHours(NOW) + "')";
- THIS_YEAR_RANGE =
- "time_range_in(d_time, '" + getDateUptoHours(THIS_YEAR_START) + "','" + getDateUptoHours(THIS_YEAR_END) + "')";
- LAST_YEAR_RANGE =
- "time_range_in(d_time, '" + getDateUptoHours(LAST_YEAR_START) + "','" + getDateUptoHours(LAST_YEAR_END) + "')";
- TWO_MONTHS_RANGE_UPTO_MONTH =
- "time_range_in(d_time, '" + getDateUptoMonth(TWO_MONTHS_BACK) + "','" + getDateUptoMonth(NOW) + "')";
- TWO_MONTHS_RANGE_UPTO_HOURS =
- "time_range_in(d_time, '" + getDateUptoHours(TWO_MONTHS_BACK) + "','" + getDateUptoHours(NOW) + "')";
-
- // calculate LAST_HOUR_TIME_RANGE
- LAST_HOUR_TIME_RANGE = getTimeRangeString(getDateUptoHours(LAST_HOUR), getDateUptoHours(NOW));
factValidityProperties.put(MetastoreConstants.FACT_RELATIVE_START_TIME, "now.year - 90 days");
}
- public static boolean isZerothHour() {
- return zerothHour;
- }
public static String getDateUptoHours(Date dt) {
- return HOUR_PARSER.format(dt);
- }
-
- public static String getDateUptoMonth(Date dt) {
- return MONTH_PARSER.format(dt);
+ return HOURLY.format(dt);
}
interface StoragePartitionProvider {
@@ -265,23 +150,16 @@ public class CubeTestSetup {
StringBuilder expected = new StringBuilder();
for (Map.Entry<String, String> entry : storageTableToWhereClause.entrySet()) {
String storageTable = entry.getKey();
- expected.append(selExpr);
- expected.append(storageTable);
- expected.append(" ");
- expected.append(cubeName);
- expected.append(" WHERE ");
- expected.append("(");
+ expected.append(selExpr).append(storageTable).append(" ").append(cubeName).append(" WHERE ").append("(");
if (notLatestConditions != null) {
for (String cond : notLatestConditions) {
expected.append(cond).append(" AND ");
}
}
if (whereExpr != null) {
- expected.append(whereExpr);
- expected.append(" AND ");
+ expected.append(whereExpr).append(" AND ");
}
- expected.append(entry.getValue());
- expected.append(")");
+ expected.append(entry.getValue()).append(")");
if (postWhereExpr != null) {
expected.append(" ").append(postWhereExpr);
}
@@ -328,27 +206,20 @@ public class CubeTestSetup {
assertEquals(1, numTabs);
for (Map.Entry<String, String> entry : storageTableToWhereClause.entrySet()) {
String storageTable = entry.getKey();
- expected.append(selExpr);
- expected.append(storageTable);
- expected.append(" ");
- expected.append(cubeName);
- expected.append(joinExpr);
- expected.append(" WHERE ");
- expected.append("(");
+ expected.append(selExpr).append(storageTable).append(" ").append(cubeName).append(joinExpr)
+ .append(" WHERE ").append("(");
if (notLatestConditions != null) {
for (String cond : notLatestConditions) {
expected.append(cond).append(" AND ");
}
}
if (whereExpr != null) {
- expected.append(whereExpr);
- expected.append(" AND ");
+ expected.append(whereExpr).append(" AND ");
}
expected.append(entry.getValue());
if (joinWhereConds != null) {
for (String joinEntry : joinWhereConds) {
- expected.append(" AND ");
- expected.append(joinEntry);
+ expected.append(" AND ").append(joinEntry);
}
}
expected.append(")");
@@ -379,7 +250,7 @@ public class CubeTestSetup {
public static Map<String, String> getWhereForDailyAndHourly2daysWithTimeDim(String cubeName, String timedDimension,
Date from, Date to, String... storageTables) {
- Map<String, String> storageTableToWhereClause = new LinkedHashMap<String, String>();
+ Map<String, String> storageTableToWhereClause = new LinkedHashMap<>();
if (storageToUpdatePeriodMap.isEmpty()) {
String whereClause = getWhereForDailyAndHourly2daysWithTimeDim(cubeName, timedDimension, from, to);
storageTableToWhereClause.put(getStorageTableString(storageTables), whereClause);
@@ -398,7 +269,7 @@ public class CubeTestSetup {
private static String getStorageTableString(String... storageTables) {
String dbName = getDbName();
if (!StringUtils.isBlank(dbName)) {
- List<String> tbls = new ArrayList<String>();
+ List<String> tbls = new ArrayList<>();
for (String tbl : storageTables) {
tbls.add(dbName + tbl);
}
@@ -409,10 +280,10 @@ public class CubeTestSetup {
public static String getWhereForDailyAndHourly2daysWithTimeDim(String cubeName, String timedDimension, Date from,
Date to) {
- List<String> hourlyparts = new ArrayList<String>();
- List<String> dailyparts = new ArrayList<String>();
+ Set<String> hourlyparts = new HashSet<>();
+ Set<String> dailyparts = new HashSet<>();
Date dayStart;
- if (!CubeTestSetup.isZerothHour()) {
+ if (!isZerothHour()) {
addParts(hourlyparts, HOURLY, from, DateUtil.getCeilDate(from, DAILY));
addParts(hourlyparts, HOURLY, DateUtil.getFloorDate(to, DAILY),
DateUtil.getFloorDate(to, HOURLY));
@@ -421,7 +292,7 @@ public class CubeTestSetup {
dayStart = from;
}
addParts(dailyparts, DAILY, dayStart, DateUtil.getFloorDate(to, DAILY));
- List<String> parts = new ArrayList<String>();
+ List<String> parts = new ArrayList<>();
parts.addAll(hourlyparts);
parts.addAll(dailyparts);
Collections.sort(parts);
@@ -434,7 +305,7 @@ public class CubeTestSetup {
List<String> hourlyparts = new ArrayList<String>();
List<String> dailyparts = new ArrayList<String>();
Date dayStart;
- if (!CubeTestSetup.isZerothHour()) {
+ if (!isZerothHour()) {
addParts(hourlyparts, HOURLY, from, DateUtil.getCeilDate(from, DAILY));
addParts(hourlyparts, HOURLY, DateUtil.getFloorDate(to, DAILY),
DateUtil.getFloorDate(to, HOURLY));
@@ -458,7 +329,7 @@ public class CubeTestSetup {
List<String> monthlyparts = new ArrayList<String>();
Date dayStart = TWO_MONTHS_BACK;
Date monthStart = TWO_MONTHS_BACK;
- if (!CubeTestSetup.isZerothHour()) {
+ if (!isZerothHour()) {
addParts(hourlyparts, HOURLY, TWO_MONTHS_BACK,
DateUtil.getCeilDate(TWO_MONTHS_BACK, DAILY));
addParts(hourlyparts, HOURLY, DateUtil.getFloorDate(NOW, DAILY),
@@ -510,7 +381,7 @@ public class CubeTestSetup {
Date dayStart = TWO_MONTHS_BACK;
Date monthStart = TWO_MONTHS_BACK;
- if (!CubeTestSetup.isZerothHour()) {
+ if (!isZerothHour()) {
addParts(hourlyparts, HOURLY, TWO_MONTHS_BACK,
DateUtil.getCeilDate(TWO_MONTHS_BACK, DAILY));
addParts(hourlyparts, HOURLY, DateUtil.getFloorDate(NOW, DAILY),
@@ -571,13 +442,12 @@ public class CubeTestSetup {
return storageTableToWhereClause;
}
- public static void addParts(List<String> partitions, UpdatePeriod updatePeriod, Date from, Date to) {
- DateFormat fmt = updatePeriod.format();
+ public static void addParts(Collection<String> partitions, UpdatePeriod updatePeriod, Date from, Date to) {
Calendar cal = Calendar.getInstance();
cal.setTime(from);
Date dt = cal.getTime();
while (dt.before(to)) {
- String part = fmt.format(dt);
+ String part = updatePeriod.format(dt);
cal.add(updatePeriod.calendarField(), 1);
partitions.add(part);
dt = cal.getTime();
@@ -1418,9 +1288,9 @@ public class CubeTestSetup {
}
// Add all hourly partitions for TWO_DAYS_RANGE_BEFORE_4_DAYS
- cal.setTime(BEFORE_4_DAYS_START);
+ cal.setTime(BEFORE_6_DAYS);
temp = cal.getTime();
- while (!(temp.after(BEFORE_4_DAYS_END))) {
+ while (!(temp.after(BEFORE_4_DAYS))) {
Map<String, Date> timeParts = new HashMap<String, Date>();
timeParts.put("ttd", temp);
timeParts.put("ttd2", temp);
@@ -1533,9 +1403,9 @@ public class CubeTestSetup {
}
// Add all hourly partitions for TWO_DAYS_RANGE_BEFORE_4_DAYS
- cal.setTime(BEFORE_4_DAYS_START);
+ cal.setTime(BEFORE_6_DAYS);
temp = cal.getTime();
- while (!(temp.after(BEFORE_4_DAYS_END))) {
+ while (!(temp.after(BEFORE_4_DAYS))) {
Map<String, Date> timeParts = new HashMap<String, Date>();
timeParts.put(TestCubeMetastoreClient.getDatePartitionKey(), temp);
StoragePartitionDesc sPartSpec = new StoragePartitionDesc(fact.getName(), timeParts, null, HOURLY);
@@ -1585,9 +1455,9 @@ public class CubeTestSetup {
assertTimeline(client, fact.getName(), c4, HOURLY, "ttd2", ttd2StoreAll);
// Add all hourly partitions for TWO_DAYS_RANGE_BEFORE_4_DAYS
- cal.setTime(BEFORE_4_DAYS_START);
+ cal.setTime(BEFORE_6_DAYS);
temp = cal.getTime();
- while (!(temp.after(BEFORE_4_DAYS_END))) {
+ while (!(temp.after(BEFORE_4_DAYS))) {
Map<String, Date> timeParts = new HashMap<String, Date>();
timeParts.put("ttd", temp);
timeParts.put("ttd2", temp);
@@ -2692,9 +2562,4 @@ public class CubeTestSetup {
System.out.println("--query- " + query);
HQLParser.printAST(HQLParser.parseHQL(query, new HiveConf()));
}
-
-
- private static String getTimeRangeString(final String startDate, final String endDate) {
- return "time_range_in(d_time, '" + startDate + "','" + endDate + "')";
- }
}
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/parse/FieldsCannotBeQueriedTogetherTest.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/FieldsCannotBeQueriedTogetherTest.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/FieldsCannotBeQueriedTogetherTest.java
index 0fea9f1..ff7c15f 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/FieldsCannotBeQueriedTogetherTest.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/FieldsCannotBeQueriedTogetherTest.java
@@ -18,7 +18,7 @@
*/
package org.apache.lens.cube.parse;
-import static org.apache.lens.cube.parse.CubeTestSetup.*;
+import static org.apache.lens.cube.metadata.DateFactory.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
@@ -301,8 +301,7 @@ public class FieldsCannotBeQueriedTogetherTest extends TestQueryRewrite {
Configuration queryConf = new Configuration(conf);
queryConf.setBoolean(CubeQueryConfUtil.REPLACE_TIMEDIM_WITH_PART_COL, true);
- testFieldsCannotBeQueriedTogetherError("select msr4 from basecube where " + "time_range_in(d_time, '"
- + getDateUptoHours(TWODAYS_BACK) + "','" + getDateUptoHours(CubeTestSetup.NOW) + "')",
+ testFieldsCannotBeQueriedTogetherError("select msr4 from basecube where " + TWO_DAYS_RANGE,
Arrays.asList("d_time", "msr4"), queryConf);
}
@@ -321,8 +320,7 @@ public class FieldsCannotBeQueriedTogetherTest extends TestQueryRewrite {
Configuration queryConf = new Configuration(conf);
queryConf.setBoolean(CubeQueryConfUtil.REPLACE_TIMEDIM_WITH_PART_COL, false);
- testFieldsCannotBeQueriedTogetherError("select msr4 from basecube where " + "time_range_in(d_time, '"
- + getDateUptoHours(TWODAYS_BACK) + "','" + getDateUptoHours(CubeTestSetup.NOW) + "')",
+ testFieldsCannotBeQueriedTogetherError("select msr4 from basecube where " + TWO_DAYS_RANGE,
Arrays.asList("d_time", "msr4"), queryConf);
}
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
index 753ca33..a48d753 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java
@@ -19,6 +19,7 @@
package org.apache.lens.cube.parse;
+import static org.apache.lens.cube.metadata.DateFactory.*;
import static org.apache.lens.cube.parse.CubeTestSetup.*;
import static org.apache.lens.cube.parse.TestCubeRewriter.compareQueries;
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
index ee84a4c..97c6d08 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
@@ -19,9 +19,10 @@
package org.apache.lens.cube.parse;
+import static org.apache.lens.cube.metadata.DateFactory.*;
+import static org.apache.lens.cube.metadata.DateUtil.*;
import static org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.MISSING_PARTITIONS;
import static org.apache.lens.cube.parse.CubeTestSetup.*;
-import static org.apache.lens.cube.parse.DateUtil.*;
import static org.apache.lens.cube.parse.TestCubeRewriter.compareQueries;
import static org.apache.hadoop.hive.ql.parse.HiveParser.KW_AND;
@@ -33,6 +34,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.lens.cube.error.LensCubeErrorCode;
+import org.apache.lens.cube.metadata.TimeRange;
import org.apache.lens.cube.metadata.UpdatePeriod;
import org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode;
import org.apache.lens.server.api.error.LensException;
@@ -47,7 +49,6 @@ import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.base.Splitter;
-
import lombok.Getter;
public class TestBaseCubeQueries extends TestQueryRewrite {
http://git-wip-us.apache.org/repos/asf/lens/blob/7c7c86da/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
index 9a2493c..eeba861 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBetweenTimeRangeWriter.java
@@ -19,12 +19,12 @@
package org.apache.lens.cube.parse;
+import static org.apache.lens.cube.metadata.DateFactory.NOW;
+import static org.apache.lens.cube.metadata.DateFactory.TWODAYS_BACK;
+import static org.apache.lens.cube.metadata.UpdatePeriod.DAILY;
+
import java.text.DateFormat;
-import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
-
-import org.apache.lens.cube.metadata.UpdatePeriod;
import org.testng.Assert;
@@ -50,9 +50,9 @@ public class TestBetweenTimeRangeWriter extends TestTimeRangeWriter {
String expected = null;
if (format == null) {
expected =
- getBetweenClause("test", "dt", CubeTestSetup.TWODAYS_BACK, CubeTestSetup.NOW, UpdatePeriod.DAILY.format());
+ getBetweenClause("test", "dt", TWODAYS_BACK, NOW, DAILY.format());
} else {
- expected = getBetweenClause("test", "dt", CubeTestSetup.TWODAYS_BACK, CubeTestSetup.NOW, format);
+ expected = getBetweenClause("test", "dt", TWODAYS_BACK, NOW, format);
}
Assert.assertEquals(expected, whereClause);
}
@@ -62,17 +62,4 @@ public class TestBetweenTimeRangeWriter extends TestTimeRangeWriter {
String last = format.format(end);
return " (" + alias + "." + colName + " BETWEEN '" + first + "' AND '" + last + "') ";
}
-
- @Override
- public void validateSingle(String whereClause, DateFormat format) {
- List<String> parts = new ArrayList<String>();
- if (format == null) {
- parts.add(UpdatePeriod.DAILY.format(CubeTestSetup.ONE_DAY_BACK));
- } else {
- parts.add(format.format(CubeTestSetup.ONE_DAY_BACK));
- }
-
- System.out.println("Expected :" + StorageUtil.getWherePartClause("dt", "test", parts));
- Assert.assertEquals(whereClause, StorageUtil.getWherePartClause("dt", "test", parts));
- }
}