directbuilder_test.go 1.2 KB

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