@@ -2,23 +2,21 @@ package fiberadapter_test
22
33import (
44 "context"
5- "log"
65
76 "github.com/aws/aws-lambda-go/events"
8- fiberadaptor "github.com/awslabs/aws-lambda-go-api-proxy/fiber"
97 "github.com/gofiber/fiber/v2"
108
9+ fiberadaptor "github.com/awslabs/aws-lambda-go-api-proxy/fiber"
10+
1111 . "github.com/onsi/ginkgo"
1212 . "github.com/onsi/gomega"
1313)
1414
1515var _ = Describe ("FiberLambda tests" , func () {
1616 Context ("Simple ping request" , func () {
1717 It ("Proxies the event correctly" , func () {
18- log .Println ("Starting test" )
1918 app := fiber .New ()
2019 app .Get ("/ping" , func (c * fiber.Ctx ) error {
21- log .Println ("Handler!!" )
2220 return c .SendString ("pong" )
2321 })
2422
@@ -40,4 +38,252 @@ var _ = Describe("FiberLambda tests", func() {
4038 Expect (resp .StatusCode ).To (Equal (200 ))
4139 })
4240 })
41+
42+ Context ("Request header" , func () {
43+ It ("Check pass canonical header to fiber" , func () {
44+ app := fiber .New ()
45+ app .Post ("/canonical_header" , func (c * fiber.Ctx ) error {
46+ Expect (c .Get (fiber .HeaderHost )).To (Equal ("localhost" ))
47+ Expect (c .Get (fiber .HeaderContentType )).To (Equal (fiber .MIMEApplicationJSONCharsetUTF8 ))
48+ Expect (c .Get (fiber .HeaderUserAgent )).To (Equal ("fiber" ))
49+
50+ Expect (c .Cookies ("a" )).To (Equal ("b" ))
51+ Expect (c .Cookies ("b" )).To (Equal ("c" ))
52+ Expect (c .Cookies ("c" )).To (Equal ("d" ))
53+
54+ Expect (c .Get (fiber .HeaderContentLength )).To (Equal ("77" ))
55+ Expect (c .Get (fiber .HeaderConnection )).To (Equal ("Keep-Alive" ))
56+ Expect (c .Get (fiber .HeaderKeepAlive )).To (Equal ("timeout=5, max=1000" ))
57+ Expect (c .Get (fiber .HeaderTransferEncoding )).To (Equal ("gzip" ))
58+
59+ return c .Status (fiber .StatusNoContent ).Send (nil )
60+ })
61+
62+ adapter := fiberadaptor .New (app )
63+
64+ req := events.APIGatewayProxyRequest {
65+ Path : "/canonical_header" ,
66+ HTTPMethod : "POST" ,
67+ MultiValueHeaders : map [string ][]string {
68+ fiber .HeaderHost : {"localhost" },
69+ fiber .HeaderContentType : {fiber .MIMEApplicationJSONCharsetUTF8 },
70+ fiber .HeaderUserAgent : {"fiber" },
71+
72+ "cookie" : {"a=b" , "b=c;c=d" },
73+
74+ fiber .HeaderContentLength : {"77" },
75+ fiber .HeaderConnection : {"Keep-Alive" },
76+ fiber .HeaderKeepAlive : {"timeout=5, max=1000" },
77+ fiber .HeaderTransferEncoding : {"gzip" },
78+ },
79+ }
80+
81+ resp , err := adapter .ProxyWithContext (context .Background (), req )
82+
83+ Expect (err ).To (BeNil ())
84+ Expect (resp .StatusCode ).To (Equal (fiber .StatusNoContent ))
85+ Expect (resp .Body ).To (Equal ("" ))
86+ })
87+
88+ It ("Check pass non canonical header to fiber" , func () {
89+ app := fiber .New ()
90+ app .Post ("/header" , func (c * fiber.Ctx ) error {
91+ Expect (c .Get (fiber .HeaderReferer )).To (Equal ("https://github.com/gofiber/fiber" ))
92+ Expect (c .Get (fiber .HeaderAuthorization )).To (Equal ("Bearer drink_beer_not_coffee" ))
93+
94+ c .Context ().Request .Header .VisitAll (func (key , value []byte ) {
95+ if string (key ) == "K1" {
96+ Expect (Expect (c .Get ("K1" )).To (Or (Equal ("v1" ), Equal ("v2" ))))
97+ }
98+ })
99+
100+ return c .Status (fiber .StatusNoContent ).Send (nil )
101+ })
102+
103+ adapter := fiberadaptor .New (app )
104+
105+ req := events.APIGatewayProxyRequest {
106+ Path : "/header" ,
107+ HTTPMethod : "POST" ,
108+ MultiValueHeaders : map [string ][]string {
109+ fiber .HeaderReferer : {"https://github.com/gofiber/fiber" },
110+ fiber .HeaderAuthorization : {"Bearer drink_beer_not_coffee" },
111+
112+ "k1" : {"v1" , "v2" },
113+ },
114+ }
115+
116+ resp , err := adapter .ProxyWithContext (context .Background (), req )
117+
118+ Expect (err ).To (BeNil ())
119+ Expect (resp .StatusCode ).To (Equal (fiber .StatusNoContent ))
120+ Expect (resp .Body ).To (Equal ("" ))
121+ })
122+ })
123+
124+ Context ("Response header" , func () {
125+ It ("Check pass canonical header to fiber" , func () {
126+ app := fiber .New ()
127+ app .Post ("/canonical_header" , func (c * fiber.Ctx ) error {
128+ c .Set (fiber .HeaderContentType , fiber .MIMEApplicationJSONCharsetUTF8 )
129+ c .Set (fiber .HeaderServer , "localhost" )
130+
131+ c .Cookie (& fiber.Cookie {
132+ Name : "a" ,
133+ Value : "b" ,
134+ HTTPOnly : true ,
135+ })
136+ c .Cookie (& fiber.Cookie {
137+ Name : "b" ,
138+ Value : "c" ,
139+ HTTPOnly : true ,
140+ })
141+ c .Cookie (& fiber.Cookie {
142+ Name : "c" ,
143+ Value : "d" ,
144+ HTTPOnly : true ,
145+ })
146+
147+ c .Set (fiber .HeaderContentLength , "77" )
148+ c .Set (fiber .HeaderConnection , "keep-alive" )
149+
150+ return c .Status (fiber .StatusNoContent ).Send (nil )
151+ })
152+
153+ adapter := fiberadaptor .New (app )
154+
155+ req := events.APIGatewayProxyRequest {
156+ Path : "/canonical_header" ,
157+ HTTPMethod : "POST" ,
158+ }
159+
160+ resp , err := adapter .ProxyWithContext (context .Background (), req )
161+
162+ Expect (err ).To (BeNil ())
163+ Expect (resp .StatusCode ).To (Equal (fiber .StatusNoContent ))
164+ // NOTI: core.NewProxyResponseWriter().GetProxyResponse() => Doesn't use `resp.Header`
165+ Expect (resp .MultiValueHeaders [fiber .HeaderContentType ]).To (Equal ([]string {fiber .MIMEApplicationJSONCharsetUTF8 }))
166+ Expect (resp .MultiValueHeaders [fiber .HeaderServer ]).To (Equal ([]string {"localhost" }))
167+ Expect (resp .MultiValueHeaders [fiber .HeaderSetCookie ]).To (Equal ([]string {"a=b; path=/; HttpOnly; SameSite=Lax" , "b=c; path=/; HttpOnly; SameSite=Lax" , "c=d; path=/; HttpOnly; SameSite=Lax" }))
168+ Expect (resp .MultiValueHeaders [fiber .HeaderContentLength ]).To (Equal ([]string {"77" }))
169+ Expect (resp .MultiValueHeaders [fiber .HeaderConnection ]).To (Equal ([]string {"keep-alive" }))
170+ Expect (resp .Body ).To (Equal ("" ))
171+ })
172+ It ("Check pass non canonical header to fiber" , func () {
173+ app := fiber .New ()
174+ app .Post ("/header" , func (c * fiber.Ctx ) error {
175+ c .Links ("http://api.example.com/users?page=2" , "next" , "http://api.example.com/users?page=5" , "last" )
176+ return c .Redirect ("https://github.com/gofiber/fiber" )
177+ })
178+
179+ adapter := fiberadaptor .New (app )
180+
181+ req := events.APIGatewayProxyRequest {
182+ Path : "/header" ,
183+ HTTPMethod : "POST" ,
184+ }
185+
186+ resp , err := adapter .ProxyWithContext (context .Background (), req )
187+
188+ Expect (err ).To (BeNil ())
189+ Expect (resp .StatusCode ).To (Equal (fiber .StatusFound ))
190+ Expect (resp .MultiValueHeaders [fiber .HeaderLocation ]).To (Equal ([]string {"https://github.com/gofiber/fiber" }))
191+ Expect (resp .MultiValueHeaders [fiber .HeaderLink ]).To (Equal ([]string {"<http://api.example.com/users?page=2>; rel=\" next\" ,<http://api.example.com/users?page=5>; rel=\" last\" " }))
192+ Expect (resp .Body ).To (Equal ("" ))
193+ })
194+ })
195+
196+ Context ("Next method" , func () {
197+ It ("Check missing values in request header" , func () {
198+ app := fiber .New ()
199+ app .Post ("/next" , func (c * fiber.Ctx ) error {
200+ c .Next ()
201+ Expect (c .Get (fiber .HeaderHost )).To (Equal ("localhost" ))
202+ Expect (c .Get (fiber .HeaderContentType )).To (Equal (fiber .MIMEApplicationJSONCharsetUTF8 ))
203+ Expect (c .Get (fiber .HeaderUserAgent )).To (Equal ("fiber" ))
204+
205+ Expect (c .Cookies ("a" )).To (Equal ("b" ))
206+ Expect (c .Cookies ("b" )).To (Equal ("c" ))
207+ Expect (c .Cookies ("c" )).To (Equal ("d" ))
208+
209+ Expect (c .Get (fiber .HeaderContentLength )).To (Equal ("77" ))
210+ Expect (c .Get (fiber .HeaderConnection )).To (Equal ("Keep-Alive" ))
211+ Expect (c .Get (fiber .HeaderKeepAlive )).To (Equal ("timeout=5, max=1000" ))
212+ Expect (c .Get (fiber .HeaderTransferEncoding )).To (Equal ("gzip" ))
213+
214+ return c .Status (fiber .StatusNoContent ).Send (nil )
215+ })
216+ adapter := fiberadaptor .New (app )
217+
218+ req := events.APIGatewayProxyRequest {
219+ Path : "/next" ,
220+ HTTPMethod : "POST" ,
221+ MultiValueHeaders : map [string ][]string {
222+ fiber .HeaderHost : {"localhost" },
223+ fiber .HeaderContentType : {fiber .MIMEApplicationJSONCharsetUTF8 },
224+ fiber .HeaderUserAgent : {"fiber" },
225+
226+ "cookie" : {"a=b" , "b=c;c=d" },
227+
228+ fiber .HeaderContentLength : {"77" },
229+ fiber .HeaderConnection : {"Keep-Alive" },
230+ fiber .HeaderKeepAlive : {"timeout=5, max=1000" },
231+ fiber .HeaderTransferEncoding : {"gzip" },
232+ },
233+ }
234+
235+ resp , err := adapter .ProxyWithContext (context .Background (), req )
236+
237+ Expect (err ).To (BeNil ())
238+ Expect (resp .StatusCode ).To (Equal (fiber .StatusNoContent ))
239+ Expect (resp .Body ).To (Equal ("" ))
240+ })
241+
242+ It ("Check missing values in response header" , func () {
243+ app := fiber .New ()
244+ app .Post ("/next" , func (c * fiber.Ctx ) error {
245+ c .Set (fiber .HeaderContentType , fiber .MIMEApplicationJSONCharsetUTF8 )
246+ c .Set (fiber .HeaderServer , "localhost" )
247+
248+ c .Cookie (& fiber.Cookie {
249+ Name : "a" ,
250+ Value : "b" ,
251+ HTTPOnly : true ,
252+ })
253+ c .Cookie (& fiber.Cookie {
254+ Name : "b" ,
255+ Value : "c" ,
256+ HTTPOnly : true ,
257+ })
258+ c .Cookie (& fiber.Cookie {
259+ Name : "c" ,
260+ Value : "d" ,
261+ HTTPOnly : true ,
262+ })
263+
264+ c .Set (fiber .HeaderContentLength , "77" )
265+ c .Set (fiber .HeaderConnection , "keep-alive" )
266+
267+ c .Next ()
268+ return c .Status (fiber .StatusNoContent ).Send (nil )
269+ })
270+ adapter := fiberadaptor .New (app )
271+
272+ req := events.APIGatewayProxyRequest {
273+ Path : "/next" ,
274+ HTTPMethod : "POST" ,
275+ }
276+
277+ resp , err := adapter .ProxyWithContext (context .Background (), req )
278+
279+ Expect (err ).To (BeNil ())
280+ Expect (resp .StatusCode ).To (Equal (fiber .StatusNoContent ))
281+ Expect (resp .MultiValueHeaders [fiber .HeaderContentType ]).To (Equal ([]string {fiber .MIMEApplicationJSONCharsetUTF8 }))
282+ Expect (resp .MultiValueHeaders [fiber .HeaderServer ]).To (Equal ([]string {"localhost" }))
283+ Expect (resp .MultiValueHeaders [fiber .HeaderSetCookie ]).To (Equal ([]string {"a=b; path=/; HttpOnly; SameSite=Lax" , "b=c; path=/; HttpOnly; SameSite=Lax" , "c=d; path=/; HttpOnly; SameSite=Lax" }))
284+ Expect (resp .MultiValueHeaders [fiber .HeaderContentLength ]).To (Equal ([]string {"77" }))
285+ Expect (resp .MultiValueHeaders [fiber .HeaderConnection ]).To (Equal ([]string {"keep-alive" }))
286+ Expect (resp .Body ).To (Equal ("" ))
287+ })
288+ })
43289})
0 commit comments