Skip to content

Commit

Permalink
[#6] - Exponent is no longer optional
Browse files Browse the repository at this point in the history
  • Loading branch information
J7mbo committed Apr 10, 2019
1 parent 24cc888 commit 6630c4b
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 21 deletions.
16 changes: 8 additions & 8 deletions MethodCallRetrier.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,10 @@ type MethodCallRetrier struct {
errorList []error
}

/* MethodCallRetrier.New returns a new MethodCallRetrier. */
func New(waitTime int64, maxRetries int64, exponent *int64) *MethodCallRetrier {
if exponent == nil {
defaultInt := int64(1)
exponent = &defaultInt
/* New returns a new MethodCallRetrier. */
func New(waitTime int64, maxRetries int64, exponent int64) *MethodCallRetrier {
if exponent < 1 {
exponent = 1
}

if maxRetries < 1 {
Expand All @@ -41,12 +40,13 @@ func New(waitTime int64, maxRetries int64, exponent *int64) *MethodCallRetrier {
waitTime = 0
}

return &MethodCallRetrier{waitTime: waitTime, maxRetries: maxRetries, exponent: *exponent}
return &MethodCallRetrier{waitTime: waitTime, maxRetries: maxRetries, exponent: exponent}
}

/*
Retries a function with a maximum number of retries and a wait time. Functionally equivalent to ExecuteWithRetry() but
accepts a function to maintain type safety in userland instead and removes the requirement of a user type assertion.
ExecuteFuncWithRetry retries a function with a maximum number of retries and a wait time. Functionally equivalent to
ExecuteWithRetry() but accepts a function to maintain type safety in userland instead and removes the requirement of a
user type assertion.
*/
func (r *MethodCallRetrier) ExecuteFuncWithRetry(function func() error) []error {
defer func() {
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Extremely useful for retrying HTTP calls in distributed systems, or anything els
Installation
-

`go get github.com/j7mbo/MethodCallRetrier`
`go get github.com/j7mbo/MethodCallRetrier/v2`

Usage
-

Initialise the object with some options:

```
MethodCallRetrier.New(waitTime int64, maxRetries int64, exponent *int64)
MethodCallRetrier.New(waitTime int64, maxRetries int64, exponent int64)
```

Call `ExecuteWithRetry` with your object and method you want to retry:
Expand Down
20 changes: 10 additions & 10 deletions Retrier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type RetrierTestSuite struct {
}

func (s *RetrierTestSuite) SetupTest() {
s.retrier = New(0, 1, nil)
s.retrier = New(0, 1, 1)
}

func TestRetrierTestSuite(t *testing.T) {
Expand Down Expand Up @@ -74,7 +74,7 @@ func (s *RetrierTestSuite) TestRetrierRetriesCorrectNumberOfTimes() {

testObj.On(methodName, "").Return(errors.New(""))

_, _ = New(0, 5, nil).ExecuteWithRetry(&testObj, methodName, "")
_, _ = New(0, 5, 1).ExecuteWithRetry(&testObj, methodName, "")

testObj.AssertNumberOfCalls(s.T(), methodName, 5)

Expand All @@ -84,15 +84,15 @@ func (s *RetrierTestSuite) TestRetrierRetriesCorrectNumberOfTimes() {
func (s *RetrierTestSuite) TestRetrierWorksWithNegativeMaxRetries() {
arg := "testArg"

results, _ := New(-1, -1, nil).ExecuteWithRetry(RetryObject{}, "MethodReturningString", arg)
results, _ := New(-1, -1, 1).ExecuteWithRetry(RetryObject{}, "MethodReturningString", arg)

s.Assert().EqualValues(results[0].String(), arg)
}

func (s *RetrierTestSuite) TestRetrierDefaultsToOneRetryGivenZeroMaxRetries() {
testObj := RetryMockObject{}

New(0, 0, nil).ExecuteFuncWithRetry(testObj.MethodToBeCalledToReturnResultAndError)
New(0, 0, 1).ExecuteFuncWithRetry(testObj.MethodToBeCalledToReturnResultAndError)

s.Assert().Equal(1, testObj.timesCalled)
}
Expand All @@ -103,7 +103,7 @@ func (s *RetrierTestSuite) TestRetrierReturnsAllErrorsPlusOurError() {

testObj.On(methodName, "").Return(errors.New(""))

_, errs := New(0, 5, nil).ExecuteWithRetry(&testObj, methodName, "")
_, errs := New(0, 5, 1).ExecuteWithRetry(&testObj, methodName, "")

s.Assert().Len(errs, 6)
}
Expand All @@ -112,7 +112,7 @@ func (s *RetrierTestSuite) TestRetrierWorksWhenErrorIsNotLastReturnParamOnObject
testObj := RetryObject{}
methodName := "MethodReturningErrorInRandomPosition"

_, errs := New(1, 1, nil).ExecuteWithRetry(&testObj, methodName, "")
_, errs := New(1, 1, 1).ExecuteWithRetry(&testObj, methodName, "")

s.Assert().IsType(errors.New(""), errs[0])
}
Expand All @@ -121,15 +121,15 @@ func (s *RetrierTestSuite) TestRetrierWorksWhenMultipleReturnParamsAreErrors() {
testObj := RetryObject{}
methodName := "MethodReturningMultipleErrors"

_, errs := New(0, 5, nil).ExecuteWithRetry(&testObj, methodName, "")
_, errs := New(0, 5, 1).ExecuteWithRetry(&testObj, methodName, "")

s.Assert().Len(errs, 11)
}

func (s *RetrierTestSuite) TestRetrierWorksWithUserFunction() {
var num int

errs := New(0, 3, nil).ExecuteFuncWithRetry(func() error {
errs := New(0, 3, 1).ExecuteFuncWithRetry(func() error {
num = 42

return nil
Expand All @@ -140,7 +140,7 @@ func (s *RetrierTestSuite) TestRetrierWorksWithUserFunction() {
}

func (s *RetrierTestSuite) TestRetrierWithUserFunctionReturnsCorrectNumberOfErrors() {
errs := New(0, 3, nil).ExecuteFuncWithRetry(func() error {
errs := New(0, 3, 1).ExecuteFuncWithRetry(func() error {
return errors.New("")
})

Expand All @@ -150,7 +150,7 @@ func (s *RetrierTestSuite) TestRetrierWithUserFunctionReturnsCorrectNumberOfErro
func (s *RetrierTestSuite) TestRetrierWorksWithUserFunctionCalledCorrectNumberOfTimes() {
testObj := RetryMockObject{}

New(0, 3, nil).ExecuteFuncWithRetry(testObj.MethodToBeCalledToReturnResultAndError)
New(0, 3, 1).ExecuteFuncWithRetry(testObj.MethodToBeCalledToReturnResultAndError)

s.Assert().Equal(3, testObj.timesCalled)
}
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module github.com/j7mbo/MethodCallRetrier
module github.com/j7mbo/MethodCallRetrier/v2

require github.com/stretchr/testify v1.3.0

0 comments on commit 6630c4b

Please sign in to comment.