Как мне протестировать оболочки обработчиков AWS Lambda в Go?

# #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 раз с ожидаемыми аргументами»