Skip to content

Commit c641981

Browse files
🧪 [testing improvement] Add tests for TusServletRequest trailer header fallback (#129)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: tomdesair <14034630+tomdesair@users.noreply.github.com>
1 parent 8e6e1eb commit c641981

1 file changed

Lines changed: 121 additions & 0 deletions

File tree

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package me.desair.tus.server.util;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNull;
5+
import static org.mockito.Mockito.when;
6+
7+
import jakarta.servlet.ReadListener;
8+
import jakarta.servlet.ServletInputStream;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import java.io.ByteArrayInputStream;
11+
import java.io.IOException;
12+
import java.io.InputStream;
13+
import java.nio.charset.StandardCharsets;
14+
import org.apache.commons.io.IOUtils;
15+
import org.junit.Before;
16+
import org.junit.Test;
17+
import org.junit.runner.RunWith;
18+
import org.mockito.Mock;
19+
import org.mockito.junit.MockitoJUnitRunner;
20+
21+
@RunWith(MockitoJUnitRunner.class)
22+
public class TusServletRequestTest {
23+
24+
@Mock private HttpServletRequest servletRequest;
25+
26+
private TusServletRequest tusServletRequest;
27+
28+
@Before
29+
public void setUp() {
30+
tusServletRequest = new TusServletRequest(servletRequest, true);
31+
}
32+
33+
@Test
34+
public void getHeaderFromSuper() {
35+
when(servletRequest.getHeader("X-My-Header")).thenReturn("my-value");
36+
37+
assertEquals("my-value", tusServletRequest.getHeader("X-My-Header"));
38+
}
39+
40+
@Test
41+
public void getHeaderFromTrailer() throws Exception {
42+
when(servletRequest.getHeader("Transfer-Encoding")).thenReturn("chunked");
43+
when(servletRequest.getHeader("X-My-Trailer")).thenReturn(null);
44+
45+
String chunkedContent = "5\r\n" + "hello\r\n" + "0\r\n" + "X-My-Trailer: trailer-value\r\n\r\n";
46+
InputStream bais = new ByteArrayInputStream(chunkedContent.getBytes(StandardCharsets.UTF_8));
47+
48+
when(servletRequest.getInputStream())
49+
.thenReturn(
50+
new ServletInputStream() {
51+
@Override
52+
public boolean isFinished() {
53+
return false;
54+
}
55+
56+
@Override
57+
public boolean isReady() {
58+
return true;
59+
}
60+
61+
@Override
62+
public void setReadListener(ReadListener readListener) {}
63+
64+
@Override
65+
public int read() throws IOException {
66+
return bais.read();
67+
}
68+
});
69+
70+
// Read the whole input stream to parse trailers
71+
InputStream contentInputStream = tusServletRequest.getContentInputStream();
72+
IOUtils.toByteArray(contentInputStream);
73+
74+
// Verify trailer header is returned
75+
assertEquals("trailer-value", tusServletRequest.getHeader("X-My-Trailer"));
76+
}
77+
78+
@Test
79+
public void getHeaderBlankFallsBackToTrailer() throws Exception {
80+
when(servletRequest.getHeader("Transfer-Encoding")).thenReturn("chunked");
81+
when(servletRequest.getHeader("X-My-Trailer")).thenReturn("");
82+
83+
String chunkedContent = "5\r\n" + "hello\r\n" + "0\r\n" + "X-My-Trailer: trailer-value\r\n\r\n";
84+
InputStream bais = new ByteArrayInputStream(chunkedContent.getBytes(StandardCharsets.UTF_8));
85+
86+
when(servletRequest.getInputStream())
87+
.thenReturn(
88+
new ServletInputStream() {
89+
@Override
90+
public boolean isFinished() {
91+
return false;
92+
}
93+
94+
@Override
95+
public boolean isReady() {
96+
return true;
97+
}
98+
99+
@Override
100+
public void setReadListener(ReadListener readListener) {}
101+
102+
@Override
103+
public int read() throws IOException {
104+
return bais.read();
105+
}
106+
});
107+
108+
// Read the whole input stream to parse trailers
109+
InputStream contentInputStream = tusServletRequest.getContentInputStream();
110+
IOUtils.toByteArray(contentInputStream);
111+
112+
// Verify trailer header is returned because super returned a blank string
113+
assertEquals("trailer-value", tusServletRequest.getHeader("X-My-Trailer"));
114+
}
115+
116+
@Test
117+
public void getHeaderNotFound() {
118+
when(servletRequest.getHeader("X-My-Header")).thenReturn(null);
119+
assertNull(tusServletRequest.getHeader("X-My-Header"));
120+
}
121+
}

0 commit comments

Comments
 (0)