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  })