11package me .desair .tus .server .util ;
22
3+ import static org .hamcrest .MatcherAssert .assertThat ;
4+ import static org .hamcrest .Matchers .hasItems ;
5+ import static org .hamcrest .Matchers .is ;
6+ import static org .hamcrest .Matchers .notNullValue ;
7+ import static org .hamcrest .Matchers .nullValue ;
38import static org .junit .Assert .assertEquals ;
49import static org .junit .Assert .assertNull ;
10+ import static org .mockito .Mockito .mock ;
511import static org .mockito .Mockito .when ;
612
713import jakarta .servlet .ReadListener ;
1117import java .io .IOException ;
1218import java .io .InputStream ;
1319import java .nio .charset .StandardCharsets ;
20+ import java .util .Set ;
21+ import me .desair .tus .server .HttpHeader ;
22+ import me .desair .tus .server .TusExtension ;
23+ import me .desair .tus .server .checksum .ChecksumAlgorithm ;
1424import org .apache .commons .io .IOUtils ;
1525import org .junit .Before ;
1626import org .junit .Test ;
@@ -23,18 +33,134 @@ public class TusServletRequestTest {
2333
2434 @ Mock private HttpServletRequest servletRequest ;
2535
26- private TusServletRequest tusServletRequest ;
36+ private TusServletRequest request ;
2737
2838 @ Before
2939 public void setUp () {
30- tusServletRequest = new TusServletRequest (servletRequest , true );
40+ request = new TusServletRequest (servletRequest , true );
41+ }
42+
43+ @ Test
44+ public void testGetContentInputStream () throws Exception {
45+ byte [] data = "test data" .getBytes ();
46+ when (servletRequest .getInputStream ())
47+ .thenReturn (new MockServletInputStream (new ByteArrayInputStream (data )));
48+
49+ InputStream is = request .getContentInputStream ();
50+
51+ assertThat (is , notNullValue ());
52+
53+ // Read to the end to trigger counting
54+ byte [] buffer = new byte [1024 ];
55+ int bytesRead = is .read (buffer );
56+
57+ assertThat (bytesRead , is (9 ));
58+ assertThat (request .getBytesRead (), is (9L ));
59+ }
60+
61+ @ Test
62+ public void testGetContentInputStreamChunked () throws Exception {
63+ TusServletRequest chunkedRequest = new TusServletRequest (servletRequest , true );
64+
65+ byte [] data = "5\r \n test \r \n 4\r \n data\r \n 0\r \n \r \n " .getBytes ();
66+ when (servletRequest .getInputStream ())
67+ .thenReturn (new MockServletInputStream (new ByteArrayInputStream (data )));
68+ when (servletRequest .getHeader (HttpHeader .TRANSFER_ENCODING )).thenReturn ("chunked" );
69+
70+ InputStream is = chunkedRequest .getContentInputStream ();
71+
72+ assertThat (is , notNullValue ());
73+
74+ // Read to the end to trigger counting
75+ byte [] buffer = new byte [1024 ];
76+ int bytesRead = 0 ;
77+ int read ;
78+ while ((read = is .read (buffer )) != -1 ) {
79+ bytesRead += read ;
80+ }
81+
82+ assertThat (bytesRead , is (9 ));
83+ assertThat (chunkedRequest .getBytesRead (), is (9L ));
84+ }
85+
86+ @ Test
87+ public void testGetContentInputStreamWithChecksum () throws Exception {
88+ byte [] data = "test data" .getBytes ();
89+ when (servletRequest .getInputStream ())
90+ .thenReturn (new MockServletInputStream (new ByteArrayInputStream (data )));
91+ when (servletRequest .getHeader (HttpHeader .UPLOAD_CHECKSUM ))
92+ .thenReturn ("sha1 9I3YU4IIYIFsddVND1hNyGMyenw=" );
93+
94+ InputStream is = request .getContentInputStream ();
95+ assertThat (is , notNullValue ());
96+
97+ byte [] buffer = new byte [1024 ];
98+ int read ;
99+ while ((read = is .read (buffer )) != -1 ) {
100+ // Consume stream completely to calculate checksum
101+ }
102+
103+ assertThat (request .hasCalculatedChecksum (), is (true ));
104+ Set <ChecksumAlgorithm > algorithms = request .getEnabledChecksums ();
105+ assertThat (algorithms , hasItems (ChecksumAlgorithm .SHA1 ));
106+
107+ assertThat (
108+ request .getCalculatedChecksum (ChecksumAlgorithm .SHA1 ), is ("9I3YU4IIYIFsddVND1hNyGMyenw=" ));
109+ }
110+
111+ @ Test
112+ public void testGetContentInputStreamChunkedWithChecksum () throws Exception {
113+ TusServletRequest chunkedRequest = new TusServletRequest (servletRequest , true );
114+
115+ byte [] data = "5\r \n test \r \n 4\r \n data\r \n 0\r \n \r \n " .getBytes ();
116+ when (servletRequest .getInputStream ())
117+ .thenReturn (new MockServletInputStream (new ByteArrayInputStream (data )));
118+ when (servletRequest .getHeader (HttpHeader .TRANSFER_ENCODING )).thenReturn ("chunked" );
119+
120+ InputStream is = chunkedRequest .getContentInputStream ();
121+ assertThat (is , notNullValue ());
122+
123+ byte [] buffer = new byte [1024 ];
124+ int read ;
125+ while ((read = is .read (buffer )) != -1 ) {
126+ // Consume stream completely to calculate checksum
127+ }
128+
129+ assertThat (chunkedRequest .hasCalculatedChecksum (), is (true ));
130+ Set <ChecksumAlgorithm > algorithms = chunkedRequest .getEnabledChecksums ();
131+ // Since it's chunked and checksum can come at the end, it should keep track of all algorithms
132+ assertThat (algorithms , hasItems (ChecksumAlgorithm .values ()));
133+
134+ assertThat (
135+ chunkedRequest .getCalculatedChecksum (ChecksumAlgorithm .SHA1 ),
136+ is ("9I3YU4IIYIFsddVND1hNyGMyenw=" ));
137+ }
138+
139+ @ Test
140+ public void testIsProcessedBy () {
141+ TusExtension extension = mock (TusExtension .class );
142+ when (extension .getName ()).thenReturn ("test" );
143+
144+ assertThat (request .isProcessedBy (extension ), is (false ));
145+
146+ request .addProcessor (extension );
147+
148+ assertThat (request .isProcessedBy (extension ), is (true ));
149+ }
150+
151+ @ Test
152+ public void testGetHeader () {
153+ when (servletRequest .getHeader ("X-Custom-Header" )).thenReturn ("custom-value" );
154+
155+ assertThat (request .getHeader ("X-Custom-Header" ), is ("custom-value" ));
156+ assertThat (request .getHeader ("X-Non-Existent" ), is (nullValue ()));
31157 }
32158
33159 @ Test
34160 public void getHeaderFromSuper () {
35161 when (servletRequest .getHeader ("X-My-Header" )).thenReturn ("my-value" );
36162
37- assertEquals ("my-value" , tusServletRequest .getHeader ("X-My-Header" ));
163+ assertEquals ("my-value" , request .getHeader ("X-My-Header" ));
38164 }
39165
40166 @ Test
@@ -68,11 +194,11 @@ public int read() throws IOException {
68194 });
69195
70196 // Read the whole input stream to parse trailers
71- InputStream contentInputStream = tusServletRequest .getContentInputStream ();
197+ InputStream contentInputStream = request .getContentInputStream ();
72198 IOUtils .toByteArray (contentInputStream );
73199
74200 // Verify trailer header is returned
75- assertEquals ("trailer-value" , tusServletRequest .getHeader ("X-My-Trailer" ));
201+ assertEquals ("trailer-value" , request .getHeader ("X-My-Trailer" ));
76202 }
77203
78204 @ Test
@@ -106,16 +232,16 @@ public int read() throws IOException {
106232 });
107233
108234 // Read the whole input stream to parse trailers
109- InputStream contentInputStream = tusServletRequest .getContentInputStream ();
235+ InputStream contentInputStream = request .getContentInputStream ();
110236 IOUtils .toByteArray (contentInputStream );
111237
112238 // Verify trailer header is returned because super returned a blank string
113- assertEquals ("trailer-value" , tusServletRequest .getHeader ("X-My-Trailer" ));
239+ assertEquals ("trailer-value" , request .getHeader ("X-My-Trailer" ));
114240 }
115241
116242 @ Test
117243 public void getHeaderNotFound () {
118244 when (servletRequest .getHeader ("X-My-Header" )).thenReturn (null );
119- assertNull (tusServletRequest .getHeader ("X-My-Header" ));
245+ assertNull (request .getHeader ("X-My-Header" ));
120246 }
121247}
0 commit comments