|
23 | 23 |
|
24 | 24 | import java.io.Serializable; |
25 | 25 | import java.util.Arrays; |
26 | | -import java.util.Objects; |
27 | 26 | import java.util.UUID; |
28 | 27 |
|
29 | 28 | import org.junit.jupiter.api.Test; |
|
36 | 35 | * @author Thomas Darimont |
37 | 36 | * @author Christoph Strobl |
38 | 37 | * @author Mark Paluch |
| 38 | + * @author Chris Bono |
39 | 39 | */ |
40 | 40 | class JacksonJsonRedisSerializerTests { |
41 | 41 |
|
42 | 42 | private JacksonJsonRedisSerializer<Person> serializer = new JacksonJsonRedisSerializer<>(Person.class); |
43 | 43 |
|
44 | | - @Test // GH-3271 |
45 | | - void canDeserializeSerialized() { |
46 | | - |
47 | | - JacksonJsonRedisSerializer<SessionToken> redisSerializer = new JacksonJsonRedisSerializer<>(SessionToken.class); |
48 | | - |
49 | | - SessionToken source = new SessionToken(UUID.randomUUID().toString()); |
50 | | - |
51 | | - byte[] serialized = redisSerializer.serialize(source); |
52 | | - assertThat(redisSerializer.deserialize(serialized)).isEqualTo(source); |
53 | | - } |
54 | | - |
55 | 44 | @Test // DATAREDIS-241 |
56 | 45 | void testJacksonJsonSerializerShouldReturnEmptyByteArrayWhenSerializingNull() { |
57 | 46 | assertThat(serializer.serialize(null)).isEqualTo(new byte[0]); |
@@ -82,48 +71,47 @@ void shouldConsiderWriter() { |
82 | 71 | assertThat(serializer.serialize(person)).isEqualTo("foo".getBytes()); |
83 | 72 | } |
84 | 73 |
|
85 | | - static class SessionToken implements Serializable { |
| 74 | + @Test // GH-3271 |
| 75 | + void canDeserializeSerializedStandardPojo() { |
86 | 76 |
|
87 | | - private String userUuid; |
| 77 | + // Where "Standard" is POJO w/ private fields w/ getters/setters |
88 | 78 |
|
89 | | - private SessionToken() { |
90 | | - // why jackson? |
91 | | - } |
| 79 | + Person person = new PersonObjectFactory().instance(); |
| 80 | + byte[] serializedPerson = JsonMapper.shared().writeValueAsString(person).getBytes(); |
92 | 81 |
|
93 | | - public SessionToken(String userUuid) { |
94 | | - this.userUuid = userUuid; |
95 | | - } |
| 82 | + Person deserializedPerson = serializer.deserialize(serializedPerson); |
96 | 83 |
|
97 | | - public String getUserUuid() { |
98 | | - return userUuid; |
99 | | - } |
| 84 | + // The bug was that the fields would be null upon deserialization |
| 85 | + assertThat(deserializedPerson).isEqualTo(person); |
| 86 | + } |
100 | 87 |
|
101 | | - public void setUserUuid(String userUuid) { |
102 | | - this.userUuid = userUuid; |
103 | | - } |
| 88 | + @Test // GH-3271 |
| 89 | + void canDeserializeSerializedPropertyPojo() { |
104 | 90 |
|
105 | | - @Override |
106 | | - public boolean equals(Object o) { |
107 | | - if (o == this) { |
108 | | - return true; |
109 | | - } |
110 | | - if (o == null || getClass() != o.getClass()) { |
111 | | - return false; |
112 | | - } |
113 | | - SessionToken token = (SessionToken) o; |
114 | | - return Objects.equals(userUuid, token.userUuid); |
115 | | - } |
| 91 | + // Where "Property" is POJO w/ public fields and no getters/setters |
116 | 92 |
|
117 | | - @Override |
118 | | - public int hashCode() { |
119 | | - return Objects.hash(userUuid); |
120 | | - } |
| 93 | + JacksonJsonRedisSerializer<SessionTokenPropertyPojo> redisSerializer = new JacksonJsonRedisSerializer<>(JsonMapper.shared(), SessionTokenPropertyPojo.class); |
| 94 | + |
| 95 | + SessionTokenPropertyPojo sessionToken = new SessionTokenPropertyPojo(UUID.randomUUID().toString()); |
| 96 | + byte[] serializedSessionToken = redisSerializer.serialize(sessionToken);//JsonMapper.shared().writeValueAsString(sessionToken).getBytes(); |
| 97 | + |
| 98 | + SessionTokenPropertyPojo deserializedSessionToken = redisSerializer.deserialize(serializedSessionToken); |
121 | 99 |
|
122 | | - @Override |
123 | | - public String toString() { |
124 | | - return "SessionToken{" + "userUuid='" + userUuid + '\'' + '}'; |
| 100 | + // The bug was that the fields would be null upon deserialization |
| 101 | + assertThat(deserializedSessionToken.userUuid).isEqualTo(sessionToken.userUuid); |
| 102 | + } |
| 103 | + |
| 104 | + static class SessionTokenPropertyPojo implements Serializable { |
| 105 | + |
| 106 | + public String userUuid; |
| 107 | + |
| 108 | + private SessionTokenPropertyPojo() { |
125 | 109 | } |
126 | 110 |
|
| 111 | + SessionTokenPropertyPojo(String userUuid) { |
| 112 | + this(); |
| 113 | + this.userUuid = userUuid; |
| 114 | + } |
127 | 115 | } |
128 | 116 |
|
129 | 117 | } |
0 commit comments