Skip to content

Commit 42e3d5d

Browse files
committed
Polishing.
Update newly added tests to reproduce the associated issue by serializing a non-standard public property style POJO. Original pull request #3277 See #3271 Signed-off-by: Chris Bono <chris.bono@broadcom.com> (cherry picked from commit 8156530)
1 parent 751775d commit 42e3d5d

File tree

1 file changed

+32
-44
lines changed

1 file changed

+32
-44
lines changed

src/test/java/org/springframework/data/redis/serializer/JacksonJsonRedisSerializerTests.java

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import java.io.Serializable;
2525
import java.util.Arrays;
26-
import java.util.Objects;
2726
import java.util.UUID;
2827

2928
import org.junit.jupiter.api.Test;
@@ -36,22 +35,12 @@
3635
* @author Thomas Darimont
3736
* @author Christoph Strobl
3837
* @author Mark Paluch
38+
* @author Chris Bono
3939
*/
4040
class JacksonJsonRedisSerializerTests {
4141

4242
private JacksonJsonRedisSerializer<Person> serializer = new JacksonJsonRedisSerializer<>(Person.class);
4343

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-
5544
@Test // DATAREDIS-241
5645
void testJacksonJsonSerializerShouldReturnEmptyByteArrayWhenSerializingNull() {
5746
assertThat(serializer.serialize(null)).isEqualTo(new byte[0]);
@@ -82,48 +71,47 @@ void shouldConsiderWriter() {
8271
assertThat(serializer.serialize(person)).isEqualTo("foo".getBytes());
8372
}
8473

85-
static class SessionToken implements Serializable {
74+
@Test // GH-3271
75+
void canDeserializeSerializedStandardPojo() {
8676

87-
private String userUuid;
77+
// Where "Standard" is POJO w/ private fields w/ getters/setters
8878

89-
private SessionToken() {
90-
// why jackson?
91-
}
79+
Person person = new PersonObjectFactory().instance();
80+
byte[] serializedPerson = JsonMapper.shared().writeValueAsString(person).getBytes();
9281

93-
public SessionToken(String userUuid) {
94-
this.userUuid = userUuid;
95-
}
82+
Person deserializedPerson = serializer.deserialize(serializedPerson);
9683

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+
}
10087

101-
public void setUserUuid(String userUuid) {
102-
this.userUuid = userUuid;
103-
}
88+
@Test // GH-3271
89+
void canDeserializeSerializedPropertyPojo() {
10490

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
11692

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);
12199

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() {
125109
}
126110

111+
SessionTokenPropertyPojo(String userUuid) {
112+
this();
113+
this.userUuid = userUuid;
114+
}
127115
}
128116

129117
}

0 commit comments

Comments
 (0)