Github user vvysotskyi commented on a diff in the pull request: https://github.com/apache/drill/pull/904#discussion_r149612076 --- Diff: exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestDateFunctions.java --- @@ -33,128 +33,140 @@ import org.apache.drill.exec.server.Drillbit; import org.apache.drill.exec.server.RemoteServiceSet; import org.apache.drill.exec.vector.ValueVector; +import org.joda.time.DateTimeUtils; import org.joda.time.LocalDate; -import org.joda.time.LocalTime; import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; import org.junit.Ignore; import org.junit.Test; - -import com.google.common.base.Charsets; -import com.google.common.io.Files; import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import java.text.DateFormatSymbols; +import java.util.List; +import java.util.Locale; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +@RunWith(JMockit.class) @Category({UnlikelyTest.class, SqlFunctionTest.class}) public class TestDateFunctions extends PopUnitTestBase { - static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestDateFunctions.class); + static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestDateFunctions.class); - public void testCommon(String[] expectedResults, String physicalPlan, String resourceFile) throws Exception { - try (RemoteServiceSet serviceSet = RemoteServiceSet.getLocalServiceSet(); - Drillbit bit = new Drillbit(CONFIG, serviceSet); - DrillClient client = new DrillClient(CONFIG, serviceSet.getCoordinator())) { - // run query. - bit.run(); - client.connect(); - List<QueryDataBatch> results = client.runQuery(org.apache.drill.exec.proto.UserBitShared.QueryType.PHYSICAL, - Files.toString(FileUtils.getResourceAsFile(physicalPlan), Charsets.UTF_8) - .replace("#{TEST_FILE}", resourceFile)); + public void testCommon(String[] expectedResults, String physicalPlan, String resourceFile) throws Exception { + try (RemoteServiceSet serviceSet = RemoteServiceSet.getLocalServiceSet(); + Drillbit bit = new Drillbit(CONFIG, serviceSet); + DrillClient client = new DrillClient(CONFIG, serviceSet.getCoordinator())) { - RecordBatchLoader batchLoader = new RecordBatchLoader(bit.getContext().getAllocator()); + // run query. + bit.run(); + client.connect(); + List<QueryDataBatch> results = client.runQuery(org.apache.drill.exec.proto.UserBitShared.QueryType.PHYSICAL, + Files.toString(FileUtils.getResourceAsFile(physicalPlan), Charsets.UTF_8) + .replace("#{TEST_FILE}", resourceFile)); - QueryDataBatch batch = results.get(0); - assertTrue(batchLoader.load(batch.getHeader().getDef(), batch.getData())); + RecordBatchLoader batchLoader = new RecordBatchLoader(bit.getContext().getAllocator()); + QueryDataBatch batch = results.get(0); + assertTrue(batchLoader.load(batch.getHeader().getDef(), batch.getData())); - int i = 0; - for (VectorWrapper<?> v : batchLoader) { - ValueVector.Accessor accessor = v.getValueVector().getAccessor(); - System.out.println(accessor.getObject(0)); - assertEquals( expectedResults[i++], accessor.getObject(0).toString()); - } - - batchLoader.clear(); - for(QueryDataBatch b : results){ - b.release(); - } - } - } - - @Test - @Ignore("relies on particular timezone") - public void testDateIntervalArithmetic() throws Exception { - String expectedResults[] = {"2009-02-23T00:00:00.000-08:00", - "2008-02-24T00:00:00.000-08:00", - "1970-01-01T13:20:33.000-08:00", - "2008-02-24T12:00:00.000-08:00", - "2009-04-23T12:00:00.000-07:00", - "2008-02-24T12:00:00.000-08:00", - "2009-04-23T12:00:00.000-07:00", - "2009-02-23T00:00:00.000-08:00", - "2008-02-24T00:00:00.000-08:00", - "1970-01-01T13:20:33.000-08:00", - "2008-02-24T12:00:00.000-08:00", - "2009-04-23T12:00:00.000-07:00", - "2008-02-24T12:00:00.000-08:00", - "2009-04-23T12:00:00.000-07:00"}; - testCommon(expectedResults, "/functions/date/date_interval_arithmetic.json", "/test_simple_date.json"); - } - - @Test - public void testDateDifferenceArithmetic() throws Exception { - - String[] expectedResults = {"P365D", - "P-366DT-60S", - "PT39600S"}; - testCommon(expectedResults, "/functions/date/date_difference_arithmetic.json", "/test_simple_date.json"); - } - - @Test - public void testAge() throws Exception { - String[] expectedResults = { "P109M16DT82800S", - "P172M27D", - "P-172M-27D", - "P-39M-18DT-63573S"}; - testCommon(expectedResults, "/functions/date/age.json", "/test_simple_date.json"); - } - - @Test - public void testIntervalArithmetic() throws Exception { - - String expectedResults[] = {"P2Y2M", - "P2DT3723S", - "P2M", - "PT3723S", - "P28M", - "PT7206S", - "P7M", - "PT1801.500S", - "P33M18D", - "PT8647.200S", - "P6M19DT86399.999S", - "PT1715.714S"}; - - testCommon(expectedResults, "/functions/date/interval_arithmetic.json", "/test_simple_date.json"); - } - - @Test - public void testToChar() throws Exception { - - String expectedResults[] = {(new LocalDate(2008, 2, 23)).toString("yyyy-MMM-dd"), - (new LocalTime(12, 20, 30)).toString("HH mm ss"), - (new LocalDateTime(2008, 2, 23, 12, 0, 0)).toString("yyyy MMM dd HH:mm:ss")}; - testCommon(expectedResults, "/functions/date/to_char.json", "/test_simple_date.json"); - } + int i = 0; + for (VectorWrapper<?> v : batchLoader) { - @Test - @Ignore("relies on particular time zone") - public void testToDateType() throws Exception { - String expectedResults[] = {"2008-02-23T00:00:00.000-08:00", - "1970-01-01T12:20:30.000-08:00", - "2008-02-23T12:00:00.000-08:00", - "2008-02-23T12:00:00.000-08:00"}; + ValueVector.Accessor accessor = v.getValueVector().getAccessor(); + System.out.println(accessor.getObject(0)); + assertEquals(expectedResults[i++], accessor.getObject(0).toString()); + } - testCommon(expectedResults, "/functions/date/to_date_type.json", "/test_simple_date.json"); + batchLoader.clear(); + for (QueryDataBatch b : results) { + b.release(); + } } + } + + @Test + @Ignore("relies on particular timezone") + public void testDateIntervalArithmetic() throws Exception { + String expectedResults[] = {"2009-02-23T00:00:00.000-08:00", + "2008-02-24T00:00:00.000-08:00", + "1970-01-01T13:20:33.000-08:00", + "2008-02-24T12:00:00.000-08:00", + "2009-04-23T12:00:00.000-07:00", + "2008-02-24T12:00:00.000-08:00", + "2009-04-23T12:00:00.000-07:00", + "2009-02-23T00:00:00.000-08:00", + "2008-02-24T00:00:00.000-08:00", + "1970-01-01T13:20:33.000-08:00", + "2008-02-24T12:00:00.000-08:00", + "2009-04-23T12:00:00.000-07:00", + "2008-02-24T12:00:00.000-08:00", + "2009-04-23T12:00:00.000-07:00"}; + testCommon(expectedResults, "/functions/date/date_interval_arithmetic.json", "/test_simple_date.json"); + } + + @Test + public void testDateDifferenceArithmetic() throws Exception { + + String[] expectedResults = {"P365D", + "P-366DT-60S", + "PT39600S"}; + testCommon(expectedResults, "/functions/date/date_difference_arithmetic.json", "/test_simple_date.json"); + } + + @Test + public void testAge() throws Exception { + String[] expectedResults = {"P109M16DT82800S", + "P172M27D", + "P-172M-27D", + "P-39M-18DT-63573S"}; + testCommon(expectedResults, "/functions/date/age.json", "/test_simple_date.json"); + } + + @Test + public void testIntervalArithmetic() throws Exception { + + String expectedResults[] = {"P2Y2M", + "P2DT3723S", + "P2M", + "PT3723S", + "P28M", + "PT7206S", + "P7M", + "PT1801.500S", + "P33M18D", + "PT8647.200S", + "P6M19DT86399.999S", + "PT1715.714S"}; + + testCommon(expectedResults, "/functions/date/interval_arithmetic.json", "/test_simple_date.json"); + } + + @Test + public void testToChar() throws Exception { + new MockUp<DateTimeUtils>() { --- End diff -- Please replace this mock by method
---