github.com/bkosm/gompose/v2@v2.3.1/common_test.go (about)

     1  package gompose
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func Test_doRetry(t *testing.T) {
    10  	t.Run("should return immediately in case of no error", func(t *testing.T) {
    11  		start := time.Now()
    12  		defer func() {
    13  			if time.Since(start) > time.Second {
    14  				t.Fail()
    15  			}
    16  		}()
    17  
    18  		err := doRetry(1, time.Second, func() error {
    19  			return nil
    20  		})
    21  		assertNoError(t, err)
    22  	})
    23  
    24  	t.Run("should return error after all attempts", func(t *testing.T) {
    25  		start := time.Now()
    26  		defer func() {
    27  			if time.Since(start) < time.Millisecond*10 {
    28  				t.Fail()
    29  			}
    30  		}()
    31  
    32  		err := doRetry(3, time.Millisecond*10, func() error {
    33  			return errors.New("boom")
    34  		})
    35  		assertError(t, err)
    36  	})
    37  
    38  	t.Run("should return success after a retry if the operation passed", func(t *testing.T) {
    39  		start := time.Now()
    40  		defer func() {
    41  			if time.Since(start) < time.Millisecond*10 {
    42  				t.Fail()
    43  			}
    44  		}()
    45  
    46  		var (
    47  			i        = 0
    48  			innerErr = errors.New("boom")
    49  		)
    50  		err := doRetry(3, time.Millisecond*10, func() error {
    51  			if i == 2 {
    52  				return nil
    53  			}
    54  			i++
    55  			return innerErr
    56  		})
    57  		assertNoError(t, err)
    58  	})
    59  }