github.com/Jeffail/benthos/v3@v3.65.0/public/service/config_backoff_test.go (about)

     1  package service
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/cenkalti/backoff/v4"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestConfigBackOff(t *testing.T) {
    13  	spec := NewConfigSpec().
    14  		Field(NewBackOffField("a", true, nil))
    15  
    16  	parsedConfig, err := spec.ParseYAML(`
    17  a:
    18    max_interval: 300s
    19  `, nil)
    20  	require.NoError(t, err)
    21  
    22  	_, err = parsedConfig.FieldBackOff("b")
    23  	require.Error(t, err)
    24  
    25  	bConf, err := parsedConfig.FieldBackOff("a")
    26  	require.NoError(t, err)
    27  
    28  	assert.Equal(t, time.Millisecond*500, bConf.InitialInterval)
    29  	assert.Equal(t, time.Second*300, bConf.MaxInterval)
    30  	assert.Equal(t, time.Minute*1, bConf.MaxElapsedTime)
    31  }
    32  
    33  func TestConfigBackOffCustomDefaults(t *testing.T) {
    34  	defaults := backoff.NewExponentialBackOff()
    35  	defaults.InitialInterval = time.Minute
    36  	defaults.MaxInterval = time.Minute * 5
    37  	defaults.MaxElapsedTime = time.Hour * 6
    38  
    39  	spec := NewConfigSpec().
    40  		Field(NewBackOffField("a", false, defaults))
    41  
    42  	parsedConfig, err := spec.ParseYAML(`
    43  a:
    44    max_interval: 300s
    45  `, nil)
    46  	require.NoError(t, err)
    47  
    48  	_, err = parsedConfig.FieldBackOff("b")
    49  	require.Error(t, err)
    50  
    51  	bConf, err := parsedConfig.FieldBackOff("a")
    52  	require.NoError(t, err)
    53  
    54  	assert.Equal(t, time.Minute, bConf.InitialInterval)
    55  	assert.Equal(t, time.Second*300, bConf.MaxInterval)
    56  	assert.Equal(t, time.Hour*6, bConf.MaxElapsedTime)
    57  }