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  }