Skip to content

Commit 8a451a4

Browse files
review comments, and unit tests
1 parent 17e03c9 commit 8a451a4

File tree

4 files changed

+56
-5
lines changed

4 files changed

+56
-5
lines changed

core/src/main/java/com/cloud/serializer/GsonHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.List;
2323

2424
import com.cloud.hypervisor.Hypervisor;
25+
import com.cloud.utils.DateUtil;
2526
import org.apache.cloudstack.transport.HypervisorTypeAdaptor;
2627
import org.apache.logging.log4j.Logger;
2728
import org.apache.logging.log4j.LogManager;
@@ -50,8 +51,6 @@ public class GsonHelper {
5051
protected static final Gson s_gson;
5152
protected static final Gson s_gogger;
5253

53-
public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
54-
5554
static {
5655
GsonBuilder gsonBuilder = new GsonBuilder();
5756
s_gson = setDefaultGsonConfig(gsonBuilder);
@@ -80,7 +79,7 @@ static Gson setDefaultGsonConfig(GsonBuilder builder) {
8079
}.getType(), new NwGroupsCommandTypeAdaptor());
8180
builder.registerTypeAdapter(Storage.StoragePoolType.class, new StoragePoolTypeAdaptor());
8281
builder.registerTypeAdapter(Hypervisor.HypervisorType.class, new HypervisorTypeAdaptor());
83-
builder.setDateFormat(DATE_FORMAT);
82+
builder.setDateFormat(DateUtil.ZONED_DATETIME_FORMAT);
8483
Gson gson = builder.create();
8584
dsAdaptor.initGson(gson);
8685
dtAdaptor.initGson(gson);

core/src/test/java/com/cloud/serializer/GsonHelperTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919

2020
import com.cloud.agent.api.to.NfsTO;
2121
import com.cloud.storage.DataStoreRole;
22+
import com.cloud.utils.DateUtil;
2223
import com.google.gson.Gson;
2324
import org.junit.Before;
2425
import org.junit.Test;
2526

27+
import java.text.SimpleDateFormat;
28+
import java.util.Date;
29+
2630
import static org.junit.Assert.assertEquals;
2731
import static org.junit.Assert.assertNotNull;
2832
import static org.junit.Assert.assertTrue;
@@ -78,4 +82,51 @@ public void testGsonLoggerDeserialization() {
7882
assertEquals("http://example.com", deserializedNfsTO.getUrl());
7983
assertEquals(DataStoreRole.Primary, deserializedNfsTO.getRole());
8084
}
85+
86+
@Test
87+
public void testGsonDateFormatSerialization() {
88+
Date now = new Date();
89+
TestClass testObj = new TestClass("TestString", 999, now);
90+
String json = gson.toJson(testObj);
91+
92+
assertTrue(json.contains("TestString"));
93+
assertTrue(json.contains("999"));
94+
String expectedDate = new SimpleDateFormat(DateUtil.ZONED_DATETIME_FORMAT).format(now);
95+
assertTrue(json.contains(expectedDate));
96+
}
97+
98+
@Test
99+
public void testGsonDateFormatDeserialization() throws Exception {
100+
String json = "{\"str\":\"TestString\",\"num\":999,\"date\":\"2025-08-22T15:39:43+0000\"}";
101+
TestClass testObj = gson.fromJson(json, TestClass.class);
102+
103+
assertEquals("TestString", testObj.getStr());
104+
assertEquals(999, testObj.getNum());
105+
Date expectedDate = new SimpleDateFormat(DateUtil.ZONED_DATETIME_FORMAT).parse("2025-08-22T15:39:43+0000");
106+
assertEquals(expectedDate, testObj.getDate());
107+
}
108+
109+
private static class TestClass {
110+
private String str;
111+
private int num;
112+
private Date date;
113+
114+
public TestClass(String str, int num, Date date) {
115+
this.str = str;
116+
this.num = num;
117+
this.date = date;
118+
}
119+
120+
public String getStr() {
121+
return str;
122+
}
123+
124+
public int getNum() {
125+
return num;
126+
}
127+
128+
public Date getDate() {
129+
return date;
130+
}
131+
}
81132
}

server/src/main/java/com/cloud/server/StatsCollector.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
import javax.inject.Inject;
4848

49+
import com.cloud.utils.DateUtil;
4950
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
5051
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
5152
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
@@ -294,7 +295,7 @@ public String toString() {
294295
private static StatsCollector s_instance = null;
295296

296297
private static Gson gson = new GsonBuilder()
297-
.setDateFormat(GsonHelper.DATE_FORMAT)
298+
.setDateFormat(DateUtil.ZONED_DATETIME_FORMAT)
298299
.create();
299300

300301
private ScheduledExecutorService _executor = null;

utils/src/main/java/com/cloud/utils/DateUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class DateUtil {
4848

4949
public static final TimeZone GMT_TIMEZONE = TimeZone.getTimeZone("GMT");
5050
public static final String YYYYMMDD_FORMAT = "yyyyMMddHHmmss";
51-
private static final String ZONED_DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
51+
public static final String ZONED_DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
5252
private static final DateFormat ZONED_DATETIME_SIMPLE_FORMATTER = new SimpleDateFormat(ZONED_DATETIME_FORMAT);
5353

5454
private static final DateTimeFormatter[] parseFormats = new DateTimeFormatter[]{

0 commit comments

Comments
 (0)