github.com/wynshop-open-source/gomplate@v3.5.0+incompatible/data/datasource_awssmp_test.go (about) 1 package data 2 3 import ( 4 "encoding/json" 5 "net/url" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/ssm" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 // DummyParamGetter - test double 15 type DummyParamGetter struct { 16 t *testing.T 17 param *ssm.Parameter 18 err awserr.Error 19 mockGetParameter func(*ssm.GetParameterInput) (*ssm.GetParameterOutput, error) 20 } 21 22 func (d DummyParamGetter) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) { 23 if d.mockGetParameter != nil { 24 output, err := d.mockGetParameter(input) 25 return output, err 26 } 27 if d.err != nil { 28 return nil, d.err 29 } 30 assert.NotNil(d.t, d.param, "Must provide a param if no error!") 31 return &ssm.GetParameterOutput{ 32 Parameter: d.param, 33 }, nil 34 } 35 36 func simpleAWSSourceHelper(dummy awssmpGetter) *Source { 37 return &Source{ 38 Alias: "foo", 39 URL: &url.URL{ 40 Scheme: "aws+smp", 41 Path: "/foo", 42 }, 43 asmpg: dummy, 44 } 45 } 46 47 func TestAWSSMP_ParseArgsSimple(t *testing.T) { 48 paramPath, err := parseAWSSMPArgs("noddy") 49 assert.Equal(t, "noddy", paramPath) 50 assert.Nil(t, err) 51 } 52 53 func TestAWSSMP_ParseArgsAppend(t *testing.T) { 54 paramPath, err := parseAWSSMPArgs("base", "extra") 55 assert.Equal(t, "base/extra", paramPath) 56 assert.Nil(t, err) 57 } 58 59 func TestAWSSMP_ParseArgsAppend2(t *testing.T) { 60 paramPath, err := parseAWSSMPArgs("/foo/", "/extra") 61 assert.Equal(t, "/foo/extra", paramPath) 62 assert.Nil(t, err) 63 } 64 65 func TestAWSSMP_ParseArgsTooMany(t *testing.T) { 66 _, err := parseAWSSMPArgs("base", "extra", "too many!") 67 assert.Error(t, err) 68 } 69 70 func TestAWSSMP_GetParameterSetup(t *testing.T) { 71 calledOk := false 72 s := simpleAWSSourceHelper(DummyParamGetter{ 73 t: t, 74 mockGetParameter: func(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) { 75 assert.Equal(t, "/foo/bar", *input.Name) 76 assert.True(t, *input.WithDecryption) 77 calledOk = true 78 return &ssm.GetParameterOutput{ 79 Parameter: &ssm.Parameter{}, 80 }, nil 81 }, 82 }) 83 84 _, err := readAWSSMP(s, "/bar") 85 assert.True(t, calledOk) 86 assert.Nil(t, err) 87 } 88 89 func TestAWSSMP_GetParameterValidOutput(t *testing.T) { 90 expected := &ssm.Parameter{ 91 Name: aws.String("/foo"), 92 Type: aws.String("String"), 93 Value: aws.String("val"), 94 Version: aws.Int64(1), 95 } 96 s := simpleAWSSourceHelper(DummyParamGetter{ 97 t: t, 98 param: expected, 99 }) 100 101 output, err := readAWSSMP(s, "") 102 assert.Nil(t, err) 103 actual := &ssm.Parameter{} 104 err = json.Unmarshal(output, &actual) 105 assert.Nil(t, err) 106 assert.Equal(t, expected, actual) 107 assert.Equal(t, jsonMimetype, s.mediaType) 108 } 109 110 func TestAWSSMP_GetParameterMissing(t *testing.T) { 111 expectedErr := awserr.New("ParameterNotFound", "Test of error message", nil) 112 s := simpleAWSSourceHelper(DummyParamGetter{ 113 t: t, 114 err: expectedErr, 115 }) 116 117 _, err := readAWSSMP(s, "") 118 assert.Error(t, err, "Test of error message") 119 }