Skip to content

Commit d7b0725

Browse files
committed
Add tests for calendar converter and server log item
Adds unit tests to validate date handling and logging item behavior. - Verifies calendar param converter correctly parses and formats RFC-like timestamps, preserves timezones, handles nulls, rejects invalid input, and supports round-trip conversions. - Exercises server log item: default and full constructors, setters, and Java serialization to ensure fields are correctly stored and restored. Signed-off-by: Nico Piel <nico.piel@hotmail.de>
1 parent fa8957d commit d7b0725

File tree

2 files changed

+215
-0
lines changed

2 files changed

+215
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright (c) Mirth Corporation. All rights reserved.
3+
*
4+
* http://www.mirthcorp.com
5+
*
6+
* The software in this package is published under the terms of the MPL license a copy of which has
7+
* been included with this distribution in the LICENSE.txt file.
8+
*/
9+
10+
package com.mirth.connect.client.core.api.providers;
11+
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertNotNull;
14+
import static org.junit.Assert.assertNull;
15+
import static org.junit.Assert.assertTrue;
16+
17+
import java.time.ZoneId;
18+
import java.time.ZonedDateTime;
19+
import java.time.format.DateTimeFormatter;
20+
import java.util.Calendar;
21+
import java.util.TimeZone;
22+
23+
import javax.ws.rs.ProcessingException;
24+
import javax.ws.rs.ext.ParamConverter;
25+
26+
import org.junit.BeforeClass;
27+
import org.junit.Test;
28+
29+
public class CalendarParamConverterProviderTest {
30+
31+
private static ParamConverter<Calendar> converter;
32+
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
33+
34+
@BeforeClass
35+
@SuppressWarnings("unchecked")
36+
public static void setup() {
37+
converter = (ParamConverter<Calendar>) new CalendarParamConverterProvider().getConverter(Calendar.class, null,
38+
null);
39+
}
40+
41+
@Test
42+
public void testGetConverter() {
43+
CalendarParamConverterProvider provider = new CalendarParamConverterProvider();
44+
assertNotNull(provider.getConverter(Calendar.class, null, null));
45+
assertNull(provider.getConverter(String.class, null, null));
46+
}
47+
48+
@Test
49+
public void testFromStringValid() {
50+
String dateString = "2023-10-27T10:30:00.000-0400";
51+
Calendar calendar = converter.fromString(dateString);
52+
assertNotNull(calendar);
53+
54+
ZonedDateTime zdt = ZonedDateTime.parse(dateString, FORMATTER);
55+
assertEquals(zdt.toInstant().toEpochMilli(), calendar.getTimeInMillis());
56+
assertEquals(zdt.getZone().getId(), calendar.getTimeZone().getID());
57+
}
58+
59+
@Test
60+
public void testFromStringNull() {
61+
assertNull(converter.fromString(null));
62+
}
63+
64+
@Test(expected = ProcessingException.class)
65+
public void testFromStringInvalidFormat() {
66+
converter.fromString("invalid-date-string");
67+
}
68+
69+
@Test
70+
public void testRoundTrip() {
71+
Calendar original = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
72+
original.set(2023, Calendar.DECEMBER, 25, 9, 0, 0);
73+
original.set(Calendar.MILLISECOND, 0);
74+
75+
String stringValue = converter.toString(original);
76+
Calendar result = converter.fromString(stringValue);
77+
78+
assertEquals(original.getTimeInMillis(), result.getTimeInMillis());
79+
assertEquals(original.getTimeZone().getID(), result.getTimeZone().getID());
80+
}
81+
82+
@Test
83+
public void testTimezonePreservation() {
84+
String[] zoneIds = { "UTC", "America/Los_Angeles", "Europe/London", "Asia/Tokyo" };
85+
86+
for (String zoneId : zoneIds) {
87+
Calendar original = Calendar.getInstance(TimeZone.getTimeZone(zoneId));
88+
String stringValue = converter.toString(original);
89+
Calendar result = converter.fromString(stringValue);
90+
91+
assertEquals("Failed for timezone: " + zoneId, original.getTimeZone().getID(),
92+
result.getTimeZone().getID());
93+
assertEquals("Failed for timezone: " + zoneId, original.getTimeInMillis(), result.getTimeInMillis());
94+
}
95+
}
96+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/*
2+
* Copyright (c) Mirth Corporation. All rights reserved.
3+
*
4+
* http://www.mirthcorp.com
5+
*
6+
* The software in this package is published under the terms of the MPL license a copy of which has
7+
* been included with this distribution in the LICENSE.txt file.
8+
*/
9+
10+
package com.mirth.connect.plugins.serverlog;
11+
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertNull;
14+
import static org.junit.Assert.assertTrue;
15+
16+
import java.io.ByteArrayInputStream;
17+
import java.io.ByteArrayOutputStream;
18+
import java.io.ObjectInputStream;
19+
import java.io.ObjectOutputStream;
20+
import java.util.Date;
21+
22+
import org.junit.Test;
23+
24+
public class ServerLogItemTest {
25+
26+
@Test
27+
public void testDefaultConstructor() {
28+
ServerLogItem item = new ServerLogItem();
29+
assertNull(item.getServerId());
30+
assertNull(item.getId());
31+
assertNull(item.getLevel());
32+
assertNull(item.getDate());
33+
assertNull(item.getThreadName());
34+
assertNull(item.getCategory());
35+
assertNull(item.getLineNumber());
36+
assertNull(item.getMessage());
37+
assertNull(item.getThrowableInformation());
38+
}
39+
40+
@Test
41+
public void testMessageConstructor() {
42+
String message = "Test Message";
43+
ServerLogItem item = new ServerLogItem(message);
44+
assertEquals(message, item.getMessage());
45+
assertNull(item.getId());
46+
}
47+
48+
@Test
49+
public void testFullConstructor() {
50+
String serverId = "server-1";
51+
Long id = 100L;
52+
String level = "INFO";
53+
Date date = new Date();
54+
String threadName = "main";
55+
String category = "com.test";
56+
String lineNumber = "123";
57+
String message = "Test Message";
58+
String throwableInfo = "Exception stack trace";
59+
60+
ServerLogItem item = new ServerLogItem(serverId, id, level, date, threadName, category, lineNumber, message,
61+
throwableInfo);
62+
63+
assertEquals(serverId, item.getServerId());
64+
assertEquals(id, item.getId());
65+
assertEquals(level, item.getLevel());
66+
assertEquals(date, item.getDate());
67+
assertEquals(threadName, item.getThreadName());
68+
assertEquals(category, item.getCategory());
69+
assertEquals(lineNumber, item.getLineNumber());
70+
assertEquals(message, item.getMessage());
71+
assertEquals(throwableInfo, item.getThrowableInformation());
72+
}
73+
74+
@Test
75+
public void testSetters() {
76+
ServerLogItem item = new ServerLogItem();
77+
78+
item.setServerId("server-1");
79+
item.setId(1L);
80+
item.setLevel("ERROR");
81+
Date date = new Date();
82+
item.setDate(date);
83+
item.setThreadName("thread-1");
84+
item.setCategory("category");
85+
item.setLineNumber("50");
86+
item.setMessage("message");
87+
item.setThrowableInformation("stacktrace");
88+
89+
assertEquals("server-1", item.getServerId());
90+
assertEquals(Long.valueOf(1), item.getId());
91+
assertEquals("ERROR", item.getLevel());
92+
assertEquals(date, item.getDate());
93+
assertEquals("thread-1", item.getThreadName());
94+
assertEquals("category", item.getCategory());
95+
assertEquals("50", item.getLineNumber());
96+
assertEquals("message", item.getMessage());
97+
assertEquals("stacktrace", item.getThrowableInformation());
98+
}
99+
100+
@Test
101+
public void testSerialization() throws Exception {
102+
ServerLogItem original = new ServerLogItem("server-1", 1L, "INFO", new Date(), "main", "cat", "10", "msg",
103+
"err");
104+
105+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
106+
ObjectOutputStream oos = new ObjectOutputStream(baos);
107+
oos.writeObject(original);
108+
oos.close();
109+
110+
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
111+
ObjectInputStream ois = new ObjectInputStream(bais);
112+
ServerLogItem deserialized = (ServerLogItem) ois.readObject();
113+
114+
assertEquals(original.getServerId(), deserialized.getServerId());
115+
assertEquals(original.getId(), deserialized.getId());
116+
assertEquals(original.getMessage(), deserialized.getMessage());
117+
assertEquals(original.getDate(), deserialized.getDate());
118+
}
119+
}

0 commit comments

Comments
 (0)