Skip to content

Commit dcacd32

Browse files
committed
test(schema): cover SET defaults through server round trips
Add server-side regression tests to ensure that Cardinality.SET default values (which deserialize from JSON as String ArrayLists) are correctly normalized to a Set and duplicates are collapsed.
1 parent aeb354a commit dcacd32

3 files changed

Lines changed: 90 additions & 0 deletions

File tree

hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/core/VertexCoreTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.math.BigDecimal;
2121
import java.util.ArrayList;
22+
import java.util.Arrays;
2223
import java.util.Collections;
2324
import java.util.Date;
2425
import java.util.HashSet;
@@ -854,6 +855,36 @@ public void testAddVertexWithDateDefaultValue() {
854855
Assert.assertEquals(joined, value);
855856
}
856857

858+
@Test
859+
public void testAddVertexWithDateSetDefaultValue() {
860+
SchemaManager schema = graph().schema();
861+
862+
String dateStr = "2026-05-14 10:11:12.345";
863+
Date expected = DateUtil.parse(dateStr);
864+
865+
// Simulate JSON-deserialized default: ArrayList of Strings with duplicates
866+
schema.propertyKey("joinDates").asDate().valueSet()
867+
.userdata(Userdata.DEFAULT_VALUE, Arrays.asList(dateStr, dateStr))
868+
.create();
869+
schema.vertexLabel("person")
870+
.properties("joinDates")
871+
.nullableKeys("joinDates").append();
872+
873+
Vertex vertex = graph().addVertex(T.label, "person",
874+
"name", "Baby", "city", "Shanghai");
875+
this.commitTx();
876+
877+
vertex = graph().vertex(vertex.id());
878+
Object raw = vertex.value("joinDates");
879+
880+
Assert.assertTrue("joinDates should be a Set, was " +
881+
(raw == null ? "null" : raw.getClass()),
882+
raw instanceof Set);
883+
Set<?> values = (Set<?>) raw;
884+
Assert.assertEquals("duplicates must be collapsed", 1, values.size());
885+
Assert.assertTrue(values.contains(expected));
886+
}
887+
857888
@Test
858889
public void testAddVertexWithNotExistsVertexPropKey() {
859890
HugeGraph graph = graph();

hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/unit/serializer/BinarySerializerTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
package org.apache.hugegraph.unit.serializer;
1919

20+
import java.util.Arrays;
2021
import java.util.Date;
22+
import java.util.Set;
2123

2224
import org.apache.hugegraph.backend.id.IdGenerator;
2325
import org.apache.hugegraph.backend.serializer.BinarySerializer;
@@ -29,6 +31,7 @@
2931
import org.apache.hugegraph.structure.HugeVertex;
3032
import org.apache.hugegraph.testutil.Assert;
3133
import org.apache.hugegraph.testutil.Whitebox;
34+
import org.apache.hugegraph.type.define.Cardinality;
3235
import org.apache.hugegraph.type.define.DataType;
3336
import org.apache.hugegraph.unit.BaseUnitTest;
3437
import org.apache.hugegraph.unit.FakeObjects;
@@ -154,6 +157,33 @@ public void testPropertyKeyDefaultValueRoundTripsAsDate() {
154157
Assert.assertEquals(defaultValue, value);
155158
}
156159

160+
@Test
161+
public void testPropertyKeySetDefaultValueRoundTripsAsDate() {
162+
HugeConfig config = FakeObjects.newConfig();
163+
BinarySerializer ser = new BinarySerializer(config);
164+
165+
FakeObjects objects = new FakeObjects();
166+
PropertyKey original = objects.newPropertyKey(IdGenerator.of(2L),
167+
"tags", DataType.DATE);
168+
original.cardinality(Cardinality.SET);
169+
170+
String dateStr = "2026-05-14 10:11:12.345";
171+
Date expected = DateUtil.parse(dateStr);
172+
// ArrayList<String> with duplicates — what JSON deserialization produces
173+
original.userdata(Userdata.DEFAULT_VALUE, Arrays.asList(dateStr, dateStr));
174+
175+
BackendEntry entry = ser.writePropertyKey(original);
176+
PropertyKey reloaded = ser.readPropertyKey(objects.graph(), entry);
177+
178+
Object value = reloaded.defaultValue();
179+
Assert.assertTrue("DEFAULT_VALUE should be a Set after round-trip, was " +
180+
(value == null ? "null" : value.getClass()),
181+
value instanceof Set);
182+
Set<?> values = (Set<?>) value;
183+
Assert.assertEquals("duplicates must be collapsed", 1, values.size());
184+
Assert.assertTrue(values.contains(expected));
185+
}
186+
157187
@Test
158188
public void testEdgeForPartition() {
159189
BinarySerializer ser = new BinarySerializer(true, true, true);

hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/unit/serializer/TextSerializerTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
package org.apache.hugegraph.unit.serializer;
1919

20+
import java.util.Arrays;
2021
import java.util.Date;
22+
import java.util.Set;
2123

2224
import org.apache.hugegraph.backend.id.IdGenerator;
2325
import org.apache.hugegraph.backend.serializer.TextSerializer;
@@ -26,6 +28,7 @@
2628
import org.apache.hugegraph.schema.PropertyKey;
2729
import org.apache.hugegraph.schema.Userdata;
2830
import org.apache.hugegraph.testutil.Assert;
31+
import org.apache.hugegraph.type.define.Cardinality;
2932
import org.apache.hugegraph.type.define.DataType;
3033
import org.apache.hugegraph.unit.BaseUnitTest;
3134
import org.apache.hugegraph.unit.FakeObjects;
@@ -75,4 +78,30 @@ public void testPropertyKeyDefaultValueRoundTripsAsDate() {
7578
value instanceof Date);
7679
Assert.assertEquals(defaultValue, value);
7780
}
81+
82+
@Test
83+
public void testPropertyKeySetDefaultValueRoundTripsAsDate() {
84+
HugeConfig config = FakeObjects.newConfig();
85+
TextSerializer ser = new TextSerializer(config);
86+
87+
FakeObjects objects = new FakeObjects();
88+
PropertyKey original = objects.newPropertyKey(IdGenerator.of(2L),
89+
"tags", DataType.DATE);
90+
original.cardinality(Cardinality.SET);
91+
92+
String dateStr = "2026-05-14 10:11:12.345";
93+
Date expected = DateUtil.parse(dateStr);
94+
original.userdata(Userdata.DEFAULT_VALUE, Arrays.asList(dateStr, dateStr));
95+
96+
BackendEntry entry = ser.writePropertyKey(original);
97+
PropertyKey reloaded = ser.readPropertyKey(objects.graph(), entry);
98+
99+
Object value = reloaded.defaultValue();
100+
Assert.assertTrue("DEFAULT_VALUE should be a Set after round-trip, was " +
101+
(value == null ? "null" : value.getClass()),
102+
value instanceof Set);
103+
Set<?> values = (Set<?>) value;
104+
Assert.assertEquals("duplicates must be collapsed", 1, values.size());
105+
Assert.assertTrue(values.contains(expected));
106+
}
78107
}

0 commit comments

Comments
 (0)