github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/creds/secretsmanager/secretsmanager_test.go (about) 1 package secretsmanager_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/lager/lagertest" 7 8 "github.com/pf-qiu/concourse/v6/atc/creds" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/awserr" 12 "github.com/aws/aws-sdk-go/service/secretsmanager" 13 "github.com/aws/aws-sdk-go/service/secretsmanager/secretsmanageriface" 14 "github.com/pf-qiu/concourse/v6/vars" 15 16 . "github.com/pf-qiu/concourse/v6/atc/creds/secretsmanager" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 ) 20 21 type MockSecretsManagerService struct { 22 secretsmanageriface.SecretsManagerAPI 23 24 stubGetParameter func(name string) (*secretsmanager.GetSecretValueOutput, error) 25 } 26 27 func (mock *MockSecretsManagerService) GetSecretValue(input *secretsmanager.GetSecretValueInput) (*secretsmanager.GetSecretValueOutput, error) { 28 if mock.stubGetParameter == nil { 29 return nil, errors.New("stubGetParameter is not defined") 30 } 31 Expect(input).ToNot(BeNil()) 32 Expect(input.SecretId).ToNot(BeNil()) 33 value, err := mock.stubGetParameter(*input.SecretId) 34 if err != nil { 35 return nil, err 36 } 37 return value, nil 38 } 39 40 var _ = Describe("SecretsManager", func() { 41 var secretAccess *SecretsManager 42 var variables vars.Variables 43 var varRef vars.Reference 44 var mockService MockSecretsManagerService 45 46 JustBeforeEach(func() { 47 varRef = vars.Reference{Path: "cheery"} 48 t1, err := creds.BuildSecretTemplate("t1", DefaultPipelineSecretTemplate) 49 Expect(t1).NotTo(BeNil()) 50 Expect(err).To(BeNil()) 51 t2, err := creds.BuildSecretTemplate("t2", DefaultTeamSecretTemplate) 52 Expect(t2).NotTo(BeNil()) 53 Expect(err).To(BeNil()) 54 secretAccess = NewSecretsManager(lagertest.NewTestLogger("secretsmanager_test"), &mockService, []*creds.SecretTemplate{t1, t2}) 55 variables = creds.NewVariables(secretAccess, "alpha", "bogus", false) 56 Expect(secretAccess).NotTo(BeNil()) 57 mockService.stubGetParameter = func(input string) (*secretsmanager.GetSecretValueOutput, error) { 58 if input == "/concourse/alpha/bogus/cheery" { 59 return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("secret value"), Name: &input}, nil 60 } 61 return nil, awserr.New(secretsmanager.ErrCodeResourceNotFoundException, "", nil) 62 } 63 }) 64 65 Describe("Get()", func() { 66 It("should get parameter if exists", func() { 67 value, found, err := variables.Get(varRef) 68 Expect(value).To(BeEquivalentTo("secret value")) 69 Expect(found).To(BeTrue()) 70 Expect(err).To(BeNil()) 71 }) 72 73 It("should get complex parameter", func() { 74 mockService.stubGetParameter = func(path string) (*secretsmanager.GetSecretValueOutput, error) { 75 return &secretsmanager.GetSecretValueOutput{ 76 SecretBinary: []byte(`{"name": "yours", "pass": "truely"}`), 77 }, nil 78 } 79 value, found, err := variables.Get(vars.Reference{Path: "user"}) 80 Expect(err).To(BeNil()) 81 Expect(found).To(BeTrue()) 82 Expect(value).To(BeEquivalentTo(map[string]interface{}{ 83 "name": "yours", 84 "pass": "truely", 85 })) 86 }) 87 88 It("should get team parameter if exists", func() { 89 mockService.stubGetParameter = func(input string) (*secretsmanager.GetSecretValueOutput, error) { 90 if input != "/concourse/alpha/cheery" { 91 return nil, awserr.New(secretsmanager.ErrCodeResourceNotFoundException, "", nil) 92 } 93 return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("team decrypted value")}, nil 94 } 95 value, found, err := variables.Get(varRef) 96 Expect(value).To(BeEquivalentTo("team decrypted value")) 97 Expect(found).To(BeTrue()) 98 Expect(err).To(BeNil()) 99 }) 100 101 It("should return not found on error", func() { 102 mockService.stubGetParameter = nil 103 value, found, err := variables.Get(varRef) 104 Expect(value).To(BeNil()) 105 Expect(found).To(BeFalse()) 106 Expect(err).NotTo(BeNil()) 107 }) 108 109 It("should allow empty pipeline name", func() { 110 variables := creds.NewVariables(secretAccess, "alpha", "", false) 111 mockService.stubGetParameter = func(input string) (*secretsmanager.GetSecretValueOutput, error) { 112 Expect(input).To(Equal("/concourse/alpha/cheery")) 113 return &secretsmanager.GetSecretValueOutput{SecretString: aws.String("team power")}, nil 114 } 115 value, found, err := variables.Get(varRef) 116 Expect(value).To(BeEquivalentTo("team power")) 117 Expect(found).To(BeTrue()) 118 Expect(err).To(BeNil()) 119 }) 120 }) 121 })