resourcemanager_test.go 1.5 KB

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