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 }