github.com/terraform-modules-krish/terratest@v0.29.0/modules/aws/lambda.go (about)

     1  package aws
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  
     7  	"github.com/aws/aws-sdk-go/service/lambda"
     8  	"github.com/terraform-modules-krish/terratest/modules/testing"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // InvokeFunction invokes a lambda function.
    13  func InvokeFunction(t testing.TestingT, region, functionName string, payload interface{}) []byte {
    14  	out, err := InvokeFunctionE(t, region, functionName, payload)
    15  	require.NoError(t, err)
    16  	return out
    17  }
    18  
    19  // InvokeFunctionE invokes a lambda function.
    20  func InvokeFunctionE(t testing.TestingT, region, functionName string, payload interface{}) ([]byte, error) {
    21  	lambdaClient, err := NewLambdaClientE(t, region)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  
    26  	invokeInput := &lambda.InvokeInput{
    27  		FunctionName: &functionName,
    28  	}
    29  
    30  	if payload != nil {
    31  		payloadJson, err := json.Marshal(payload)
    32  
    33  		if err != nil {
    34  			return nil, err
    35  		}
    36  		invokeInput.Payload = payloadJson
    37  	}
    38  
    39  	out, err := lambdaClient.Invoke(invokeInput)
    40  	require.NoError(t, err)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  
    45  	if out.FunctionError != nil {
    46  		return out.Payload, &FunctionError{Message: *out.FunctionError, StatusCode: *out.StatusCode, Payload: out.Payload}
    47  	}
    48  
    49  	return out.Payload, nil
    50  }
    51  
    52  type FunctionError struct {
    53  	Message    string
    54  	StatusCode int64
    55  	Payload    []byte
    56  }
    57  
    58  func (err *FunctionError) Error() string {
    59  	return fmt.Sprintf("%s error invoking lambda function: %v", err.Message, err.Payload)
    60  }
    61  
    62  // NewLambdaClient creates a new Lambda client.
    63  func NewLambdaClient(t testing.TestingT, region string) *lambda.Lambda {
    64  	client, err := NewLambdaClientE(t, region)
    65  	require.NoError(t, err)
    66  	return client
    67  }
    68  
    69  // NewLambdaClientE creates a new Lambda client.
    70  func NewLambdaClientE(t testing.TestingT, region string) (*lambda.Lambda, error) {
    71  	sess, err := NewAuthenticatedSession(region)
    72  	if err != nil {
    73  		return nil, err
    74  	}
    75  
    76  	return lambda.New(sess), nil
    77  }