# #go #testing #aws-lambda
Вопрос:
Я создал некоторые функции, которые действуют как «промежуточное программное обеспечение» в лямбда-обработчике. Я хотел отделить логику того, что делает обработчик, от того, имеет ли вызывающий абонент разрешение на это.
У меня есть ситуация, когда вызывающему абоненту может потребоваться дополнительная аутентификация в зависимости от сделанного им запроса. У меня есть 2 «промежуточных ПО», которые выполняют это.
Первый определяет, требуется ли для запроса дополнительная аутентификация, и если да, то перенаправляет на второй. Если нет, выполняет обработчик.
Второй выполняет дополнительную аутентификацию.
промежуточное программное обеспечение.вперед
package middleware import ( "net/http" "github.com/aws/aws-lambda-go/events" ) type middleware func(context.Context, events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) func NeedsAdditionalAuth(next middleware) middleware { return func(ctx context.Context, proxyRequest events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { if proxyRequest.QueryStringParameters["status"] == "sensitive" { //An example. This is whatever the request has that would require additional auth. return AdditionalAuth(next)(ctx, proxyRequest) } return next(ctx, proxyRequest) } } func AdditionalAuth(next middleware) middleware { return func(ctx context.Context, proxyRequest events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { authenticated := doAdditionalAuth() if !authenticated { return events.APIGatewayProxyResponse{ StatusCode: http.StatusForbidden, }, nil } return next(ctx, proxyRequest) } }
главное.вперед
package main import ( "context" "middleware" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func Handler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { return events.APIGatewayProxyResponse{ StatusCode: 200, Body: "(☞゚ヮ゚)☞ Middleware approved Hello World!", }, nil } func main() { lambda.Start( middleware.NeedsAdditionalAuth( Handler, ), ) }
And now for my question: How would I test the individual functionality of these «middleware» functions?
В частности, если я отправил запрос, который соответствовал требованиям для дополнительной аутентификации:
proxyRequest := amp;events.APIGatewayProxyRequest{ QueryStringParameters: map[string]string{ "status": "sensitive", }, }
Как мне написать тест, подтверждающий: «промежуточное программное обеспечение.AdditionalAuth() был вызван 1 раз с ожидаемыми аргументами»