github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/chunk/backoff/backoff_test.go (about) 1 package backoff 2 3 import ( 4 "errors" 5 "github.com/stretchr/testify/assert" 6 "net/http" 7 "testing" 8 "time" 9 ) 10 11 func TestConstantBackoff_Next(t *testing.T) { 12 a := assert.New(t) 13 14 // General error 15 { 16 err := errors.New("error") 17 b := &ConstantBackoff{Sleep: time.Duration(0), Max: 3} 18 a.True(b.Next(err)) 19 a.True(b.Next(err)) 20 a.True(b.Next(err)) 21 a.False(b.Next(err)) 22 b.Reset() 23 a.True(b.Next(err)) 24 a.True(b.Next(err)) 25 a.True(b.Next(err)) 26 a.False(b.Next(err)) 27 } 28 29 // Retryable error 30 { 31 err := &RetryableError{RetryAfter: time.Duration(1)} 32 b := &ConstantBackoff{Sleep: time.Duration(0), Max: 3} 33 a.True(b.Next(err)) 34 a.True(b.Next(err)) 35 a.True(b.Next(err)) 36 a.False(b.Next(err)) 37 b.Reset() 38 a.True(b.Next(err)) 39 a.True(b.Next(err)) 40 a.True(b.Next(err)) 41 a.False(b.Next(err)) 42 } 43 44 } 45 46 func TestNewRetryableErrorFromHeader(t *testing.T) { 47 a := assert.New(t) 48 // no retry-after header 49 { 50 err := NewRetryableErrorFromHeader(nil, http.Header{}) 51 a.Empty(err.RetryAfter) 52 } 53 54 // with retry-after header 55 { 56 header := http.Header{} 57 header.Add("retry-after", "120") 58 err := NewRetryableErrorFromHeader(nil, header) 59 a.EqualValues(time.Duration(120)*time.Second, err.RetryAfter) 60 } 61 }