From a4d249e6a930b8b9aec7fa301574083b5ac2e696 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 13 Sep 2024 08:17:26 +0800 Subject: [PATCH 1/3] fix: TestMemberPromote Signed-off-by: Clement --- tests/framework/integration/cluster.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/framework/integration/cluster.go b/tests/framework/integration/cluster.go index 95b5c88d9f8..b2382801763 100644 --- a/tests/framework/integration/cluster.go +++ b/tests/framework/integration/cluster.go @@ -1693,5 +1693,30 @@ func (c *Cluster) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) } m.InitialPeerURLsMap[m.Name] = types.MustNewURLs(resp.Member.PeerURLs) c.Members = append(c.Members, m) + + // c.mustNewMember(t) creates a new member without using resp.Member.PeerURLs. + // We should override PeerURLs and PeerListeners set by mustNewMember. + urls := types.MustNewURLs(resp.Member.PeerURLs) + m.PeerURLs = urls + var listeners []net.Listener + for _, url := range urls { + var l net.Listener + var err error + switch url.Scheme { + case "http", "https": + l, err = net.Listen("tcp", url.Host) + case "unix", "unixs": + l, err = net.Listen("unix", url.Host) + default: + err = fmt.Errorf("unsupported scheme: %s", url.Scheme) + } + + if err != nil { + t.Fatal("failed to listen on %v: %v", url, err) + } + listeners = append(listeners, l) + } + m.PeerListeners = listeners + return m } From f496ee839634d57836ac7fbad9c07409da90d432 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 13 Sep 2024 21:08:35 +0800 Subject: [PATCH 2/3] reuse NewListener Signed-off-by: Clement --- tests/framework/integration/cluster.go | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/tests/framework/integration/cluster.go b/tests/framework/integration/cluster.go index b2382801763..6c8302ef756 100644 --- a/tests/framework/integration/cluster.go +++ b/tests/framework/integration/cluster.go @@ -1700,17 +1700,7 @@ func (c *Cluster) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) m.PeerURLs = urls var listeners []net.Listener for _, url := range urls { - var l net.Listener - var err error - switch url.Scheme { - case "http", "https": - l, err = net.Listen("tcp", url.Host) - case "unix", "unixs": - l, err = net.Listen("unix", url.Host) - default: - err = fmt.Errorf("unsupported scheme: %s", url.Scheme) - } - + l, err := transport.NewListener(url.Host, url.Scheme, nil) if err != nil { t.Fatal("failed to listen on %v: %v", url, err) } From d975a1e3613d82cbb14891f710c2d2fbd4843cac Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 13 Sep 2024 22:32:02 +0800 Subject: [PATCH 3/3] add tlsinfo arg to MustNewMember() function Signed-off-by: Clement --- tests/framework/integration/cluster.go | 5 +++-- tests/integration/clientv3/cluster_test.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/framework/integration/cluster.go b/tests/framework/integration/cluster.go index 6c8302ef756..5636f3f9b1d 100644 --- a/tests/framework/integration/cluster.go +++ b/tests/framework/integration/cluster.go @@ -1682,7 +1682,8 @@ func (p SortableProtoMemberSliceByPeerURLs) Less(i, j int) bool { func (p SortableProtoMemberSliceByPeerURLs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } // MustNewMember creates a new member instance based on the response of V3 Member Add API. -func (c *Cluster) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) *Member { +// Pass nil for tlsinfo if the member's PeerURLs don't use HTTPS. +func (c *Cluster) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse, tlsinfo *transport.TLSInfo) *Member { m := c.mustNewMember(t) m.IsLearner = resp.Member.IsLearner m.NewCluster = false @@ -1700,7 +1701,7 @@ func (c *Cluster) MustNewMember(t testutil.TB, resp *clientv3.MemberAddResponse) m.PeerURLs = urls var listeners []net.Listener for _, url := range urls { - l, err := transport.NewListener(url.Host, url.Scheme, nil) + l, err := transport.NewListener(url.Host, url.Scheme, tlsinfo) if err != nil { t.Fatal("failed to listen on %v: %v", url, err) } diff --git a/tests/integration/clientv3/cluster_test.go b/tests/integration/clientv3/cluster_test.go index 9ed510108b8..a44923a8766 100644 --- a/tests/integration/clientv3/cluster_test.go +++ b/tests/integration/clientv3/cluster_test.go @@ -264,7 +264,7 @@ func TestMemberPromote(t *testing.T) { // create and launch learner member based on the response of V3 Member Add API. // (the response has information on peer urls of the existing members in cluster) - learnerMember := clus.MustNewMember(t, memberAddResp) + learnerMember := clus.MustNewMember(t, memberAddResp, nil) if err = learnerMember.Launch(); err != nil { t.Fatal(err)