github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/creds/retryable_secrets_test.go (about) 1 package creds_test 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/pf-qiu/concourse/v6/atc/creds" 8 "github.com/pf-qiu/concourse/v6/atc/creds/credsfakes" 9 "github.com/pf-qiu/concourse/v6/vars" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 func makeFlakySecretManager(numberOfFails int) creds.Secrets { 15 fakeSecretManager := new(credsfakes.FakeSecrets) 16 attempt := 0 17 fakeSecretManager.GetStub = func(string) (interface{}, *time.Time, bool, error) { 18 attempt++ 19 if attempt <= numberOfFails { 20 return nil, nil, false, fmt.Errorf("remote error: handshake failure") 21 } 22 return "received value", nil, true, nil 23 } 24 return fakeSecretManager 25 } 26 27 var _ = Describe("Re-retrieval of secrets on retryable errors", func() { 28 29 It("should retry receiving a parameter in case of retryable error", func() { 30 flakySecretManager := makeFlakySecretManager(3) 31 retryableSecretManager := creds.NewRetryableSecrets(flakySecretManager, creds.SecretRetryConfig{Attempts: 5, Interval: time.Millisecond}) 32 varRef := vars.Reference{Path: "somevar"} 33 value, found, err := creds.NewVariables(retryableSecretManager, "team", "pipeline", false).Get(varRef) 34 Expect(value).To(BeEquivalentTo("received value")) 35 Expect(found).To(BeTrue()) 36 Expect(err).To(BeNil()) 37 }) 38 39 It("should not receive a parameter if the number of retryable errors exceeded the number of allowed attempts", func() { 40 flakySecretManager := makeFlakySecretManager(10) 41 retryableSecretManager := creds.NewRetryableSecrets(flakySecretManager, creds.SecretRetryConfig{Attempts: 5, Interval: time.Millisecond}) 42 varRef := vars.Reference{Path: "somevar"} 43 value, found, err := creds.NewVariables(retryableSecretManager, "team", "pipeline", false).Get(varRef) 44 Expect(value).To(BeNil()) 45 Expect(found).To(BeFalse()) 46 Expect(err).NotTo(BeNil()) 47 }) 48 49 })