Skip to content

Commit e7766d8

Browse files
authored
Merge pull request awslabs#17 from pirfalt/master
Add adapter for the `http.Handler` interface
2 parents 7ca1a33 + 6863c73 commit e7766d8

File tree

3 files changed

+94
-0
lines changed

3 files changed

+94
-0
lines changed

httpadapter/adapter.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package httpadapter
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/aws/aws-lambda-go/events"
7+
"github.com/awslabs/aws-lambda-go-api-proxy/core"
8+
)
9+
10+
type HandlerAdapter struct {
11+
core.RequestAccessor
12+
handler http.Handler
13+
}
14+
15+
func New(handler http.Handler) *HandlerAdapter {
16+
return &HandlerAdapter{
17+
handler: handler,
18+
}
19+
}
20+
21+
func (h *HandlerAdapter) Proxy(event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
22+
req, err := h.ProxyEventToHTTPRequest(event)
23+
if err != nil {
24+
return core.GatewayTimeout(), core.NewLoggedError("Could not convert proxy event to request: %v", err)
25+
}
26+
27+
w := core.NewProxyResponseWriter()
28+
h.handler.ServeHTTP(http.ResponseWriter(w), req)
29+
30+
resp, err := w.GetProxyResponse()
31+
if err != nil {
32+
return core.GatewayTimeout(), core.NewLoggedError("Error while generating proxy response: %v", err)
33+
}
34+
35+
return resp, nil
36+
}

httpadapter/adapter_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package httpadapter_test
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
8+
"github.com/aws/aws-lambda-go/events"
9+
"github.com/awslabs/aws-lambda-go-api-proxy/httpadapter"
10+
11+
. "github.com/onsi/ginkgo"
12+
. "github.com/onsi/gomega"
13+
)
14+
15+
type handler struct{}
16+
17+
func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
18+
w.Header().Add("unfortunately-required-header", "")
19+
fmt.Fprintf(w, "Go Lambda!!")
20+
}
21+
22+
var _ = Describe("HTTPAdapter tests", func() {
23+
Context("Simple ping request", func() {
24+
It("Proxies the event correctly", func() {
25+
log.Println("Starting test")
26+
27+
var httpHandler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
28+
w.Header().Add("unfortunately-required-header", "")
29+
fmt.Fprintf(w, "Go Lambda!!")
30+
})
31+
32+
adapter := httpadapter.New(httpHandler)
33+
34+
req := events.APIGatewayProxyRequest{
35+
Path: "/ping",
36+
HTTPMethod: "GET",
37+
}
38+
39+
resp, err := adapter.Proxy(req)
40+
41+
Expect(err).To(BeNil())
42+
Expect(resp.StatusCode).To(Equal(200))
43+
})
44+
})
45+
})

httpadapter/handlerfunc_suite_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package httpadapter_test
2+
3+
import (
4+
"testing"
5+
6+
. "github.com/onsi/ginkgo"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func TestHTTPAdapter(t *testing.T) {
11+
RegisterFailHandler(Fail)
12+
RunSpecs(t, "HttpAdapter Suite")
13+
}

0 commit comments

Comments
 (0)