directbuilder_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package internal
  2. import (
  3. "errors"
  4. "fmt"
  5. "net/url"
  6. "strconv"
  7. "strings"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/zeromicro/go-zero/core/lang"
  11. "github.com/zeromicro/go-zero/core/mathx"
  12. "google.golang.org/grpc/resolver"
  13. )
  14. func TestDirectBuilder_Build(t *testing.T) {
  15. tests := []int{
  16. 0,
  17. 1,
  18. 2,
  19. subsetSize / 2,
  20. subsetSize,
  21. subsetSize * 2,
  22. }
  23. for _, test := range tests {
  24. test := test
  25. t.Run(strconv.Itoa(test), func(t *testing.T) {
  26. var servers []string
  27. for i := 0; i < test; i++ {
  28. servers = append(servers, fmt.Sprintf("localhost:%d", i))
  29. }
  30. var b directBuilder
  31. cc := new(mockedClientConn)
  32. target := fmt.Sprintf("%s:///%s", DirectScheme, strings.Join(servers, ","))
  33. uri, err := url.Parse(target)
  34. assert.Nil(t, err)
  35. cc.err = errors.New("foo")
  36. _, err = b.Build(resolver.Target{
  37. URL: *uri,
  38. }, cc, resolver.BuildOptions{})
  39. assert.NotNil(t, err)
  40. cc.err = nil
  41. _, err = b.Build(resolver.Target{
  42. URL: *uri,
  43. }, cc, resolver.BuildOptions{})
  44. assert.NoError(t, err)
  45. size := mathx.MinInt(test, subsetSize)
  46. assert.Equal(t, size, len(cc.state.Addresses))
  47. m := make(map[string]lang.PlaceholderType)
  48. for _, each := range cc.state.Addresses {
  49. m[each.Addr] = lang.Placeholder
  50. }
  51. assert.Equal(t, size, len(m))
  52. })
  53. }
  54. }
  55. func TestDirectBuilder_Scheme(t *testing.T) {
  56. var b directBuilder
  57. assert.Equal(t, DirectScheme, b.Scheme())
  58. }