@@ -247,3 +247,75 @@ func TestDecompressGzipWithIncorrectData(t *testing.T) {
247
247
248
248
assert .Equal (t , http .StatusBadRequest , w .Code )
249
249
}
250
+
251
+ func TestDecompressOnly (t * testing.T ) {
252
+ buf := & bytes.Buffer {}
253
+ gz , _ := gzip .NewWriterLevel (buf , gzip .DefaultCompression )
254
+ if _ , err := gz .Write ([]byte (testResponse )); err != nil {
255
+ gz .Close ()
256
+ t .Fatal (err )
257
+ }
258
+ gz .Close ()
259
+
260
+ req , _ := http .NewRequestWithContext (context .Background (), "POST" , "/" , buf )
261
+ req .Header .Add ("Content-Encoding" , "gzip" )
262
+
263
+ router := gin .New ()
264
+ router .Use (Gzip (NoCompression , WithDecompressOnly (true ), WithDecompressFn (DefaultDecompressHandle )))
265
+ router .POST ("/" , func (c * gin.Context ) {
266
+ if v := c .Request .Header .Get ("Content-Encoding" ); v != "" {
267
+ t .Errorf ("unexpected `Content-Encoding`: %s header" , v )
268
+ }
269
+ if v := c .Request .Header .Get ("Content-Length" ); v != "" {
270
+ t .Errorf ("unexpected `Content-Length`: %s header" , v )
271
+ }
272
+ data , err := c .GetRawData ()
273
+ if err != nil {
274
+ t .Fatal (err )
275
+ }
276
+ c .Data (200 , "text/plain" , data )
277
+ })
278
+
279
+ w := httptest .NewRecorder ()
280
+ router .ServeHTTP (w , req )
281
+
282
+ assert .Equal (t , http .StatusOK , w .Code )
283
+ assert .Equal (t , "" , w .Header ().Get ("Content-Encoding" ))
284
+ assert .Equal (t , "" , w .Header ().Get ("Vary" ))
285
+ assert .Equal (t , testResponse , w .Body .String ())
286
+ assert .Equal (t , "" , w .Header ().Get ("Content-Length" ))
287
+ }
288
+
289
+ func TestGzipWithDecompressOnly (t * testing.T ) {
290
+ buf := & bytes.Buffer {}
291
+ gz , _ := gzip .NewWriterLevel (buf , gzip .DefaultCompression )
292
+ if _ , err := gz .Write ([]byte (testResponse )); err != nil {
293
+ gz .Close ()
294
+ t .Fatal (err )
295
+ }
296
+ gz .Close ()
297
+
298
+ req , _ := http .NewRequestWithContext (context .Background (), "POST" , "/" , buf )
299
+ req .Header .Add ("Content-Encoding" , "gzip" )
300
+ req .Header .Add ("Accept-Encoding" , "gzip" )
301
+
302
+ r := gin .New ()
303
+ r .Use (Gzip (NoCompression , WithDecompressOnly (true ), WithDecompressFn (DefaultDecompressHandle )))
304
+ r .POST ("/" , func (c * gin.Context ) {
305
+ assert .Equal (t , c .Request .Header .Get ("Content-Encoding" ), "" )
306
+ assert .Equal (t , c .Request .Header .Get ("Content-Length" ), "" )
307
+ body , err := c .GetRawData ()
308
+ if err != nil {
309
+ t .Fatal (err )
310
+ }
311
+ assert .Equal (t , testResponse , string (body ))
312
+ c .String (200 , testResponse )
313
+ })
314
+
315
+ w := httptest .NewRecorder ()
316
+ r .ServeHTTP (w , req )
317
+
318
+ assert .Equal (t , w .Code , 200 )
319
+ assert .Equal (t , w .Header ().Get ("Content-Encoding" ), "" )
320
+ assert .Equal (t , w .Body .String (), testResponse )
321
+ }
0 commit comments