storj.io/uplink@v1.13.0/private/metaclient/retry_test.go (about)

     1  // Copyright (C) 2021 Storj Labs, Inc.
     2  // See LICENSE for copying information.
     3  
     4  package metaclient_test
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"syscall"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"storj.io/common/errs2"
    15  	"storj.io/uplink/private/metaclient"
    16  )
    17  
    18  func TestWithRetry(t *testing.T) {
    19  	ctx := context.Background()
    20  
    21  	numberOfExecutions := 0
    22  	err := metaclient.WithRetry(ctx, func(cxt context.Context) error {
    23  		numberOfExecutions++
    24  		return nil
    25  	})
    26  
    27  	require.NoError(t, err)
    28  	require.Equal(t, 1, numberOfExecutions)
    29  
    30  	numberOfExecutions = 0
    31  	err = metaclient.WithRetry(ctx, func(cxt context.Context) error {
    32  		numberOfExecutions++
    33  		return syscall.ECONNRESET
    34  	})
    35  	require.Error(t, err)
    36  	require.True(t, errors.Is(err, syscall.ECONNRESET))
    37  	require.Greater(t, numberOfExecutions, 1)
    38  
    39  	numberOfExecutions = 0
    40  	cancelCtx, cancel := context.WithCancel(ctx)
    41  	cancel()
    42  	err = metaclient.WithRetry(cancelCtx, func(cxt context.Context) error {
    43  		numberOfExecutions++
    44  		return nil
    45  	})
    46  	require.Error(t, err)
    47  	require.True(t, errs2.IsCanceled(err))
    48  	require.Equal(t, numberOfExecutions, 0)
    49  }