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  }