1
1
/*
2
- * Copyright 2002-2020 the original author or authors.
2
+ * Copyright 2002-2024 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
16
16
17
17
package org .springframework .web .filter ;
18
18
19
- import java .nio .charset .StandardCharsets ;
20
-
21
19
import javax .servlet .FilterChain ;
22
20
import javax .servlet .http .HttpServletResponse ;
23
21
24
22
import org .junit .jupiter .api .Test ;
25
23
26
- import org .springframework .http .MediaType ;
27
24
import org .springframework .util .FileCopyUtils ;
28
25
import org .springframework .util .StreamUtils ;
29
26
import org .springframework .web .testfixture .servlet .MockHttpServletRequest ;
30
27
import org .springframework .web .testfixture .servlet .MockHttpServletResponse ;
31
28
29
+ import static java .nio .charset .StandardCharsets .UTF_8 ;
32
30
import static org .assertj .core .api .Assertions .assertThat ;
31
+ import static org .springframework .http .MediaType .TEXT_PLAIN_VALUE ;
33
32
34
33
/**
34
+ * Tests for {@link ShallowEtagHeaderFilter}.
35
+ *
35
36
* @author Arjen Poutsma
36
37
* @author Brian Clozel
37
38
* @author Juergen Hoeller
38
39
*/
39
- public class ShallowEtagHeaderFilterTests {
40
+ class ShallowEtagHeaderFilterTests {
40
41
41
42
private final ShallowEtagHeaderFilter filter = new ShallowEtagHeaderFilter ();
42
43
43
44
44
45
@ Test
45
- public void isEligibleForEtag () {
46
+ void isEligibleForEtag () {
46
47
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
47
48
MockHttpServletResponse response = new MockHttpServletResponse ();
48
49
@@ -61,60 +62,60 @@ public void isEligibleForEtag() {
61
62
}
62
63
63
64
@ Test
64
- public void filterNoMatch () throws Exception {
65
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
65
+ void filterNoMatch () throws Exception {
66
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
66
67
MockHttpServletResponse response = new MockHttpServletResponse ();
67
68
68
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
69
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
69
70
FilterChain filterChain = (filterRequest , filterResponse ) -> {
70
71
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
71
72
((HttpServletResponse ) filterResponse ).setStatus (HttpServletResponse .SC_OK );
72
- filterResponse .setContentType (MediaType . TEXT_PLAIN_VALUE );
73
+ filterResponse .setContentType (TEXT_PLAIN_VALUE );
73
74
FileCopyUtils .copy (responseBody , filterResponse .getOutputStream ());
74
75
};
75
76
filter .doFilter (request , response , filterChain );
76
77
77
78
assertThat (response .getStatus ()).as ("Invalid status" ).isEqualTo (200 );
78
79
assertThat (response .getHeader ("ETag" )).as ("Invalid ETag" ).isEqualTo ("\" 0b10a8db164e0754105b7a99be72e3fe5\" " );
79
- assertThat (response .getContentLength () > 0 ).as ("Invalid Content-Length header" ).isTrue ( );
80
- assertThat (response .getContentType ()).as ("Invalid Content-Type header" ).isEqualTo (MediaType . TEXT_PLAIN_VALUE );
80
+ assertThat (response .getContentLength ()).as ("Invalid Content-Length header" ).isGreaterThan ( 0 );
81
+ assertThat (response .getContentType ()).as ("Invalid Content-Type header" ).isEqualTo (TEXT_PLAIN_VALUE );
81
82
assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEqualTo (responseBody );
82
83
}
83
84
84
85
@ Test
85
- public void filterNoMatchWeakETag () throws Exception {
86
+ void filterNoMatchWeakETag () throws Exception {
86
87
this .filter .setWriteWeakETag (true );
87
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
88
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
88
89
MockHttpServletResponse response = new MockHttpServletResponse ();
89
90
90
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
91
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
91
92
FilterChain filterChain = (filterRequest , filterResponse ) -> {
92
93
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
93
94
((HttpServletResponse ) filterResponse ).setStatus (HttpServletResponse .SC_OK );
94
- filterResponse .setContentType (MediaType . TEXT_PLAIN_VALUE );
95
+ filterResponse .setContentType (TEXT_PLAIN_VALUE );
95
96
FileCopyUtils .copy (responseBody , filterResponse .getOutputStream ());
96
97
};
97
98
filter .doFilter (request , response , filterChain );
98
99
99
100
assertThat (response .getStatus ()).as ("Invalid status" ).isEqualTo (200 );
100
101
assertThat (response .getHeader ("ETag" )).as ("Invalid ETag" ).isEqualTo ("W/\" 0b10a8db164e0754105b7a99be72e3fe5\" " );
101
- assertThat (response .getContentLength () > 0 ).as ("Invalid Content-Length header" ).isTrue ( );
102
- assertThat (response .getContentType ()).as ("Invalid Content-Type header" ).isEqualTo (MediaType . TEXT_PLAIN_VALUE );
102
+ assertThat (response .getContentLength ()).as ("Invalid Content-Length header" ).isGreaterThan ( 0 );
103
+ assertThat (response .getContentType ()).as ("Invalid Content-Type header" ).isEqualTo (TEXT_PLAIN_VALUE );
103
104
assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEqualTo (responseBody );
104
105
}
105
106
106
107
@ Test
107
- public void filterMatch () throws Exception {
108
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
108
+ void filterMatch () throws Exception {
109
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
109
110
String etag = "\" 0b10a8db164e0754105b7a99be72e3fe5\" " ;
110
111
request .addHeader ("If-None-Match" , etag );
111
112
MockHttpServletResponse response = new MockHttpServletResponse ();
112
113
113
114
FilterChain filterChain = (filterRequest , filterResponse ) -> {
114
115
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
115
- byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
116
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
116
117
filterResponse .setContentLength (responseBody .length );
117
- filterResponse .setContentType (MediaType . TEXT_PLAIN_VALUE );
118
+ filterResponse .setContentType (TEXT_PLAIN_VALUE );
118
119
FileCopyUtils .copy (responseBody , filterResponse .getOutputStream ());
119
120
};
120
121
filter .doFilter (request , response , filterChain );
@@ -123,20 +124,19 @@ public void filterMatch() throws Exception {
123
124
assertThat (response .getHeader ("ETag" )).as ("Invalid ETag" ).isEqualTo ("\" 0b10a8db164e0754105b7a99be72e3fe5\" " );
124
125
assertThat (response .containsHeader ("Content-Length" )).as ("Response has Content-Length header" ).isFalse ();
125
126
assertThat (response .containsHeader ("Content-Type" )).as ("Response has Content-Type header" ).isFalse ();
126
- byte [] expecteds = new byte [0 ];
127
- assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEqualTo (expecteds );
127
+ assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEmpty ();
128
128
}
129
129
130
130
@ Test
131
- public void filterMatchWeakEtag () throws Exception {
132
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
131
+ void filterMatchWeakEtag () throws Exception {
132
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
133
133
String etag = "\" 0b10a8db164e0754105b7a99be72e3fe5\" " ;
134
134
request .addHeader ("If-None-Match" , "W/" + etag );
135
135
MockHttpServletResponse response = new MockHttpServletResponse ();
136
136
137
137
FilterChain filterChain = (filterRequest , filterResponse ) -> {
138
138
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
139
- byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
139
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
140
140
FileCopyUtils .copy (responseBody , filterResponse .getOutputStream ());
141
141
filterResponse .setContentLength (responseBody .length );
142
142
};
@@ -145,13 +145,12 @@ public void filterMatchWeakEtag() throws Exception {
145
145
assertThat (response .getStatus ()).as ("Invalid status" ).isEqualTo (304 );
146
146
assertThat (response .getHeader ("ETag" )).as ("Invalid ETag" ).isEqualTo ("\" 0b10a8db164e0754105b7a99be72e3fe5\" " );
147
147
assertThat (response .containsHeader ("Content-Length" )).as ("Response has Content-Length header" ).isFalse ();
148
- byte [] expecteds = new byte [0 ];
149
- assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEqualTo (expecteds );
148
+ assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEmpty ();
150
149
}
151
150
152
151
@ Test
153
- public void filterWriter () throws Exception {
154
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
152
+ void filterWriter () throws Exception {
153
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
155
154
String etag = "\" 0b10a8db164e0754105b7a99be72e3fe5\" " ;
156
155
request .addHeader ("If-None-Match" , etag );
157
156
MockHttpServletResponse response = new MockHttpServletResponse ();
@@ -167,16 +166,15 @@ public void filterWriter() throws Exception {
167
166
assertThat (response .getStatus ()).as ("Invalid status" ).isEqualTo (304 );
168
167
assertThat (response .getHeader ("ETag" )).as ("Invalid ETag" ).isEqualTo ("\" 0b10a8db164e0754105b7a99be72e3fe5\" " );
169
168
assertThat (response .containsHeader ("Content-Length" )).as ("Response has Content-Length header" ).isFalse ();
170
- byte [] expecteds = new byte [0 ];
171
- assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEqualTo (expecteds );
169
+ assertThat (response .getContentAsByteArray ()).as ("Invalid content" ).isEmpty ();
172
170
}
173
171
174
172
@ Test // SPR-12960
175
- public void filterWriterWithDisabledCaching () throws Exception {
176
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
173
+ void filterWriterWithDisabledCaching () throws Exception {
174
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
177
175
MockHttpServletResponse response = new MockHttpServletResponse ();
178
176
179
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
177
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
180
178
FilterChain filterChain = (filterRequest , filterResponse ) -> {
181
179
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
182
180
((HttpServletResponse ) filterResponse ).setStatus (HttpServletResponse .SC_OK );
@@ -192,11 +190,11 @@ public void filterWriterWithDisabledCaching() throws Exception {
192
190
}
193
191
194
192
@ Test
195
- public void filterSendError () throws Exception {
196
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
193
+ void filterSendError () throws Exception {
194
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
197
195
MockHttpServletResponse response = new MockHttpServletResponse ();
198
196
199
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
197
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
200
198
FilterChain filterChain = (filterRequest , filterResponse ) -> {
201
199
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
202
200
response .setContentLength (100 );
@@ -212,11 +210,11 @@ public void filterSendError() throws Exception {
212
210
}
213
211
214
212
@ Test
215
- public void filterSendErrorMessage () throws Exception {
216
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
213
+ void filterSendErrorMessage () throws Exception {
214
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
217
215
MockHttpServletResponse response = new MockHttpServletResponse ();
218
216
219
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
217
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
220
218
FilterChain filterChain = (filterRequest , filterResponse ) -> {
221
219
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
222
220
response .setContentLength (100 );
@@ -233,11 +231,11 @@ public void filterSendErrorMessage() throws Exception {
233
231
}
234
232
235
233
@ Test
236
- public void filterSendRedirect () throws Exception {
237
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
234
+ void filterSendRedirect () throws Exception {
235
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
238
236
MockHttpServletResponse response = new MockHttpServletResponse ();
239
237
240
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
238
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
241
239
FilterChain filterChain = (filterRequest , filterResponse ) -> {
242
240
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
243
241
response .setContentLength (100 );
@@ -254,11 +252,11 @@ public void filterSendRedirect() throws Exception {
254
252
}
255
253
256
254
@ Test // SPR-13717
257
- public void filterFlushResponse () throws Exception {
258
- final MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
255
+ void filterFlushResponse () throws Exception {
256
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/hotels" );
259
257
MockHttpServletResponse response = new MockHttpServletResponse ();
260
258
261
- final byte [] responseBody = "Hello World" .getBytes (StandardCharsets . UTF_8 );
259
+ byte [] responseBody = "Hello World" .getBytes (UTF_8 );
262
260
FilterChain filterChain = (filterRequest , filterResponse ) -> {
263
261
assertThat (filterRequest ).as ("Invalid request passed" ).isEqualTo (request );
264
262
((HttpServletResponse ) filterResponse ).setStatus (HttpServletResponse .SC_OK );
0 commit comments