package grpcclient_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.yandata.net/wangsiyuan/go-trustlog/internal/grpcclient" ) func TestConfig_GetAddrs(t *testing.T) { tests := []struct { name string config grpcclient.Config wantAddrs []string wantErr bool errMsg string }{ { name: "ServerAddrs优先级高于ServerAddr", config: grpcclient.Config{ ServerAddrs: []string{"server1:9090", "server2:9090"}, ServerAddr: "server3:9090", }, wantAddrs: []string{"server1:9090", "server2:9090"}, wantErr: false, }, { name: "只有ServerAddrs", config: grpcclient.Config{ ServerAddrs: []string{"server1:9090", "server2:9090", "server3:9090"}, }, wantAddrs: []string{"server1:9090", "server2:9090", "server3:9090"}, wantErr: false, }, { name: "只有ServerAddr", config: grpcclient.Config{ ServerAddr: "server1:9090", }, wantAddrs: []string{"server1:9090"}, wantErr: false, }, { name: "ServerAddrs为空,使用ServerAddr", config: grpcclient.Config{ ServerAddrs: []string{}, ServerAddr: "server1:9090", }, wantAddrs: []string{"server1:9090"}, wantErr: false, }, { name: "没有任何地址应该返回错误", config: grpcclient.Config{}, wantAddrs: nil, wantErr: true, errMsg: "at least one server address is required", }, { name: "ServerAddrs为空且ServerAddr为空", config: grpcclient.Config{ ServerAddrs: []string{}, ServerAddr: "", }, wantAddrs: nil, wantErr: true, errMsg: "at least one server address is required", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { addrs, err := tt.config.GetAddrs() if tt.wantErr { require.Error(t, err) if tt.errMsg != "" { assert.Contains(t, err.Error(), tt.errMsg) } assert.Nil(t, addrs) } else { require.NoError(t, err) assert.Equal(t, tt.wantAddrs, addrs) } }) } } func TestConfig_EmptyServerAddrs(t *testing.T) { // 测试空的 ServerAddrs 切片 config := grpcclient.Config{ ServerAddrs: []string{}, ServerAddr: "fallback:9090", } addrs, err := config.GetAddrs() require.NoError(t, err) assert.Equal(t, []string{"fallback:9090"}, addrs) } func TestConfig_MultipleServerAddrs(t *testing.T) { // 测试多个服务器地址 config := grpcclient.Config{ ServerAddrs: []string{ "server1:9090", "server2:9091", "server3:9092", "server4:9093", }, } addrs, err := config.GetAddrs() require.NoError(t, err) assert.Len(t, addrs, 4) assert.Equal(t, "server1:9090", addrs[0]) assert.Equal(t, "server4:9093", addrs[3]) }