resourcemanager_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. defer manager.Close()
  42. for i := 0; i < 10; i++ {
  43. _, err := manager.GetResource("key", func() (io.Closer, error) {
  44. return nil, errors.New("fail")
  45. })
  46. assert.NotNil(t, err)
  47. }
  48. if assert.NoError(t, manager.Close()) {
  49. assert.Equal(t, 0, len(manager.resources))
  50. }
  51. }
  52. func TestResourceManager_UseAfterClose(t *testing.T) {
  53. manager := NewResourceManager()
  54. defer manager.Close()
  55. _, err := manager.GetResource("key", func() (io.Closer, error) {
  56. return nil, errors.New("fail")
  57. })
  58. assert.NotNil(t, err)
  59. if assert.NoError(t, manager.Close()) {
  60. _, err = manager.GetResource("key", func() (io.Closer, error) {
  61. return nil, errors.New("fail")
  62. })
  63. assert.NotNil(t, err)
  64. assert.Panics(t, func() {
  65. _, err = manager.GetResource("key", func() (io.Closer, error) {
  66. return &dummyResource{age: 123}, nil
  67. })
  68. })
  69. }
  70. }
  71. func TestResourceManager_Inject(t *testing.T) {
  72. manager := NewResourceManager()
  73. defer manager.Close()
  74. manager.Inject("key", &dummyResource{
  75. age: 10,
  76. })
  77. val, err := manager.GetResource("key", func() (io.Closer, error) {
  78. return nil, nil
  79. })
  80. assert.Nil(t, err)
  81. assert.Equal(t, 10, val.(*dummyResource).age)
  82. }