2121import com .cloud .storage .DataStoreRole ;
2222import com .cloud .utils .DateUtil ;
2323import com .google .gson .Gson ;
24+ import com .google .gson .JsonSyntaxException ;
2425import org .junit .Before ;
2526import org .junit .Test ;
2627
@@ -96,7 +97,7 @@ public void testGsonDateFormatSerialization() {
9697 }
9798
9899 @ Test
99- public void testGsonDateFormatDeserialization () throws Exception {
100+ public void testGsonDateFormatDeserializationWithSameDateFormat () throws Exception {
100101 String json = "{\" str\" :\" TestString\" ,\" num\" :999,\" date\" :\" 2025-08-22T15:39:43+0000\" }" ;
101102 TestClass testObj = gson .fromJson (json , TestClass .class );
102103
@@ -106,6 +107,63 @@ public void testGsonDateFormatDeserialization() throws Exception {
106107 assertEquals (expectedDate , testObj .getDate ());
107108 }
108109
110+ @ Test (expected = JsonSyntaxException .class )
111+ public void testGsonDateFormatDeserializationWithDifferentDateFormat () throws Exception {
112+ String json = "{\" str\" :\" TestString\" ,\" num\" :999,\" date\" :\" 22/08/2025T15:39:43+0000\" }" ;
113+ gson .fromJson (json , TestClass .class );
114+ /* Deserialization throws the below exception:
115+ com.google.gson.JsonSyntaxException: 22/08/2025T15:39:43+0000
116+
117+ at com.google.gson.DefaultTypeAdapters$DefaultDateTypeAdapter.deserializeToDate(DefaultTypeAdapters.java:376)
118+ at com.google.gson.DefaultTypeAdapters$DefaultDateTypeAdapter.deserialize(DefaultTypeAdapters.java:351)
119+ at com.google.gson.DefaultTypeAdapters$DefaultDateTypeAdapter.deserialize(DefaultTypeAdapters.java:307)
120+ at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:92)
121+ at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:117)
122+ at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
123+ at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
124+ at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:76)
125+ at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:54)
126+ at com.google.gson.Gson.fromJson(Gson.java:551)
127+ at com.google.gson.Gson.fromJson(Gson.java:498)
128+ at com.google.gson.Gson.fromJson(Gson.java:467)
129+ at com.google.gson.Gson.fromJson(Gson.java:417)
130+ at com.google.gson.Gson.fromJson(Gson.java:389)
131+ at com.cloud.serializer.GsonHelperTest.testGsonDateFormatDeserializationWithDifferentDateFormat(GsonHelperTest.java:113)
132+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
133+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
134+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
135+ at java.base/java.lang.reflect.Method.invoke(Method.java:566)
136+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
137+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
138+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
139+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
140+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
141+ at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
142+ at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
143+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
144+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
145+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
146+ at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
147+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
148+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
149+ at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
150+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
151+ at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
152+ at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
153+ at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
154+ at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
155+ at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
156+ at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
157+ at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
158+ at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231)
159+ at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
160+ Caused by: java.text.ParseException: Unparseable date: "22/08/2025T15:39:43+0000"
161+ at java.base/java.text.DateFormat.parse(DateFormat.java:395)
162+ at com.google.gson.DefaultTypeAdapters$DefaultDateTypeAdapter.deserializeToDate(DefaultTypeAdapters.java:374)
163+ ... 42 more
164+ */
165+ }
166+
109167 private static class TestClass {
110168 private String str ;
111169 private int num ;
0 commit comments