manager_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package overwatch
  2. import (
  3. "crypto/md5"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. type mockService struct {
  11. serviceName string
  12. serviceType string
  13. runError error
  14. }
  15. func (s *mockService) Name() string {
  16. return s.serviceName
  17. }
  18. func (s *mockService) Type() string {
  19. return s.serviceType
  20. }
  21. func (s *mockService) Hash() string {
  22. h := md5.New()
  23. io.WriteString(h, s.serviceName)
  24. io.WriteString(h, s.serviceType)
  25. return fmt.Sprintf("%x", h.Sum(nil))
  26. }
  27. func (s *mockService) Shutdown() {
  28. }
  29. func (s *mockService) Run() error {
  30. return s.runError
  31. }
  32. func TestManagerAddAndRemove(t *testing.T) {
  33. m := NewAppManager(nil)
  34. first := &mockService{serviceName: "first", serviceType: "mock"}
  35. second := &mockService{serviceName: "second", serviceType: "mock"}
  36. m.Add(first)
  37. m.Add(second)
  38. assert.Len(t, m.Services(), 2, "expected 2 services in the list")
  39. m.Remove(first.Name())
  40. services := m.Services()
  41. assert.Len(t, services, 1, "expected 1 service in the list")
  42. assert.Equal(t, second.Hash(), services[0].Hash(), "hashes should match. Wrong service was removed")
  43. }
  44. func TestManagerDuplicate(t *testing.T) {
  45. m := NewAppManager(nil)
  46. first := &mockService{serviceName: "first", serviceType: "mock"}
  47. m.Add(first)
  48. m.Add(first)
  49. assert.Len(t, m.Services(), 1, "expected 1 service in the list")
  50. }
  51. func TestManagerErrorChannel(t *testing.T) {
  52. errChan := make(chan error)
  53. serviceCallback := func(t string, name string, err error) {
  54. errChan <- err
  55. }
  56. m := NewAppManager(serviceCallback)
  57. err := errors.New("test error")
  58. first := &mockService{serviceName: "first", serviceType: "mock", runError: err}
  59. m.Add(first)
  60. respErr := <-errChan
  61. assert.Equal(t, err, respErr, "errors don't match")
  62. }