11package paramstore_test
22
33import (
4+ "context"
5+ "errors"
6+ "strconv"
47 "testing"
58
6- "github.com/aws/aws-sdk-go/service/ssm"
7- "github.com/aws/aws-sdk-go/service/ssm/ssmiface"
9+ "github.com/aws/aws-sdk-go-v2/aws"
10+ "github.com/aws/aws-sdk-go-v2/service/ssm"
11+ "github.com/aws/aws-sdk-go-v2/service/ssm/types"
812 "github.com/cultureamp/parameter-store-exec/paramstore"
913 "github.com/stretchr/testify/assert"
1014 "github.com/stretchr/testify/require"
@@ -14,7 +18,7 @@ func TestGetParametersByPath(t *testing.T) {
1418 svc := paramstore.Service {Client : FakeClient {
1519 T : t ,
1620 Path : "/foo/bar" ,
17- Pages : [][]* ssm .Parameter {
21+ Pages : [][]types .Parameter {
1822 {
1923 param ("/foo/bar/one" , "first" ),
2024 param ("/foo/bar/two" , "second" ),
@@ -24,7 +28,7 @@ func TestGetParametersByPath(t *testing.T) {
2428 },
2529 },
2630 }}
27- params , err := svc .GetParametersByPath ("/foo/bar" )
31+ params , err := svc .GetParametersByPath (context . Background (), "/foo/bar" )
2832 require .NoError (t , err )
2933 assert .Equal (t , map [string ]string {
3034 "/foo/bar/one" : "first" ,
@@ -33,22 +37,49 @@ func TestGetParametersByPath(t *testing.T) {
3337 }, params )
3438}
3539
36- func param (name , value string ) * ssm .Parameter {
37- return & ssm .Parameter {Name : & name , Value : & value }
40+ func param (name , value string ) types .Parameter {
41+ return types .Parameter {Name : & name , Value : & value }
3842}
3943
44+ var _ ssm.GetParametersByPathAPIClient = FakeClient {}
45+
4046type FakeClient struct {
41- ssmiface.SSMAPI
4247 Path string
43- Pages [][]* ssm .Parameter
48+ Pages [][]types .Parameter
4449 T * testing.T
4550}
4651
47- func (f FakeClient ) GetParametersByPathPages ( input * ssm.GetParametersByPathInput , handler func (* ssm.GetParametersByPathOutput , bool ) bool ) error {
52+ func (f FakeClient ) GetParametersByPath ( ctx context. Context , input * ssm.GetParametersByPathInput , opts ... func (* ssm.Options )) ( * ssm. GetParametersByPathOutput , error ) {
4853 require .Equal (f .T , * input .Path , f .Path )
49- for i , page := range f .Pages {
50- lastPage := (i == len (f .Pages )- 1 )
51- handler (& ssm.GetParametersByPathOutput {Parameters : page }, lastPage )
54+
55+ pageNum , err := getPage (input .NextToken )
56+ if err != nil {
57+ return nil , err
58+ }
59+ if pageNum >= len (f .Pages ) {
60+ return nil , errors .New ("invalid page" )
61+ }
62+
63+ nextPage := pageNum + 1
64+ output := & ssm.GetParametersByPathOutput {Parameters : f .Pages [pageNum ]}
65+
66+ if nextPage < len (f .Pages ) {
67+ output .NextToken = aws .String (strconv .Itoa (nextPage ))
5268 }
53- return nil
69+
70+ return output , nil
71+ }
72+
73+ func getPage (nextToken * string ) (int , error ) {
74+ pageNum := 0
75+ var err error
76+
77+ if nextToken != nil {
78+ pageNum , err = strconv .Atoi (* nextToken )
79+ if err != nil {
80+ return 0 , err
81+ }
82+ }
83+
84+ return pageNum , nil
5485}
0 commit comments