github.com/cilium/cilium@v1.16.2/pkg/resiliency/helpers_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package resiliency_test
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  
    14  	"github.com/cilium/cilium/pkg/resiliency"
    15  )
    16  
    17  func TestRetries(t *testing.T) {
    18  	var maxRetries int
    19  
    20  	uu := map[string]struct {
    21  		d   time.Duration
    22  		m   int
    23  		f   resiliency.RetryFunc
    24  		err error
    25  		e   int
    26  	}{
    27  		"no-retries": {
    28  			d: 10 * time.Millisecond,
    29  			m: 3,
    30  			f: func(ctx context.Context, retries int) (bool, error) {
    31  				maxRetries = retries
    32  				return true, nil
    33  			},
    34  			e: 1,
    35  		},
    36  		"happy": {
    37  			d: 10 * time.Millisecond,
    38  			m: 3,
    39  			f: func(ctx context.Context, retries int) (bool, error) {
    40  				maxRetries = retries
    41  				if retries < 3 {
    42  					return false, nil
    43  				}
    44  				return true, nil
    45  			},
    46  			e: 3,
    47  		},
    48  		"error-complete": {
    49  			d: 10 * time.Millisecond,
    50  			m: 3,
    51  			f: func(ctx context.Context, retries int) (bool, error) {
    52  				maxRetries = retries
    53  				return true, errors.New("boom")
    54  			},
    55  			err: errors.New("boom"),
    56  			e:   1,
    57  		},
    58  		"error-retry": {
    59  			d: 10 * time.Millisecond,
    60  			m: 3,
    61  			f: func(ctx context.Context, retries int) (bool, error) {
    62  				maxRetries = retries
    63  				return false, errors.New("boom")
    64  			},
    65  			err: errors.New("boom"),
    66  			e:   1,
    67  		},
    68  	}
    69  
    70  	for k := range uu {
    71  		u := uu[k]
    72  		maxRetries = 0
    73  		t.Run(k, func(t *testing.T) {
    74  			err := resiliency.Retry(context.Background(), u.d, u.m, u.f)
    75  			if err != nil {
    76  				assert.Equal(t, u.err, err)
    77  			}
    78  			assert.Equal(t, u.e, maxRetries)
    79  		})
    80  	}
    81  }