test: Handle adding new members for clusters with TCP enabled

This commit is contained in:
Marek Siarkowicz 2022-01-18 12:12:45 +01:00
parent 5bcbf77980
commit 98242da5f1

View File

@ -83,7 +83,7 @@ var (
// LocalListenCount integration test uses unique ports, counting up, to listen for each // LocalListenCount integration test uses unique ports, counting up, to listen for each
// member, ensuring restarted members can listen on the same port again. // member, ensuring restarted members can listen on the same port again.
LocalListenCount = int64(0) LocalListenCount = int32(0)
TestTLSInfo = transport.TLSInfo{ TestTLSInfo = transport.TLSInfo{
KeyFile: MustAbsPath("../fixtures/server.key.insecure"), KeyFile: MustAbsPath("../fixtures/server.key.insecure"),
@ -177,11 +177,6 @@ type Cluster struct {
LastMemberNum int LastMemberNum int
} }
func (c *Cluster) generateMemberName() string {
c.LastMemberNum++
return fmt.Sprintf("m%v", c.LastMemberNum-1)
}
func SchemeFromTLSInfo(tls *transport.TLSInfo) string { func SchemeFromTLSInfo(tls *transport.TLSInfo) string {
if tls == nil { if tls == nil {
return URLScheme return URLScheme
@ -219,7 +214,7 @@ func NewClusterFromConfig(t testutil.TB, cfg *ClusterConfig) *Cluster {
c := &Cluster{Cfg: cfg} c := &Cluster{Cfg: cfg}
ms := make([]*Member, cfg.Size) ms := make([]*Member, cfg.Size)
for i := 0; i < cfg.Size; i++ { for i := 0; i < cfg.Size; i++ {
ms[i] = c.mustNewMember(t, int64(i)) ms[i] = c.mustNewMember(t)
} }
c.Members = ms c.Members = ms
if err := c.fillClusterForMembers(); err != nil { if err := c.fillClusterForMembers(); err != nil {
@ -306,10 +301,12 @@ func (c *Cluster) HTTPMembers() []client.Member {
return ms return ms
} }
func (c *Cluster) mustNewMember(t testutil.TB, memberNumber int64) *Member { func (c *Cluster) mustNewMember(t testutil.TB) *Member {
memberNumber := c.LastMemberNum
c.LastMemberNum++
m := MustNewMember(t, m := MustNewMember(t,
MemberConfig{ MemberConfig{
Name: c.generateMemberName(), Name: fmt.Sprintf("m%v", memberNumber-1),
MemberNumber: memberNumber, MemberNumber: memberNumber,
AuthToken: c.Cfg.AuthToken, AuthToken: c.Cfg.AuthToken,
PeerTLS: c.Cfg.PeerTLS, PeerTLS: c.Cfg.PeerTLS,
@ -344,7 +341,7 @@ func (c *Cluster) mustNewMember(t testutil.TB, memberNumber int64) *Member {
// addMember return PeerURLs of the added member. // addMember return PeerURLs of the added member.
func (c *Cluster) addMember(t testutil.TB) types.URLs { func (c *Cluster) addMember(t testutil.TB) types.URLs {
m := c.mustNewMember(t, 0) m := c.mustNewMember(t)
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS) scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
@ -563,7 +560,7 @@ func isMembersEqual(membs []client.Member, wmembs []client.Member) bool {
} }
func newLocalListener(t testutil.TB) net.Listener { func newLocalListener(t testutil.TB) net.Listener {
c := atomic.AddInt64(&LocalListenCount, 1) c := atomic.AddInt32(&LocalListenCount, 1)
// Go 1.8+ allows only numbers in port // Go 1.8+ allows only numbers in port
addr := fmt.Sprintf("127.0.0.1:%05d%05d", c+BasePort, os.Getpid()) addr := fmt.Sprintf("127.0.0.1:%05d%05d", c+BasePort, os.Getpid())
return NewListenerWithAddr(t, addr) return NewListenerWithAddr(t, addr)
@ -579,8 +576,8 @@ func NewListenerWithAddr(t testutil.TB, addr string) net.Listener {
type Member struct { type Member struct {
config.ServerConfig config.ServerConfig
UniqNumber int64 UniqNumber int
MemberNumber int64 MemberNumber int
PeerListeners, ClientListeners []net.Listener PeerListeners, ClientListeners []net.Listener
GrpcListener net.Listener GrpcListener net.Listener
// PeerTLSInfo enables peer TLS when set // PeerTLSInfo enables peer TLS when set
@ -622,7 +619,7 @@ func (m *Member) GRPCURL() string { return m.GrpcURL }
type MemberConfig struct { type MemberConfig struct {
Name string Name string
UniqNumber int64 UniqNumber int64
MemberNumber int64 MemberNumber int
PeerTLS *transport.TLSInfo PeerTLS *transport.TLSInfo
ClientTLS *transport.TLSInfo ClientTLS *transport.TLSInfo
AuthToken string AuthToken string
@ -652,7 +649,7 @@ func MustNewMember(t testutil.TB, mcfg MemberConfig) *Member {
var err error var err error
m := &Member{ m := &Member{
MemberNumber: mcfg.MemberNumber, MemberNumber: mcfg.MemberNumber,
UniqNumber: atomic.AddInt64(&LocalListenCount, 1), UniqNumber: int(atomic.AddInt32(&LocalListenCount, 1)),
} }
peerScheme := SchemeFromTLSInfo(mcfg.PeerTLS) peerScheme := SchemeFromTLSInfo(mcfg.PeerTLS)
@ -852,7 +849,7 @@ func (m *Member) grpcAddr() (network, host, port string) {
return network, host, port return network, host, port
} }
func GrpcPortNumber(uniqNumber, memberNumber int64) int64 { func GrpcPortNumber(uniqNumber, memberNumber int) int {
return BaseGRPCPort + uniqNumber*10 + memberNumber return BaseGRPCPort + uniqNumber*10 + memberNumber
} }
@ -1545,7 +1542,7 @@ func (c *ClusterV3) GetLearnerMembers() ([]*pb.Member, error) {
// AddAndLaunchLearnerMember creates a leaner member, adds it to Cluster // AddAndLaunchLearnerMember creates a leaner member, adds it to Cluster
// via v3 MemberAdd API, and then launches the new member. // via v3 MemberAdd API, and then launches the new member.
func (c *ClusterV3) AddAndLaunchLearnerMember(t testutil.TB) { func (c *ClusterV3) AddAndLaunchLearnerMember(t testutil.TB) {
m := c.mustNewMember(t, 0) m := c.mustNewMember(t)
m.IsLearner = true m.IsLearner = true
scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS) scheme := SchemeFromTLSInfo(c.Cfg.PeerTLS)
@ -1646,7 +1643,7 @@ func (p SortableProtoMemberSliceByPeerURLs) Swap(i, j int) { p[i], p[j] = p[j],
// MustNewMember creates a new member instance based on the response of V3 Member Add API. // MustNewMember creates a new member instance based on the response of V3 Member Add API.
func (c *ClusterV3) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) *Member { func (c *ClusterV3) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) *Member {
m := c.mustNewMember(t, 0) m := c.mustNewMember(t)
m.IsLearner = resp.Member.IsLearner m.IsLearner = resp.Member.IsLearner
m.NewCluster = false m.NewCluster = false