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