breakerinterceptor_test.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package clientinterceptors
  2. import (
  3. "testing"
  4. "zero/core/breaker"
  5. "zero/core/stat"
  6. "github.com/stretchr/testify/assert"
  7. "google.golang.org/grpc/codes"
  8. "google.golang.org/grpc/status"
  9. )
  10. func init() {
  11. stat.SetReporter(nil)
  12. }
  13. type mockError struct {
  14. st *status.Status
  15. }
  16. func (m mockError) GRPCStatus() *status.Status {
  17. return m.st
  18. }
  19. func (m mockError) Error() string {
  20. return "mocked error"
  21. }
  22. func TestBreakerInterceptorNotFound(t *testing.T) {
  23. err := mockError{st: status.New(codes.NotFound, "any")}
  24. for i := 0; i < 1000; i++ {
  25. assert.Equal(t, err, breaker.DoWithAcceptable("call", func() error {
  26. return err
  27. }, acceptable))
  28. }
  29. }
  30. func TestBreakerInterceptorDeadlineExceeded(t *testing.T) {
  31. err := mockError{st: status.New(codes.DeadlineExceeded, "any")}
  32. errs := make(map[error]int)
  33. for i := 0; i < 1000; i++ {
  34. e := breaker.DoWithAcceptable("call", func() error {
  35. return err
  36. }, acceptable)
  37. errs[e]++
  38. }
  39. assert.Equal(t, 2, len(errs))
  40. assert.True(t, errs[err] > 0)
  41. assert.True(t, errs[breaker.ErrServiceUnavailable] > 0)
  42. }