[ 
https://issues.apache.org/jira/browse/HIVE-22685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17015004#comment-17015004
 ] 

Karen Coppage commented on HIVE-22685:
--------------------------------------

Hi David,

Thanks for fixing the issue. The flaw in my thinking was that the test was only 
guaranteed to pass on Thursdays :) Thanks also for fixing the minor problems 
that I didn't catch the first time, it was educational to look through your 
changes.

I'm thinking it's a bad idea to introduce a field (LocalDateTime now) in the 
main class (HiveSqlDateTimeFormatter) just for testing purposes. Also, if I 
understand correctly, Optional objects aren't supposed to be used as class 
variables, and they're also not serializable, which is what Findbugs is 
complaining about. A simpler solution that doesn't require changing 
HiveSqlDateTimeFormatter is to get the week-based year from the java.time 
library:
{code:java}
private String getIsoYear() {
  return LocalDateTime.now().format(DateTimeFormatter.ofPattern("YYYY")); // 
week-based year
}
{code}
and change the two offending lines to:

 
{code:java}
checkParseTimestampIso("IY-IW-ID", "0-01-04", "iw, yyyy", "01, " + 
getIsoYear().substring(0, 3) + "0");
checkParseTimestampIso("I-IW-ID", "0-01-04", "iw, yyyy", "01, " + 
getIsoYear().substring(0, 3) + "0");
{code}
What do you think?

> TestHiveSqlDateTimeFormatter Now Broken with New Year 2020
> ----------------------------------------------------------
>
>                 Key: HIVE-22685
>                 URL: https://issues.apache.org/jira/browse/HIVE-22685
>             Project: Hive
>          Issue Type: Bug
>            Reporter: David Mollitor
>            Assignee: David Mollitor
>            Priority: Major
>         Attachments: HIVE-22685.1.patch, HIVE-22685.2.patch
>
>
> Unit test is now broken.... (n)(n):(
> {code:java}
>     //Tests for these patterns would need changing every decade if done in 
> the above way.
>     //Thursday of the first week in an ISO year always matches the Gregorian 
> year.
>     checkParseTimestampIso("IY-IW-ID", "0-01-04", "iw, yyyy", "01, " + 
> thisYearString.substring(0, 3) + "0");
>     checkParseTimestampIso("I-IW-ID", "0-01-04", "iw, yyyy", "01, " + 
> thisYearString.substring(0, 3) + "0");
> {code}
> {code}
> org.junit.ComparisonFailure: expected:<01, 20[1]0> but was:<01, 20[2]0>
>       at org.junit.Assert.assertEquals(Assert.java:115)
>       at org.junit.Assert.assertEquals(Assert.java:144)
>       at 
> org.apache.hadoop.hive.common.format.datetime.TestHiveSqlDateTimeFormatter.checkParseTimestampIso(TestHiveSqlDateTimeFormatter.java:313)
>       at 
> org.apache.hadoop.hive.common.format.datetime.TestHiveSqlDateTimeFormatter.testParseTimestamp(TestHiveSqlDateTimeFormatter.java:287)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>       at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to