github.com/lingyao2333/mo-zero@v1.4.1/core/syncx/immutableresource_test.go (about)

     1  package syncx
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestImmutableResource(t *testing.T) {
    12  	var count int
    13  	r := NewImmutableResource(func() (interface{}, error) {
    14  		count++
    15  		return "hello", nil
    16  	})
    17  
    18  	res, err := r.Get()
    19  	assert.Equal(t, "hello", res)
    20  	assert.Equal(t, 1, count)
    21  	assert.Nil(t, err)
    22  
    23  	// again
    24  	res, err = r.Get()
    25  	assert.Equal(t, "hello", res)
    26  	assert.Equal(t, 1, count)
    27  	assert.Nil(t, err)
    28  }
    29  
    30  func TestImmutableResourceError(t *testing.T) {
    31  	var count int
    32  	r := NewImmutableResource(func() (interface{}, error) {
    33  		count++
    34  		return nil, errors.New("any")
    35  	})
    36  
    37  	res, err := r.Get()
    38  	assert.Nil(t, res)
    39  	assert.NotNil(t, err)
    40  	assert.Equal(t, "any", err.Error())
    41  	assert.Equal(t, 1, count)
    42  
    43  	// again
    44  	res, err = r.Get()
    45  	assert.Nil(t, res)
    46  	assert.NotNil(t, err)
    47  	assert.Equal(t, "any", err.Error())
    48  	assert.Equal(t, 1, count)
    49  
    50  	r.refreshInterval = 0
    51  	time.Sleep(time.Millisecond)
    52  	res, err = r.Get()
    53  	assert.Nil(t, res)
    54  	assert.NotNil(t, err)
    55  	assert.Equal(t, "any", err.Error())
    56  	assert.Equal(t, 2, count)
    57  }
    58  
    59  func TestImmutableResourceErrorRefreshAlways(t *testing.T) {
    60  	var count int
    61  	r := NewImmutableResource(func() (interface{}, error) {
    62  		count++
    63  		return nil, errors.New("any")
    64  	}, WithRefreshIntervalOnFailure(0))
    65  
    66  	res, err := r.Get()
    67  	assert.Nil(t, res)
    68  	assert.NotNil(t, err)
    69  	assert.Equal(t, "any", err.Error())
    70  	assert.Equal(t, 1, count)
    71  
    72  	// again
    73  	res, err = r.Get()
    74  	assert.Nil(t, res)
    75  	assert.NotNil(t, err)
    76  	assert.Equal(t, "any", err.Error())
    77  	assert.Equal(t, 2, count)
    78  }