test: Use unique number for grpc port
This commit is contained in:
parent
0bac49bda4
commit
7272a9585d
@ -73,6 +73,7 @@ const (
|
|||||||
basePort = 21000
|
basePort = 21000
|
||||||
URLScheme = "unix"
|
URLScheme = "unix"
|
||||||
URLSchemeTLS = "unixs"
|
URLSchemeTLS = "unixs"
|
||||||
|
baseGRPCPort = 30000
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -121,6 +122,10 @@ var (
|
|||||||
|
|
||||||
defaultTokenJWT = fmt.Sprintf("jwt,pub-key=%s,priv-key=%s,sign-method=RS256,ttl=1s",
|
defaultTokenJWT = fmt.Sprintf("jwt,pub-key=%s,priv-key=%s,sign-method=RS256,ttl=1s",
|
||||||
MustAbsPath("../fixtures/server.crt"), MustAbsPath("../fixtures/server.key.insecure"))
|
MustAbsPath("../fixtures/server.crt"), MustAbsPath("../fixtures/server.key.insecure"))
|
||||||
|
|
||||||
|
// uniqueNumber is used to generate unique port numbers
|
||||||
|
// Should only be accessed via atomic package methods.
|
||||||
|
uniqueNumber int32
|
||||||
)
|
)
|
||||||
|
|
||||||
type ClusterConfig struct {
|
type ClusterConfig struct {
|
||||||
@ -211,7 +216,7 @@ func newCluster(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)
|
ms[i] = c.mustNewMember(t, int32(i))
|
||||||
}
|
}
|
||||||
c.Members = ms
|
c.Members = ms
|
||||||
if err := c.fillClusterForMembers(); err != nil {
|
if err := c.fillClusterForMembers(); err != nil {
|
||||||
@ -298,10 +303,11 @@ func (c *cluster) HTTPMembers() []client.Member {
|
|||||||
return ms
|
return ms
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cluster) mustNewMember(t testutil.TB) *member {
|
func (c *cluster) mustNewMember(t testutil.TB, number int32) *member {
|
||||||
m := mustNewMember(t,
|
m := mustNewMember(t,
|
||||||
memberConfig{
|
memberConfig{
|
||||||
name: c.generateMemberName(),
|
name: c.generateMemberName(),
|
||||||
|
memberNumber: number,
|
||||||
authToken: c.cfg.AuthToken,
|
authToken: c.cfg.AuthToken,
|
||||||
peerTLS: c.cfg.PeerTLS,
|
peerTLS: c.cfg.PeerTLS,
|
||||||
clientTLS: c.cfg.ClientTLS,
|
clientTLS: c.cfg.ClientTLS,
|
||||||
@ -332,7 +338,7 @@ func (c *cluster) mustNewMember(t testutil.TB) *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)
|
m := c.mustNewMember(t,0)
|
||||||
|
|
||||||
scheme := schemeFromTLSInfo(c.cfg.PeerTLS)
|
scheme := schemeFromTLSInfo(c.cfg.PeerTLS)
|
||||||
|
|
||||||
@ -561,6 +567,8 @@ func NewListenerWithAddr(t testutil.TB, addr string) net.Listener {
|
|||||||
|
|
||||||
type member struct {
|
type member struct {
|
||||||
config.ServerConfig
|
config.ServerConfig
|
||||||
|
uniqNumber int32
|
||||||
|
memberNumber int32
|
||||||
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
|
||||||
@ -596,6 +604,7 @@ func (m *member) GRPCURL() string { return m.grpcURL }
|
|||||||
|
|
||||||
type memberConfig struct {
|
type memberConfig struct {
|
||||||
name string
|
name string
|
||||||
|
memberNumber int32
|
||||||
peerTLS *transport.TLSInfo
|
peerTLS *transport.TLSInfo
|
||||||
clientTLS *transport.TLSInfo
|
clientTLS *transport.TLSInfo
|
||||||
authToken string
|
authToken string
|
||||||
@ -620,7 +629,10 @@ type memberConfig struct {
|
|||||||
// set, it will use https scheme to communicate between peers.
|
// set, it will use https scheme to communicate between peers.
|
||||||
func mustNewMember(t testutil.TB, mcfg memberConfig) *member {
|
func mustNewMember(t testutil.TB, mcfg memberConfig) *member {
|
||||||
var err error
|
var err error
|
||||||
m := &member{}
|
m := &member{
|
||||||
|
uniqNumber: atomic.AddInt32(&uniqueNumber, 1),
|
||||||
|
memberNumber: mcfg.memberNumber,
|
||||||
|
}
|
||||||
|
|
||||||
peerScheme := schemeFromTLSInfo(mcfg.peerTLS)
|
peerScheme := schemeFromTLSInfo(mcfg.peerTLS)
|
||||||
clientScheme := schemeFromTLSInfo(mcfg.clientTLS)
|
clientScheme := schemeFromTLSInfo(mcfg.clientTLS)
|
||||||
@ -781,11 +793,11 @@ func (m *member) Bridge() *bridge {
|
|||||||
|
|
||||||
func (m *member) grpcAddr() string {
|
func (m *member) grpcAddr() string {
|
||||||
// prefix with localhost so cert has right domain
|
// prefix with localhost so cert has right domain
|
||||||
addr := "localhost:" + m.Name
|
host := "localhost"
|
||||||
if m.useIP { // for IP-only TLS certs
|
if m.useIP { // for IP-only TLS certs
|
||||||
addr = "127.0.0.1:" + m.Name
|
host = "127.0.0.1"
|
||||||
}
|
}
|
||||||
return addr
|
return fmt.Sprintf("%s:%d", host, baseGRPCPort + m.uniqNumber * 10 + m.memberNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
type dialer struct {
|
type dialer struct {
|
||||||
@ -1460,7 +1472,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)
|
m := c.mustNewMember(t, 0)
|
||||||
m.isLearner = true
|
m.isLearner = true
|
||||||
|
|
||||||
scheme := schemeFromTLSInfo(c.cfg.PeerTLS)
|
scheme := schemeFromTLSInfo(c.cfg.PeerTLS)
|
||||||
@ -1561,7 +1573,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)
|
m := c.mustNewMember(t,0)
|
||||||
m.isLearner = resp.Member.IsLearner
|
m.isLearner = resp.Member.IsLearner
|
||||||
m.NewCluster = false
|
m.NewCluster = false
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user