11package core_test
22
33import (
4+ "context"
45 "encoding/base64"
56 "io/ioutil"
67 "math/rand"
78 "os"
89
910 "github.com/aws/aws-lambda-go/events"
11+ "github.com/aws/aws-lambda-go/lambdacontext"
1012 "github.com/awslabs/aws-lambda-go-api-proxy/core"
1113
1214 . "github.com/onsi/ginkgo"
@@ -18,14 +20,15 @@ var _ = Describe("RequestAccessor tests", func() {
1820 accessor := core.RequestAccessor {}
1921 basicRequest := getProxyRequest ("/hello" , "GET" )
2022 It ("Correctly converts a basic event" , func () {
21- httpReq , err := accessor .ProxyEventToHTTPRequest ( basicRequest )
23+ httpReq , err := accessor .EventToRequestWithContext ( context . Background (), basicRequest )
2224 Expect (err ).To (BeNil ())
2325 Expect ("/hello" ).To (Equal (httpReq .URL .Path ))
2426 Expect ("GET" ).To (Equal (httpReq .Method ))
2527 })
2628
2729 basicRequest = getProxyRequest ("/hello" , "get" )
2830 It ("Converts method to uppercase" , func () {
31+ // calling old method to verify reverse compatibility
2932 httpReq , err := accessor .ProxyEventToHTTPRequest (basicRequest )
3033 Expect (err ).To (BeNil ())
3134 Expect ("/hello" ).To (Equal (httpReq .URL .Path ))
@@ -45,7 +48,7 @@ var _ = Describe("RequestAccessor tests", func() {
4548 binaryRequest .IsBase64Encoded = true
4649
4750 It ("Decodes a base64 encoded body" , func () {
48- httpReq , err := accessor .ProxyEventToHTTPRequest ( binaryRequest )
51+ httpReq , err := accessor .EventToRequestWithContext ( context . Background (), binaryRequest )
4952 Expect (err ).To (BeNil ())
5053 Expect ("/hello" ).To (Equal (httpReq .URL .Path ))
5154 Expect ("POST" ).To (Equal (httpReq .Method ))
@@ -63,7 +66,7 @@ var _ = Describe("RequestAccessor tests", func() {
6366 "world" : {"2" , "3" },
6467 }
6568 It ("Populates query string correctly" , func () {
66- httpReq , err := accessor .ProxyEventToHTTPRequest ( qsRequest )
69+ httpReq , err := accessor .EventToRequestWithContext ( context . Background (), qsRequest )
6770 Expect (err ).To (BeNil ())
6871 Expect ("/hello" ).To (Equal (httpReq .URL .Path ))
6972 Expect ("GET" ).To (Equal (httpReq .Method ))
@@ -83,7 +86,8 @@ var _ = Describe("RequestAccessor tests", func() {
8386
8487 It ("Stips the base path correct" , func () {
8588 accessor .StripBasePath ("app1" )
86- httpReq , err := accessor .ProxyEventToHTTPRequest (basePathRequest )
89+ httpReq , err := accessor .EventToRequestWithContext (context .Background (), basePathRequest )
90+
8791 Expect (err ).To (BeNil ())
8892 Expect ("/orders" ).To (Equal (httpReq .URL .Path ))
8993 })
@@ -92,6 +96,7 @@ var _ = Describe("RequestAccessor tests", func() {
9296 contextRequest .RequestContext = getRequestContext ()
9397
9498 It ("Populates context header correctly" , func () {
99+ // calling old method to verify reverse compatibility
95100 httpReq , err := accessor .ProxyEventToHTTPRequest (contextRequest )
96101 Expect (err ).To (BeNil ())
97102 Expect (2 ).To (Equal (len (httpReq .Header )))
@@ -123,16 +128,49 @@ var _ = Describe("RequestAccessor tests", func() {
123128 contextRequest .RequestContext = getRequestContext ()
124129
125130 accessor := core.RequestAccessor {}
131+ // calling old method to verify reverse compatibility
126132 httpReq , err := accessor .ProxyEventToHTTPRequest (contextRequest )
127133 Expect (err ).To (BeNil ())
128134
129- context , err := accessor .GetAPIGatewayContext (httpReq )
135+ headerContext , err := accessor .GetAPIGatewayContext (httpReq )
136+ Expect (err ).To (BeNil ())
137+ Expect (headerContext ).ToNot (BeNil ())
138+ Expect ("x" ).To (Equal (headerContext .AccountID ))
139+ Expect ("x" ).To (Equal (headerContext .RequestID ))
140+ Expect ("x" ).To (Equal (headerContext .APIID ))
141+ proxyContext , ok := core .GetAPIGatewayContextFromContext (httpReq .Context ())
142+ // should fail because using header proxy method
143+ Expect (ok ).To (BeFalse ())
144+
145+ httpReq , err = accessor .EventToRequestWithContext (context .Background (), contextRequest )
130146 Expect (err ).To (BeNil ())
131- Expect (context ).ToNot (BeNil ())
132- Expect ("x" ).To (Equal (context .AccountID ))
133- Expect ("x" ).To (Equal (context .RequestID ))
134- Expect ("x" ).To (Equal (context .APIID ))
135- Expect ("prod" ).To (Equal (context .Stage ))
147+ proxyContext , ok = core .GetAPIGatewayContextFromContext (httpReq .Context ())
148+ Expect (ok ).To (BeTrue ())
149+ Expect ("x" ).To (Equal (proxyContext .APIID ))
150+ Expect ("x" ).To (Equal (proxyContext .RequestID ))
151+ Expect ("x" ).To (Equal (proxyContext .APIID ))
152+ Expect ("prod" ).To (Equal (proxyContext .Stage ))
153+ runtimeContext , ok := core .GetRuntimeContextFromContext (httpReq .Context ())
154+ Expect (ok ).To (BeTrue ())
155+ Expect (runtimeContext ).To (BeNil ())
156+
157+ lambdaContext := lambdacontext .NewContext (context .Background (), & lambdacontext.LambdaContext {AwsRequestID : "abc123" })
158+ httpReq , err = accessor .EventToRequestWithContext (lambdaContext , contextRequest )
159+ Expect (err ).To (BeNil ())
160+
161+ headerContext , err = accessor .GetAPIGatewayContext (httpReq )
162+ // should fail as new context method doesn't populate headers
163+ Expect (err ).ToNot (BeNil ())
164+ proxyContext , ok = core .GetAPIGatewayContextFromContext (httpReq .Context ())
165+ Expect (ok ).To (BeTrue ())
166+ Expect ("x" ).To (Equal (proxyContext .APIID ))
167+ Expect ("x" ).To (Equal (proxyContext .RequestID ))
168+ Expect ("x" ).To (Equal (proxyContext .APIID ))
169+ Expect ("prod" ).To (Equal (proxyContext .Stage ))
170+ runtimeContext , ok = core .GetRuntimeContextFromContext (httpReq .Context ())
171+ Expect (ok ).To (BeTrue ())
172+ Expect (runtimeContext ).ToNot (BeNil ())
173+ Expect ("abc123" ).To (Equal (runtimeContext .AwsRequestID ))
136174 })
137175
138176 It ("Populates stage variables correctly" , func () {
@@ -150,9 +188,29 @@ var _ = Describe("RequestAccessor tests", func() {
150188 Expect (stageVars ["var2" ]).ToNot (BeNil ())
151189 Expect ("value1" ).To (Equal (stageVars ["var1" ]))
152190 Expect ("value2" ).To (Equal (stageVars ["var2" ]))
191+
192+ stageVars , ok := core .GetStageVarsFromContext (httpReq .Context ())
193+ // not present in context
194+ Expect (ok ).To (BeFalse ())
195+
196+ httpReq , err = accessor .EventToRequestWithContext (context .Background (), varsRequest )
197+ Expect (err ).To (BeNil ())
198+
199+ stageVars , err = accessor .GetAPIGatewayStageVars (httpReq )
200+ // should not be in headers
201+ Expect (err ).ToNot (BeNil ())
202+
203+ stageVars , ok = core .GetStageVarsFromContext (httpReq .Context ())
204+ Expect (ok ).To (BeTrue ())
205+ Expect (2 ).To (Equal (len (stageVars )))
206+ Expect (stageVars ["var1" ]).ToNot (BeNil ())
207+ Expect (stageVars ["var2" ]).ToNot (BeNil ())
208+ Expect ("value1" ).To (Equal (stageVars ["var1" ]))
209+ Expect ("value2" ).To (Equal (stageVars ["var2" ]))
153210 })
154211
155212 It ("Populates the default hostname correctly" , func () {
213+
156214 basicRequest := getProxyRequest ("orders" , "GET" )
157215 accessor := core.RequestAccessor {}
158216 httpReq , err := accessor .ProxyEventToHTTPRequest (basicRequest )
@@ -167,7 +225,7 @@ var _ = Describe("RequestAccessor tests", func() {
167225 os .Setenv (core .CustomHostVariable , myCustomHost )
168226 basicRequest := getProxyRequest ("orders" , "GET" )
169227 accessor := core.RequestAccessor {}
170- httpReq , err := accessor .ProxyEventToHTTPRequest ( basicRequest )
228+ httpReq , err := accessor .EventToRequestWithContext ( context . Background (), basicRequest )
171229 Expect (err ).To (BeNil ())
172230
173231 Expect (myCustomHost ).To (Equal ("http://" + httpReq .Host ))
@@ -180,7 +238,7 @@ var _ = Describe("RequestAccessor tests", func() {
180238 os .Setenv (core .CustomHostVariable , myCustomHost + "/" )
181239 basicRequest := getProxyRequest ("orders" , "GET" )
182240 accessor := core.RequestAccessor {}
183- httpReq , err := accessor .ProxyEventToHTTPRequest ( basicRequest )
241+ httpReq , err := accessor .EventToRequestWithContext ( context . Background (), basicRequest )
184242 Expect (err ).To (BeNil ())
185243
186244 Expect (myCustomHost ).To (Equal ("http://" + httpReq .Host ))
0 commit comments