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  }