freezer_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package rawdb
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/mock"
  7. )
  8. // Quorum
  9. func Test_freezer_Close(t *testing.T) {
  10. // Close first time
  11. mockFreezer := newFreezerMock(t)
  12. err := mockFreezer.Close()
  13. assert.Nil(t, err)
  14. // Close second time should return error but do not hang sending data to freeze.quit channel
  15. timeout := time.After(1 * time.Second)
  16. errCh := make(chan error)
  17. go func() {
  18. errCh <- mockFreezer.Close()
  19. }()
  20. select {
  21. case <-timeout:
  22. t.Fatal("freezer.Close() timed out")
  23. case err := <-errCh:
  24. assert.Nil(t, err)
  25. }
  26. }
  27. // Releaser is an autogenerated mock type for the Releaser type
  28. type releaserMock struct {
  29. mock.Mock
  30. }
  31. // Release provides a mock function with given fields:
  32. func (_m *releaserMock) Release() error {
  33. ret := _m.Called()
  34. var r0 error
  35. if rf, ok := ret.Get(0).(func() error); ok {
  36. r0 = rf()
  37. } else {
  38. r0 = ret.Error(0)
  39. }
  40. return r0
  41. }
  42. func newFreezerMock(t *testing.T) *freezer {
  43. mockLock := new(releaserMock)
  44. mockFreezer := &freezer{
  45. tables: make(map[string]*freezerTable),
  46. instanceLock: mockLock,
  47. quit: make(chan struct{}),
  48. }
  49. mockLock.On("Release").Return(nil)
  50. started := make(chan bool)
  51. go func() {
  52. started <- true
  53. <-mockFreezer.quit
  54. }()
  55. <-started
  56. return mockFreezer
  57. }
  58. // End Quorum