1+ package uk .ac .ox .ctl .canvasproxy ;
2+
3+ import jakarta .servlet .FilterChain ;
4+ import jakarta .servlet .ServletRequest ;
5+ import jakarta .servlet .ServletResponse ;
6+ import jakarta .servlet .http .HttpServletRequest ;
7+ import jakarta .servlet .http .HttpServletResponse ;
8+ import org .junit .jupiter .api .BeforeEach ;
9+ import org .junit .jupiter .api .Test ;
10+
11+ import java .io .IOException ;
12+
13+ import static org .mockito .Mockito .*;
14+
15+ class ViaFilterTest {
16+
17+ private ViaFilter filter ;
18+ private HttpServletRequest request ;
19+ private HttpServletResponse response ;
20+ private FilterChain chain ;
21+
22+ @ BeforeEach
23+ void setUp () {
24+ filter = new ViaFilter ();
25+ request = mock (HttpServletRequest .class );
26+ response = mock (HttpServletResponse .class );
27+ chain = mock (FilterChain .class );
28+ }
29+
30+ @ Test
31+ void shouldAddViaHeaderWhenNoneExists () throws Exception {
32+ when (request .getProtocol ()).thenReturn ("HTTP/1.1" );
33+ when (request .getServerName ()).thenReturn ("localhost" );
34+ when (response .getHeader ("Via" )).thenReturn (null );
35+
36+ filter .doFilter (request , response , chain );
37+
38+ verify (response ).setHeader ("Via" , "HTTP/1.1 localhost tool-support" );
39+ verify (chain ).doFilter (request , response );
40+ }
41+
42+ @ Test
43+ void shouldAppendToExistingViaHeader () throws Exception {
44+ when (request .getProtocol ()).thenReturn ("HTTP/2" );
45+ when (request .getServerName ()).thenReturn ("myserver" );
46+ when (response .getHeader ("Via" )).thenReturn ("HTTP/1.1 proxy1" );
47+
48+ filter .doFilter (request , response , chain );
49+
50+ verify (response ).setHeader ("Via" , "HTTP/1.1 proxy1, HTTP/2 myserver tool-support" );
51+ verify (chain ).doFilter (request , response );
52+ }
53+
54+ @ Test
55+ void shouldHandleNonHttpRequestsGracefully () throws IOException , jakarta .servlet .ServletException {
56+ ServletRequest genericRequest = mock (ServletRequest .class );
57+ ServletResponse genericResponse = mock (ServletResponse .class );
58+
59+ filter .doFilter (genericRequest , genericResponse , chain );
60+
61+ verify (chain ).doFilter (genericRequest , genericResponse );
62+ // no headers should be set
63+ verifyNoInteractions (response );
64+ }
65+ }
0 commit comments