This is an automated email from the ASF dual-hosted git repository.

jbonofre pushed a commit to branch activemq-6.0.x
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/activemq-6.0.x by this push:
     new 6b59cdf6d Improve test reliability by resolving nondeterministic order 
of Json
6b59cdf6d is described below

commit 6b59cdf6ded878a3cc94152071fcc69d5600e6f8
Author: huiyang <[email protected]>
AuthorDate: Sat Nov 18 20:34:32 2023 -0600

    Improve test reliability by resolving nondeterministic order of Json
    
    (cherry picked from commit 7d6362da73a0b972298a358e1fe48cdef2f938e4)
---
 activemq-stomp/pom.xml                             |  5 +++
 .../activemq/transport/stomp/SamplePojo.java       | 12 ++++++
 .../apache/activemq/transport/stomp/StompTest.java | 47 +++++++++++++++++++---
 pom.xml                                            |  5 +++
 4 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/activemq-stomp/pom.xml b/activemq-stomp/pom.xml
index cf35ce544..6f4376d7d 100644
--- a/activemq-stomp/pom.xml
+++ b/activemq-stomp/pom.xml
@@ -53,6 +53,11 @@
       <artifactId>jettison</artifactId>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-xml</artifactId>
+      <optional>true</optional>
+    </dependency>
 
     <!-- =============================== -->
     <!-- Testing Dependencies            -->
diff --git 
a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/SamplePojo.java
 
b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/SamplePojo.java
index 9ed4ef4fd..701c33daf 100644
--- 
a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/SamplePojo.java
+++ 
b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/SamplePojo.java
@@ -52,4 +52,16 @@ public class SamplePojo implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
+
+    //implement equals
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof SamplePojo) {
+            SamplePojo other = (SamplePojo) obj;
+            return name.equals(other.name) && city.equals(other.city);
+        }
+        return false;
+    }
+
 }
diff --git 
a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
 
b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
index 9b54d17ef..9f0d65e90 100644
--- 
a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
+++ 
b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
@@ -35,6 +35,9 @@ import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import jakarta.jms.BytesMessage;
 import jakarta.jms.Connection;
 import jakarta.jms.JMSException;
@@ -1090,7 +1093,7 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(xmlObject));
+        compareFrameXML(frame, xmlObject);
     }
 
     @Test(timeout = 60000)
@@ -1110,7 +1113,7 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(jsonObject));
+        compareFrameJson(frame, jsonObject);
     }
 
     @Test(timeout = 60000)
@@ -1131,7 +1134,7 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(xmlObject));
+        compareFrameXML(frame, xmlObject);
     }
 
     @Test(timeout = 60000)
@@ -1152,7 +1155,26 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(xmlObject));
+
+
+        compareFrameXML(frame, xmlObject);
+    }
+
+    private void compareFrameXML(String frame, String xmlObject) {
+
+        String xmlReceived = frame.trim().substring(frame.indexOf("<pojo>"));
+
+        try {
+            //use jackson xml to compare
+            XmlMapper xmlMapper = new XmlMapper();
+            SamplePojo pojoReceived = xmlMapper.readValue(xmlReceived, 
SamplePojo.class);
+            SamplePojo pojoObject = xmlMapper.readValue(xmlObject, 
SamplePojo.class);
+
+            assertEquals(pojoReceived, pojoObject);
+        } catch (Exception e) {
+            fail("Exception while comparing XML: " + e.getMessage());
+        }
+
     }
 
     @Test(timeout = 60000)
@@ -1177,7 +1199,7 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(xmlObject));
+        compareFrameXML(frame, xmlObject);
 
         StompFrame xmlFrame = stompConnection.receive();
 
@@ -1336,7 +1358,20 @@ public class StompTest extends StompTestSupport {
 
         frame = stompConnection.receiveFrame();
 
-        assertTrue(frame.trim().endsWith(jsonObject));
+        compareFrameJson(frame, jsonObject);
+    }
+
+    private void compareFrameJson(String frame, String jsonObject) {
+        String receivedJson = 
frame.trim().substring(frame.indexOf("{\"pojo\":{"));
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode pojoReceived = mapper.readTree(receivedJson);
+            JsonNode pojoObject = mapper.readTree(jsonObject);
+
+            assertEquals(pojoReceived, pojoObject);
+        } catch (Exception e) {
+            fail("Exception while comparing JSON: " + e.getMessage());
+        }
     }
 
     @Test(timeout = 60000)
diff --git a/pom.xml b/pom.xml
index 8ad9eb7da..28e598eed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -612,6 +612,11 @@
         <artifactId>jackson-databind</artifactId>
         <version>${jackson-version}</version>
       </dependency>
+      <dependency>
+        <groupId>com.fasterxml.jackson.dataformat</groupId>
+        <artifactId>jackson-dataformat-xml</artifactId>
+        <version>${jackson-version}</version>
+      </dependency>
 
       <!-- Used to configure the activemq logs -->
       <dependency>

Reply via email to