Skip to content

Commit 9e06205

Browse files
author
Vincent Potucek
committed
simplify try with resource
Signed-off-by: Vincent Potucek <[email protected]>
1 parent f1f02d2 commit 9e06205

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

spring-web/src/test/java/org/springframework/http/converter/ResourceRegionHttpMessageConverterTests.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.http.converter;
1818

1919
import java.io.ByteArrayInputStream;
20+
import java.io.IOException;
2021
import java.lang.reflect.Type;
2122
import java.nio.charset.StandardCharsets;
2223
import java.util.ArrayList;
@@ -27,6 +28,7 @@
2728

2829
import org.springframework.core.ParameterizedTypeReference;
2930
import org.springframework.core.io.ClassPathResource;
31+
import org.springframework.core.io.InputStreamResource;
3032
import org.springframework.core.io.Resource;
3133
import org.springframework.core.io.support.ResourceRegion;
3234
import org.springframework.http.HttpHeaders;
@@ -36,6 +38,7 @@
3638
import org.springframework.web.testfixture.http.MockHttpOutputMessage;
3739

3840
import static org.assertj.core.api.Assertions.assertThat;
41+
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
3942
import static org.mockito.BDDMockito.given;
4043
import static org.mockito.Mockito.mock;
4144

@@ -198,4 +201,86 @@ public void applicationOctetStreamDefaultContentType() throws Exception {
198201
assertThat(outputMessage.getBodyAsString(StandardCharsets.UTF_8)).isEqualTo("Spring");
199202
}
200203

204+
@Test
205+
void shouldNotWriteForUnsupportedType() throws Exception {
206+
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
207+
Object unsupportedBody = new Object();
208+
209+
assertThatThrownBy(() -> converter.write(unsupportedBody, null, outputMessage))
210+
.isInstanceOf(HttpMessageNotWritableException.class);
211+
}
212+
213+
@Test
214+
void shouldHandleEmptyResourceRegionCollection() throws Exception {
215+
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
216+
List<ResourceRegion> emptyRegions = Collections.emptyList();
217+
218+
assertThatThrownBy(() -> converter.write(emptyRegions, null, outputMessage))
219+
.isInstanceOf(HttpMessageNotWritableException.class);
220+
}
221+
222+
@Test
223+
void shouldGetDefaultContentTypeForResourceRegion() {
224+
Resource resource = new ClassPathResource("byterangeresource.txt", getClass());
225+
ResourceRegion region = new ResourceRegion(resource, 0, 10);
226+
227+
MediaType contentType = converter.getDefaultContentType(region);
228+
assertThat(contentType).isEqualTo(MediaType.TEXT_PLAIN);
229+
}
230+
231+
@Test
232+
void shouldGetDefaultOctetStreamContentTypeForUnknownResource() {
233+
Resource resource = mock(Resource.class);
234+
given(resource.getFilename()).willReturn("unknown.dat");
235+
ResourceRegion region = new ResourceRegion(resource, 0, 10);
236+
237+
MediaType contentType = converter.getDefaultContentType(region);
238+
assertThat(contentType).isEqualTo(MediaType.APPLICATION_OCTET_STREAM);
239+
}
240+
241+
@Test
242+
void shouldSupportRepeatableWritesForNonInputStreamResource() {
243+
Resource resource = new ClassPathResource("byterangeresource.txt", getClass());
244+
ResourceRegion region = new ResourceRegion(resource, 0, 10);
245+
246+
assertThat(converter.supportsRepeatableWrites(region)).isTrue();
247+
}
248+
249+
@Test
250+
void shouldNotSupportRepeatableWritesForInputStreamResource() {
251+
Resource resource = mock(InputStreamResource.class);
252+
ResourceRegion region = new ResourceRegion(resource, 0, 10);
253+
254+
assertThat(converter.supportsRepeatableWrites(region)).isFalse();
255+
}
256+
257+
@Test
258+
void shouldHandleIOExceptionWhenWritingRegion() throws Exception {
259+
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
260+
Resource resource = mock(Resource.class);
261+
given(resource.contentLength()).willReturn(10L);
262+
given(resource.getInputStream()).willThrow(new IOException("Simulated error"));
263+
ResourceRegion region = new ResourceRegion(resource, 0, 5);
264+
265+
// Should not throw exception
266+
converter.write(region, MediaType.TEXT_PLAIN, outputMessage);
267+
268+
assertThat(outputMessage.getHeaders().getRange()).isEqualTo(HttpRange.parseRanges("bytes 0-4/10"));
269+
}
270+
271+
@Test
272+
void shouldHandleIOExceptionWhenWritingRegionCollection() throws Exception {
273+
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
274+
Resource resource = mock(Resource.class);
275+
given(resource.contentLength()).willReturn(10L);
276+
given(resource.getInputStream()).willThrow(new IOException("Simulated error"));
277+
ResourceRegion region = new ResourceRegion(resource, 0, 5);
278+
List<ResourceRegion> regions = Collections.singletonList(region);
279+
280+
// Should not throw exception
281+
converter.write(regions, MediaType.TEXT_PLAIN, outputMessage);
282+
283+
assertThat(outputMessage.getHeaders().getContentType().toString())
284+
.startsWith("multipart/byteranges;boundary=");
285+
}
201286
}

0 commit comments

Comments
 (0)