@@ -2,6 +2,7 @@ import veb
22import net.http
33import os
44import time
5+ import compress.gzip
56
67const port = 13001
78
@@ -48,6 +49,16 @@ pub fn (app &App) after(mut ctx Context) veb.Result {
4849 return ctx.text ('from after, ${ctx.counter} ' )
4950}
5051
52+ @['/gzip' ]
53+ pub fn (app &App) gzip_test (mut ctx Context) veb.Result {
54+ return ctx.text ('gzip response, ${ctx.counter} ' )
55+ }
56+
57+ @['/decode_gzip' ; post]
58+ pub fn (app &App) decode_gzip_test (mut ctx Context) veb.Result {
59+ return ctx.text ('received: ${ctx.req.data} ' )
60+ }
61+
5162pub fn (app &App) app_middleware (mut ctx Context) bool {
5263 ctx.counter++
5364 return true
@@ -87,6 +98,10 @@ fn testsuite_begin() {
8798
8899 app.Middleware.route_use ('/after' , handler: after_middleware, after: true )
89100
101+ // Gzip middleware tests
102+ app.Middleware.use (veb.decode_gzip[Context]())
103+ app.Middleware.route_use ('/gzip' , veb.encode_gzip[Context]())
104+
90105 spawn veb.run_at[App, Context](mut app, port: port, timeout_in_seconds: 2 , family: .ip)
91106 // app startup time
92107 _ := < - app.started
@@ -126,4 +141,25 @@ fn test_after_middleware() {
126141 assert custom_header == '3'
127142}
128143
129- // TODO: add test for encode and decode gzip
144+ // Verifies that encode_gzip compresses responses
145+ fn test_encode_gzip_middleware () {
146+ x := http.get ('${localserver} /gzip' )!
147+
148+ encoding := x.header.get (.content_encoding) or { '' }
149+ assert encoding == 'gzip' , 'Expected gzip encoding, got: ${encoding} '
150+
151+ decompressed := gzip.decompress (x.body.bytes ())!
152+ assert decompressed.bytestr () == 'gzip response, 2'
153+ }
154+
155+ // Verifies that decode_gzip middleware decompresses request bodies
156+ fn test_decode_gzip_middleware () {
157+ original_text := 'Hello from gzip compressed body!'
158+ compressed := gzip.compress (original_text.bytes ())!
159+
160+ mut req := http.new_request (.post, '${localserver} /decode_gzip' , compressed.bytestr ())
161+ req.header.add (.content_encoding, 'gzip' )
162+ x := req.do ()!
163+
164+ assert x.body == 'received: ${original_text} '
165+ }
0 commit comments