From bfeca4a0bf0f02f06e42413065b5cc651ae94963 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sun, 13 Aug 2023 16:59:12 +0200 Subject: [PATCH] Polish contribution See gh-30744 --- .../core/serializer/DefaultDeserializer.java | 3 +- .../SerializationConverterTests.java | 39 ++++++----- .../core/serializer/SerializerTests.java | 67 +++++++++++-------- 3 files changed, 62 insertions(+), 47 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java b/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java index 256342d1f92..07bf246b058 100644 --- a/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java +++ b/spring-core/src/main/java/org/springframework/core/serializer/DefaultDeserializer.java @@ -67,7 +67,8 @@ public class DefaultDeserializer implements Deserializer { @Override @SuppressWarnings("resource") public Object deserialize(InputStream inputStream) throws IOException { - try (ConfigurableObjectInputStream objectInputStream = new ConfigurableObjectInputStream(inputStream, this.classLoader)){ + ObjectInputStream objectInputStream = new ConfigurableObjectInputStream(inputStream, this.classLoader); + try { return objectInputStream.readObject(); } catch (ClassNotFoundException ex) { diff --git a/spring-core/src/test/java/org/springframework/core/serializer/SerializationConverterTests.java b/spring-core/src/test/java/org/springframework/core/serializer/SerializationConverterTests.java index 446cef5090e..5c982983c1d 100644 --- a/spring-core/src/test/java/org/springframework/core/serializer/SerializationConverterTests.java +++ b/spring-core/src/test/java/org/springframework/core/serializer/SerializationConverterTests.java @@ -31,11 +31,12 @@ import org.springframework.core.serializer.support.SerializingConverter; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.assertThatIOException; import static org.mockito.BDDMockito.given; - /** + * Unit tests for {@link SerializingConverter} and {@link DeserializingConverter}. + * * @author Gary Russell * @author Mark Fisher * @since 3.0.5 @@ -43,7 +44,7 @@ import static org.mockito.BDDMockito.given; class SerializationConverterTests { @Test - void serializeAndDeserializeString() { + void serializeAndDeserializeStringWithDefaultSerializer() { SerializingConverter toBytes = new SerializingConverter(); byte[] bytes = toBytes.convert("Testing"); DeserializingConverter fromBytes = new DeserializingConverter(); @@ -51,7 +52,7 @@ class SerializationConverterTests { } @Test - void serializeAndDeserializeStringWithCustomSerializer() { + void serializeAndDeserializeStringWithExplicitSerializer() { SerializingConverter toBytes = new SerializingConverter(new DefaultSerializer()); byte[] bytes = toBytes.convert("Testing"); DeserializingConverter fromBytes = new DeserializingConverter(); @@ -63,7 +64,9 @@ class SerializationConverterTests { SerializingConverter toBytes = new SerializingConverter(); assertThatExceptionOfType(SerializationFailedException.class) .isThrownBy(() -> toBytes.convert(new Object())) - .withCauseInstanceOf(IllegalArgumentException.class); + .havingCause() + .isInstanceOf(IllegalArgumentException.class) + .withMessageContaining("requires a Serializable payload"); } @Test @@ -82,15 +85,15 @@ class SerializationConverterTests { } @Test - void deserializationWithClassLoader() { - DeserializingConverter fromBytes = new DeserializingConverter(this.getClass().getClassLoader()); + void deserializationWithExplicitClassLoader() { + DeserializingConverter fromBytes = new DeserializingConverter(getClass().getClassLoader()); SerializingConverter toBytes = new SerializingConverter(); String expected = "SPRING FRAMEWORK"; assertThat(fromBytes.convert(toBytes.convert(expected))).isEqualTo(expected); } @Test - void deserializationWithDeserializer() { + void deserializationWithExplicitDeserializer() { DeserializingConverter fromBytes = new DeserializingConverter(new DefaultDeserializer()); SerializingConverter toBytes = new SerializingConverter(); String expected = "SPRING FRAMEWORK"; @@ -99,24 +102,26 @@ class SerializationConverterTests { @Test void deserializationIOException() { - try (MockedConstruction mocked = Mockito.mockConstruction( - ConfigurableObjectInputStream.class, (mock, context) -> given(mock.readObject()) - .willThrow(new ClassNotFoundException()))) { - DefaultDeserializer defaultSerializer = new DefaultDeserializer(this.getClass().getClassLoader()); + ClassNotFoundException classNotFoundException = new ClassNotFoundException(); + try (MockedConstruction mocked = + Mockito.mockConstruction(ConfigurableObjectInputStream.class, + (mock, context) -> given(mock.readObject()).willThrow(classNotFoundException))) { + DefaultDeserializer defaultSerializer = new DefaultDeserializer(getClass().getClassLoader()); assertThat(mocked).isNotNull(); - assertThatThrownBy(() -> defaultSerializer.deserialize( - new ByteArrayInputStream("test".getBytes()))) - .hasMessage("Failed to deserialize object type"); + assertThatIOException() + .isThrownBy(() -> defaultSerializer.deserialize(new ByteArrayInputStream("test".getBytes()))) + .withMessage("Failed to deserialize object type") + .havingCause().isSameAs(classNotFoundException); } } - class UnSerializable implements Serializable { + static class UnSerializable implements Serializable { private static final long serialVersionUID = 1L; @SuppressWarnings({"unused", "serial"}) - private Object object; + private Object object = new Object(); } } diff --git a/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java b/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java index 38233499fbf..e98aa9a6af5 100644 --- a/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java +++ b/spring-core/src/test/java/org/springframework/core/serializer/SerializerTests.java @@ -27,7 +27,11 @@ import org.springframework.core.serializer.support.SerializationDelegate; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - +/** + * Unit tests for {@link Serializer}, {@link Deserializer}, and {@link SerializationDelegate}. + * + * @since 6.1 + */ class SerializerTests { private static final String SPRING_FRAMEWORK = "Spring Framework"; @@ -35,21 +39,47 @@ class SerializerTests { @Test void serializeToByteArray() throws IOException { - SpyStringSerializer serializer = new SpyStringSerializer(); + + class SpyStringSerializer implements Serializer { + + String expectedObject; + OutputStream expectedOutputStream; + + @Override + public void serialize(String object, OutputStream outputStream) { + this.expectedObject = object; + this.expectedOutputStream = outputStream; + } + } + + SpyStringSerializer serializer = new SpyStringSerializer(); serializer.serializeToByteArray(SPRING_FRAMEWORK); assertThat(serializer.expectedObject).isEqualTo(SPRING_FRAMEWORK); - assertThat(serializer.expectedOs).isNotNull(); + assertThat(serializer.expectedOutputStream).isNotNull(); } @Test void deserializeToByteArray() throws IOException { + + class SpyStringDeserializer implements Deserializer { + + InputStream expectedInputStream; + + @Override + public String deserialize(InputStream inputStream) { + this.expectedInputStream = inputStream; + return SPRING_FRAMEWORK; + } + } + SpyStringDeserializer deserializer = new SpyStringDeserializer(); - deserializer.deserializeFromByteArray(SPRING_FRAMEWORK.getBytes()); - assertThat(deserializer.expectedObject).isEqualTo(SPRING_FRAMEWORK); + Object deserializedObj = deserializer.deserializeFromByteArray(SPRING_FRAMEWORK.getBytes()); + assertThat(deserializedObj).isEqualTo(SPRING_FRAMEWORK); + assertThat(deserializer.expectedInputStream).isNotNull(); } @Test - void serializationDelegate() throws IOException { + void serializationDelegateWithExplicitSerializerAndDeserializer() throws IOException { SerializationDelegate delegate = new SerializationDelegate(new DefaultSerializer(), new DefaultDeserializer()); byte[] serializedObj = delegate.serializeToByteArray(SPRING_FRAMEWORK); Object deserializedObj = delegate.deserialize(new ByteArrayInputStream(serializedObj)); @@ -57,32 +87,11 @@ class SerializerTests { } @Test - void serializationDelegateWithClassLoader() throws IOException { - SerializationDelegate delegate = new SerializationDelegate(this.getClass().getClassLoader()); + void serializationDelegateWithExplicitClassLoader() throws IOException { + SerializationDelegate delegate = new SerializationDelegate(getClass().getClassLoader()); byte[] serializedObj = delegate.serializeToByteArray(SPRING_FRAMEWORK); Object deserializedObj = delegate.deserialize(new ByteArrayInputStream(serializedObj)); assertThat(deserializedObj).isEqualTo(SPRING_FRAMEWORK); } - static class SpyStringSerializer implements Serializer { - T expectedObject; - OutputStream expectedOs; - - @Override - public void serialize(T object, OutputStream outputStream) { - expectedObject = object; - expectedOs = outputStream; - } - } - - static class SpyStringDeserializer implements Deserializer { - Object expectedObject; - - - @Override - public String deserialize(InputStream inputStream) { - expectedObject = SPRING_FRAMEWORK; - return SPRING_FRAMEWORK; - } - } }