I am writing a unit test for a function that uses the AWS SDK for Go to get a secret from the AWS Secrets Manager:
main.go
//Helper function to get secret from AWS Secret Manager
func getAWSSecrets(svc secretsmanageriface.SecretsManagerAPI) (secretMap map[string]string, err error) {
//Get secret config values
req, resp := svc.GetSecretValueRequest(&secretsmanager.GetSecretValueInput{
SecretId: aws.String("my/secret/string"),
})
err = req.Send()
if err != nil {
return nil, err
}
...
}
In order to test this, I need to create a mock AWS Secret Manager Client. I've set up the basic skeleton of how that will work:
main_test.go
type MockSecretsManagerClient struct {
secretsmanageriface.SecretsManagerAPI
}
func (m *MockSecretsManagerClient) GetSecretValueRequest(input *secretsmanager.GetSecretValueInput) (req *request.Request, resp *secretsmanager.GetSecretValueOutput){
// Confused on how to mock out the returned `req`
}
// tests getAWSSecrets
func (suite *ServerTestSuite) TestGetAWSSecrets() {
//Setup test
mockSvc := &MockSecretsManagerClient{}
req, resp := getAWSSecrets(mockSvc)
}
I'm running into trouble trying to mock the returned request from GetSecretValueRequest
. Furthermore, once I mock this request, I'm not sure how to handle mocking req.Send()
. Is there a simple way to do this? Or are there any good examples of someone doing this?