cpugputpu created HIVE-22952:
--------------------------------

             Summary: Use LinkedHashMap in TestStandardObjectInspectors.java
                 Key: HIVE-22952
                 URL: https://issues.apache.org/jira/browse/HIVE-22952
             Project: Hive
          Issue Type: Bug
          Components: Test, Tests
            Reporter: cpugputpu


The test in 
_org.apache.hadoop.hive.serde2.objectinspector.TestStandardObjectInspectors#testStandardUnionObjectInspector_
 can fail due to a different iteration order of HashMap. The failure is 
presented as follows.


org.junit.ComparisonFailure: 
expected:<\{4:{6:"six",7:"seven",8:"eight"}}> 
but was:<\{4:{6:"six",8:"eight",7:"seven"}}>

The reason is that the assertion 
_assertEquals("\{4:{6:\"six\",7:\"seven\",8:\"eight\"}}", 
SerDeUtils.getJSONString(union, uoi1));_ compares a hard-coded string against 
the string representation of a JSON object, which is implemented by a HashMap. 
To get the string, the HashMap is iterated here at 
_serde/src/java/org/apache/hadoop/hive/serde2/SerDeUtils.java:343_ 
_for (Object entry : omap.entrySet())_

The specification about HashMap says that "this class makes no guarantees as to 
the order of the map; in particular, it does not guarantee that the order will 
remain constant over time". The documentation is here for your reference: 
[https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html]

 

The fix is to use LinkedHashMap instead of HashMap. In this way, the 
non-deterministic behaviour is eliminated and the test will become more stable.

 



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

Reply via email to