github.com/shuguocloud/go-zero@v1.3.0/core/syncx/resourcemanager_test.go (about) 1 package syncx 2 3 import ( 4 "errors" 5 "io" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 type dummyResource struct { 12 age int 13 } 14 15 func (dr *dummyResource) Close() error { 16 return errors.New("close") 17 } 18 19 func TestResourceManager_GetResource(t *testing.T) { 20 manager := NewResourceManager() 21 defer manager.Close() 22 23 var age int 24 for i := 0; i < 10; i++ { 25 val, err := manager.GetResource("key", func() (io.Closer, error) { 26 age++ 27 return &dummyResource{ 28 age: age, 29 }, nil 30 }) 31 assert.Nil(t, err) 32 assert.Equal(t, 1, val.(*dummyResource).age) 33 } 34 } 35 36 func TestResourceManager_GetResourceError(t *testing.T) { 37 manager := NewResourceManager() 38 defer manager.Close() 39 40 for i := 0; i < 10; i++ { 41 _, err := manager.GetResource("key", func() (io.Closer, error) { 42 return nil, errors.New("fail") 43 }) 44 assert.NotNil(t, err) 45 } 46 } 47 48 func TestResourceManager_Close(t *testing.T) { 49 manager := NewResourceManager() 50 for i := 0; i < 10; i++ { 51 _, err := manager.GetResource("key", func() (io.Closer, error) { 52 return nil, errors.New("fail") 53 }) 54 assert.NotNil(t, err) 55 } 56 57 if assert.NoError(t, manager.Close()) { 58 assert.Equal(t, 0, len(manager.resources)) 59 } 60 } 61 62 func TestResourceManager_UseAfterClose(t *testing.T) { 63 manager := NewResourceManager() 64 _, err := manager.GetResource("key", func() (io.Closer, error) { 65 return nil, errors.New("fail") 66 }) 67 assert.NotNil(t, err) 68 if assert.NoError(t, manager.Close()) { 69 _, err = manager.GetResource("key", func() (io.Closer, error) { 70 return nil, errors.New("fail") 71 }) 72 assert.NotNil(t, err) 73 } 74 }