@@ -180,6 +180,96 @@ func TestGzipHandlerKeepAcceptRange(t *testing.T) {
180
180
assertEqual (t , testBody , got )
181
181
}
182
182
183
+ func TestGzipHandlerSuffixETag (t * testing.T ) {
184
+ wrapper , err := NewWrapper (SuffixETag ("-gzip" ))
185
+ assertNil (t , err )
186
+
187
+ handlerWithETag := wrapper (
188
+ http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
189
+ w .Header ().Set ("ETag" , `W/"1234"` )
190
+ w .WriteHeader (http .StatusOK )
191
+ w .Write ([]byte (testBody ))
192
+ }))
193
+ handlerWithoutETag := wrapper (
194
+ http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
195
+ w .WriteHeader (http .StatusOK )
196
+ w .Write ([]byte (testBody ))
197
+ }))
198
+
199
+ req , _ := http .NewRequest ("GET" , "/gzipped" , nil )
200
+ req .Header .Set ("Accept-Encoding" , "gzip" )
201
+
202
+ respWithEtag := httptest .NewRecorder ()
203
+ respWithoutEtag := httptest .NewRecorder ()
204
+ handlerWithETag .ServeHTTP (respWithEtag , req )
205
+ handlerWithoutETag .ServeHTTP (respWithoutEtag , req )
206
+
207
+ resWithEtag := respWithEtag .Result ()
208
+ assertEqual (t , 200 , resWithEtag .StatusCode )
209
+ assertEqual (t , "gzip" , resWithEtag .Header .Get ("Content-Encoding" ))
210
+ assertEqual (t , `W/"1234-gzip"` , resWithEtag .Header .Get ("ETag" ))
211
+ zr , err := gzip .NewReader (resWithEtag .Body )
212
+ assertNil (t , err )
213
+ got , err := io .ReadAll (zr )
214
+ assertNil (t , err )
215
+ assertEqual (t , testBody , got )
216
+
217
+ resWithoutEtag := respWithoutEtag .Result ()
218
+ assertEqual (t , 200 , resWithoutEtag .StatusCode )
219
+ assertEqual (t , "gzip" , resWithoutEtag .Header .Get ("Content-Encoding" ))
220
+ assertEqual (t , "" , resWithoutEtag .Header .Get ("ETag" ))
221
+ zr , err = gzip .NewReader (resWithoutEtag .Body )
222
+ assertNil (t , err )
223
+ got , err = io .ReadAll (zr )
224
+ assertNil (t , err )
225
+ assertEqual (t , testBody , got )
226
+ }
227
+
228
+ func TestGzipHandlerDropETag (t * testing.T ) {
229
+ wrapper , err := NewWrapper (DropETag ())
230
+ assertNil (t , err )
231
+
232
+ handlerCompressed := wrapper (
233
+ http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
234
+ w .Header ().Set ("ETag" , `W/"1234"` )
235
+ w .WriteHeader (http .StatusOK )
236
+ w .Write ([]byte (testBody ))
237
+ }))
238
+ handlerUncompressed := wrapper (
239
+ http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
240
+ w .Header ().Set ("ETag" , `W/"1234"` )
241
+ w .Header ().Set (HeaderNoCompression , "true" )
242
+ w .WriteHeader (http .StatusOK )
243
+ w .Write ([]byte (testBody ))
244
+ }))
245
+
246
+ req , _ := http .NewRequest ("GET" , "/gzipped" , nil )
247
+ req .Header .Set ("Accept-Encoding" , "gzip" )
248
+
249
+ respCompressed := httptest .NewRecorder ()
250
+ respUncompressed := httptest .NewRecorder ()
251
+ handlerCompressed .ServeHTTP (respCompressed , req )
252
+ handlerUncompressed .ServeHTTP (respUncompressed , req )
253
+
254
+ resCompressed := respCompressed .Result ()
255
+ assertEqual (t , 200 , resCompressed .StatusCode )
256
+ assertEqual (t , "gzip" , resCompressed .Header .Get ("Content-Encoding" ))
257
+ assertEqual (t , "" , resCompressed .Header .Get ("ETag" ))
258
+ zr , err := gzip .NewReader (resCompressed .Body )
259
+ assertNil (t , err )
260
+ got , err := io .ReadAll (zr )
261
+ assertNil (t , err )
262
+ assertEqual (t , testBody , got )
263
+
264
+ resUncompressed := respUncompressed .Result ()
265
+ assertEqual (t , 200 , resUncompressed .StatusCode )
266
+ assertEqual (t , "" , resUncompressed .Header .Get ("Content-Encoding" ))
267
+ assertEqual (t , `W/"1234"` , resUncompressed .Header .Get ("ETag" ))
268
+ got , err = io .ReadAll (resUncompressed .Body )
269
+ assertNil (t , err )
270
+ assertEqual (t , testBody , got )
271
+ }
272
+
183
273
func TestNewGzipLevelHandler (t * testing.T ) {
184
274
handler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
185
275
w .WriteHeader (http .StatusOK )
0 commit comments