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 }