github.com/hairyhenderson/templater@v3.5.0+incompatible/data/datasource_aws_sm_test.go (about)

     1  package data
     2  
     3  import (
     4  	"net/url"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/aws/awserr"
     9  	"github.com/aws/aws-sdk-go/service/secretsmanager"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  // DummyAWSSecretsManagerSecretGetter - test double
    14  type DummyAWSSecretsManagerSecretGetter struct {
    15  	t                  *testing.T
    16  	secretValut        *secretsmanager.GetSecretValueOutput
    17  	err                awserr.Error
    18  	mockGetSecretValue func(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error)
    19  }
    20  
    21  func (d DummyAWSSecretsManagerSecretGetter) GetSecretValue(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error) {
    22  	if d.mockGetSecretValue != nil {
    23  		output, err := d.mockGetSecretValue(input)
    24  		return output, err
    25  	}
    26  	if d.err != nil {
    27  		return nil, d.err
    28  	}
    29  	assert.NotNil(d.t, d.secretValut, "Must provide a param if no error!")
    30  	return d.secretValut, nil
    31  }
    32  
    33  func simpleAWSSecretsManagerSourceHelper(dummyGetter awsSecretsManagerGetter) *Source {
    34  	return &Source{
    35  		Alias: "foo",
    36  		URL: &url.URL{
    37  			Scheme: "aws+sm",
    38  			Path:   "/foo",
    39  		},
    40  		awsSecretsManager: dummyGetter,
    41  	}
    42  }
    43  
    44  func TestAWSSecretsManager_ParseArgsSimple(t *testing.T) {
    45  	paramPath, err := parseAWSSecretsManagerArgs("noddy")
    46  	assert.Equal(t, "noddy", paramPath)
    47  	assert.Nil(t, err)
    48  }
    49  
    50  func TestAWSSecretsManager_ParseArgsAppend(t *testing.T) {
    51  	paramPath, err := parseAWSSecretsManagerArgs("base", "extra")
    52  	assert.Equal(t, "base/extra", paramPath)
    53  	assert.Nil(t, err)
    54  }
    55  
    56  func TestAWSSecretsManager_ParseArgsAppend2(t *testing.T) {
    57  	paramPath, err := parseAWSSecretsManagerArgs("/foo/", "/extra")
    58  	assert.Equal(t, "/foo/extra", paramPath)
    59  	assert.Nil(t, err)
    60  }
    61  
    62  func TestAWSSecretsManager_ParseArgsTooMany(t *testing.T) {
    63  	_, err := parseAWSSecretsManagerArgs("base", "extra", "too many!")
    64  	assert.Error(t, err)
    65  }
    66  
    67  func TestAWSSecretsManager_GetParameterSetup(t *testing.T) {
    68  	calledOk := false
    69  	s := simpleAWSSecretsManagerSourceHelper(DummyAWSSecretsManagerSecretGetter{
    70  		t: t,
    71  		mockGetSecretValue: func(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error) {
    72  			assert.Equal(t, "/foo/bar", *input.SecretId)
    73  			calledOk = true
    74  			return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("blub")}, nil
    75  		},
    76  	})
    77  
    78  	_, err := readAWSSecretsManager(s, "/bar")
    79  	assert.True(t, calledOk)
    80  	assert.Nil(t, err)
    81  }
    82  
    83  func TestAWSSecretsManager_GetParameterSetupWrongArgs(t *testing.T) {
    84  	calledOk := false
    85  	s := simpleAWSSecretsManagerSourceHelper(DummyAWSSecretsManagerSecretGetter{
    86  		t: t,
    87  		mockGetSecretValue: func(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error) {
    88  			assert.Equal(t, "/foo/bar", *input.SecretId)
    89  			calledOk = true
    90  			return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("blub")}, nil
    91  		},
    92  	})
    93  
    94  	_, err := readAWSSecretsManager(s, "/bar", "/foo", "/bla")
    95  	assert.False(t, calledOk)
    96  	assert.Error(t, err)
    97  }
    98  
    99  func TestAWSSecretsManager_GetParameterMissing(t *testing.T) {
   100  	expectedErr := awserr.New("ParameterNotFound", "Test of error message", nil)
   101  	s := simpleAWSSecretsManagerSourceHelper(DummyAWSSecretsManagerSecretGetter{
   102  		t:   t,
   103  		err: expectedErr,
   104  	})
   105  
   106  	_, err := readAWSSecretsManager(s, "")
   107  	assert.Error(t, err, "Test of error message")
   108  }
   109  
   110  func TestAWSSecretsManager_ReadSecret(t *testing.T) {
   111  	calledOk := false
   112  	s := simpleAWSSecretsManagerSourceHelper(DummyAWSSecretsManagerSecretGetter{
   113  		t: t,
   114  		mockGetSecretValue: func(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error) {
   115  			assert.Equal(t, "/foo/bar", *input.SecretId)
   116  			calledOk = true
   117  			return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("blub")}, nil
   118  		},
   119  	})
   120  
   121  	output, err := readAWSSecretsManagerParam(s, "/foo/bar")
   122  	assert.True(t, calledOk)
   123  	assert.NoError(t, err)
   124  	assert.Equal(t, []byte("blub"), output)
   125  }