[ 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)