This is an automated email from the ASF dual-hosted git repository.
kenhuuu pushed a commit to branch 3.7-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/3.7-dev by this push:
new eebb8f8396 Fix Four Flaky Tests in gremlin-core (#3221)
eebb8f8396 is described below
commit eebb8f83965981d56704fff3d7f7e4dbedea33a1
Author: AnicaaOvO <[email protected]>
AuthorDate: Fri Oct 10 12:13:44 2025 -0500
Fix Four Flaky Tests in gremlin-core (#3221)
Hi! We detected flakiness in the following tests using the Nondex tool, The
reason for the flakiness is similar to
[#2943](https://github.com/apache/tinkerpop/pull/2943), which is due to the use
of unordered collections.
```
org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest.shouldHandleTraversalExplanation[v1]
org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest.shouldHandleTraversalExplanation[v2-default]
org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest.shouldHandleTraversalExplanation[v2]
org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest.shouldHandleTraversalExplanation[v3]
```
And correspondingly, the flakiness could be reproduced by running the
following commands:
```
mvn clean -pl gremlin-core \
edu.illinois:nondex-maven-plugin:2.2.1:nondex \
-Dtest="org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest#shouldHandleTraversalExplanation[v1]"
\
-Drat.skip=true
```
```
mvn clean -pl gremlin-core \
edu.illinois:nondex-maven-plugin:2.2.1:nondex \
-Dtest="org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest#shouldHandleTraversalExplanation[v2]"
\
-Drat.skip=true
```
```
mvn clean -pl gremlin-core \
edu.illinois:nondex-maven-plugin:2.2.1:nondex \
-Dtest="org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest#shouldHandleTraversalExplanation[v2-default]"
\
-Drat.skip=true
```
```
mvn clean -pl gremlin-core \
edu.illinois:nondex-maven-plugin:2.2.1:nondex \
-Dtest="org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapperTest#shouldHandleTraversalExplanation[v3]"
\
-Drat.skip=true
```
And the error might be as follows:
```
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] GraphSONMapperTest.shouldHandleTraversalExplanation:182
expected:<...exStep(OUT,edge)"],"[intermediate":[],"final":["InjectStep([])","VertexStep(OUT,vertex)","EdgeVertexStep(OUT)","VertexStep(OUT,edge)"]]}>
but
was:<...exStep(OUT,edge)"],"[final":["InjectStep([])","VertexStep(OUT,vertex)","EdgeVertexStep(OUT)","VertexStep(OUT,edge)"],"intermediate":[]]}>
[INFO]
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
```
Once fixed, the output should be `build success` without test errors.
---
.../gremlin/structure/io/graphson/GraphSONSerializersV1.java | 5 +++--
.../gremlin/structure/io/graphson/GraphSONSerializersV2.java | 5 +++--
.../gremlin/structure/io/graphson/GraphSONSerializersV3.java | 4 ++--
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
index 7f7f1adc76..dd45cef02d 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
@@ -47,6 +47,7 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -339,14 +340,14 @@ final class GraphSONSerializersV1 {
}
public void ser(final TraversalExplanation te, final JsonGenerator
jsonGenerator) throws IOException {
- final Map<String, Object> m = new HashMap<>();
+ final Map<String, Object> m = new LinkedHashMap<>();
m.put(GraphSONTokens.ORIGINAL,
getStepsAsList(te.getOriginalTraversal()));
final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>>
strategyTraversals = te.getStrategyTraversals();
final List<Map<String,Object>> intermediates = new ArrayList<>();
for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair :
strategyTraversals) {
- final Map<String,Object> intermediate = new HashMap<>();
+ final Map<String,Object> intermediate = new LinkedHashMap<>();
intermediate.put(GraphSONTokens.STRATEGY,
pair.getValue0().toString());
intermediate.put(GraphSONTokens.CATEGORY,
pair.getValue0().getTraversalCategory().getSimpleName());
intermediate.put(GraphSONTokens.TRAVERSAL,
getStepsAsList(pair.getValue1()));
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
index a36d3d9a0b..166c6074a2 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
@@ -65,6 +65,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -300,14 +301,14 @@ class GraphSONSerializersV2 {
@Override
public void serialize(final TraversalExplanation traversalExplanation,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider)
throws IOException {
- final Map<String, Object> m = new HashMap<>();
+ final Map<String, Object> m = new LinkedHashMap<>();
m.put(GraphSONTokens.ORIGINAL,
getStepsAsList(traversalExplanation.getOriginalTraversal()));
final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>>
strategyTraversals = traversalExplanation.getStrategyTraversals();
final List<Map<String, Object>> intermediates = new ArrayList<>();
for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair :
strategyTraversals) {
- final Map<String, Object> intermediate = new HashMap<>();
+ final Map<String, Object> intermediate = new LinkedHashMap<>();
intermediate.put(GraphSONTokens.STRATEGY,
pair.getValue0().toString());
intermediate.put(GraphSONTokens.CATEGORY,
pair.getValue0().getTraversalCategory().getSimpleName());
intermediate.put(GraphSONTokens.TRAVERSAL,
getStepsAsList(pair.getValue1()));
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
index c8a7cf2dc5..57c1269844 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
@@ -322,14 +322,14 @@ class GraphSONSerializersV3 {
@Override
public void serialize(final TraversalExplanation traversalExplanation,
final JsonGenerator jsonGenerator,
final SerializerProvider serializerProvider)
throws IOException {
- final Map<String, Object> m = new HashMap<>();
+ final Map<String, Object> m = new LinkedHashMap<>();
m.put(GraphSONTokens.ORIGINAL,
getStepsAsList(traversalExplanation.getOriginalTraversal()));
final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>>
strategyTraversals = traversalExplanation.getStrategyTraversals();
final List<Map<String, Object>> intermediates = new ArrayList<>();
for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair :
strategyTraversals) {
- final Map<String, Object> intermediate = new HashMap<>();
+ final Map<String, Object> intermediate = new LinkedHashMap<>();
intermediate.put(GraphSONTokens.STRATEGY,
pair.getValue0().toString());
intermediate.put(GraphSONTokens.CATEGORY,
pair.getValue0().getTraversalCategory().getSimpleName());
intermediate.put(GraphSONTokens.TRAVERSAL,
getStepsAsList(pair.getValue1()));