@@ -88,6 +88,123 @@ func TestGzip(t *testing.T) {
88
88
assert .Equal (t , "test" , buf .String ())
89
89
}
90
90
91
+ func TestGzipWithMinLength (t * testing.T ) {
92
+ assert := assert .New (t )
93
+
94
+ e := echo .New ()
95
+ // Minimal response length
96
+ e .Use (GzipWithConfig (GzipConfig {MinLength : 10 }))
97
+ e .GET ("/" , func (c echo.Context ) error {
98
+ c .Response ().Write ([]byte ("foobarfoobar" ))
99
+ return nil
100
+ })
101
+
102
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
103
+ req .Header .Set (echo .HeaderAcceptEncoding , gzipScheme )
104
+ rec := httptest .NewRecorder ()
105
+ e .ServeHTTP (rec , req )
106
+ assert .Equal (gzipScheme , rec .Header ().Get (echo .HeaderContentEncoding ))
107
+ r , err := gzip .NewReader (rec .Body )
108
+ if assert .NoError (err ) {
109
+ buf := new (bytes.Buffer )
110
+ defer r .Close ()
111
+ buf .ReadFrom (r )
112
+ assert .Equal ("foobarfoobar" , buf .String ())
113
+ }
114
+ }
115
+
116
+ func TestGzipWithMinLengthTooShort (t * testing.T ) {
117
+ assert := assert .New (t )
118
+
119
+ e := echo .New ()
120
+ // Minimal response length
121
+ e .Use (GzipWithConfig (GzipConfig {MinLength : 10 }))
122
+ e .GET ("/" , func (c echo.Context ) error {
123
+ c .Response ().Write ([]byte ("test" ))
124
+ return nil
125
+ })
126
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
127
+ req .Header .Set (echo .HeaderAcceptEncoding , gzipScheme )
128
+ rec := httptest .NewRecorder ()
129
+ e .ServeHTTP (rec , req )
130
+ assert .Equal ("" , rec .Header ().Get (echo .HeaderContentEncoding ))
131
+ assert .Contains (rec .Body .String (), "test" )
132
+ }
133
+
134
+ func TestGzipWithMinLengthChunked (t * testing.T ) {
135
+ assert := assert .New (t )
136
+
137
+ e := echo .New ()
138
+
139
+ // Gzip chunked
140
+ chunkBuf := make ([]byte , 5 )
141
+
142
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
143
+ req .Header .Set (echo .HeaderAcceptEncoding , gzipScheme )
144
+ rec := httptest .NewRecorder ()
145
+
146
+ var r * gzip.Reader = nil
147
+
148
+ c := e .NewContext (req , rec )
149
+ GzipWithConfig (GzipConfig {MinLength : 10 })(func (c echo.Context ) error {
150
+ c .Response ().Header ().Set ("Content-Type" , "text/event-stream" )
151
+ c .Response ().Header ().Set ("Transfer-Encoding" , "chunked" )
152
+
153
+ // Write and flush the first part of the data
154
+ c .Response ().Write ([]byte ("test\n " ))
155
+ c .Response ().Flush ()
156
+
157
+ // Read the first part of the data
158
+ assert .True (rec .Flushed )
159
+ assert .Equal (gzipScheme , rec .Header ().Get (echo .HeaderContentEncoding ))
160
+
161
+ var err error
162
+ r , err = gzip .NewReader (rec .Body )
163
+ assert .NoError (err )
164
+
165
+ _ , err = io .ReadFull (r , chunkBuf )
166
+ assert .NoError (err )
167
+ assert .Equal ("test\n " , string (chunkBuf ))
168
+
169
+ // Write and flush the second part of the data
170
+ c .Response ().Write ([]byte ("test\n " ))
171
+ c .Response ().Flush ()
172
+
173
+ _ , err = io .ReadFull (r , chunkBuf )
174
+ assert .NoError (err )
175
+ assert .Equal ("test\n " , string (chunkBuf ))
176
+
177
+ // Write the final part of the data and return
178
+ c .Response ().Write ([]byte ("test" ))
179
+ return nil
180
+ })(c )
181
+
182
+ assert .NotNil (r )
183
+
184
+ buf := new (bytes.Buffer )
185
+
186
+ buf .ReadFrom (r )
187
+ assert .Equal ("test" , buf .String ())
188
+
189
+ r .Close ()
190
+ }
191
+
192
+ func TestGzipWithMinLengthNoContent (t * testing.T ) {
193
+ e := echo .New ()
194
+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
195
+ req .Header .Set (echo .HeaderAcceptEncoding , gzipScheme )
196
+ rec := httptest .NewRecorder ()
197
+ c := e .NewContext (req , rec )
198
+ h := GzipWithConfig (GzipConfig {MinLength : 10 })(func (c echo.Context ) error {
199
+ return c .NoContent (http .StatusNoContent )
200
+ })
201
+ if assert .NoError (t , h (c )) {
202
+ assert .Empty (t , rec .Header ().Get (echo .HeaderContentEncoding ))
203
+ assert .Empty (t , rec .Header ().Get (echo .HeaderContentType ))
204
+ assert .Equal (t , 0 , len (rec .Body .Bytes ()))
205
+ }
206
+ }
207
+
91
208
func TestGzipNoContent (t * testing.T ) {
92
209
e := echo .New ()
93
210
req := httptest .NewRequest (http .MethodGet , "/" , nil )
0 commit comments