11package adapter
22
33import (
4+ "context"
5+ "log"
46 "net"
57 "strconv"
68 "sync"
@@ -26,6 +28,14 @@ func shutdown(nodes []Node) {
2628 for _ , n := range nodes {
2729 n .grpcServer .Stop ()
2830 n .redisServer .Stop ()
31+ if n .raft != nil {
32+ n .raft .Shutdown ()
33+ }
34+ if n .tm != nil {
35+ if err := n .tm .Close (); err != nil {
36+ log .Printf ("transport close: %v" , err )
37+ }
38+ }
2939 }
3040}
3141
@@ -80,15 +90,19 @@ type Node struct {
8090 redisAddress string
8191 grpcServer * grpc.Server
8292 redisServer * RedisServer
93+ raft * raft.Raft
94+ tm * transport.Manager
8395}
8496
85- func newNode (grpcAddress , raftAddress , redisAddress string , grpcs * grpc.Server , rd * RedisServer ) Node {
97+ func newNode (grpcAddress , raftAddress , redisAddress string , r * raft. Raft , tm * transport. Manager , grpcs * grpc.Server , rd * RedisServer ) Node {
8698 return Node {
8799 grpcAddress : grpcAddress ,
88100 raftAddress : raftAddress ,
89101 redisAddress : redisAddress ,
90102 grpcServer : grpcs ,
91103 redisServer : rd ,
104+ raft : r ,
105+ tm : tm ,
92106 }
93107}
94108
@@ -98,9 +112,17 @@ func createNode(t *testing.T, n int) ([]Node, []string, []string) {
98112 var redisAdders []string
99113 var nodes []Node
100114
115+ const (
116+ waitTimeout = 5 * time .Second
117+ waitInterval = 100 * time .Millisecond
118+ )
119+
101120 cfg := raft.Configuration {}
102121 ports := make ([]portsAdress , n )
103122
123+ ctx := context .Background ()
124+ var lc net.ListenConfig
125+
104126 // port assign
105127 for i := 0 ; i < n ; i ++ {
106128 ports [i ] = portAssigner ()
@@ -145,7 +167,7 @@ func createNode(t *testing.T, n int) ([]Node, []string, []string) {
145167 leaderhealth .Setup (r , s , []string {"Example" })
146168 raftadmin .Register (s , r )
147169
148- grpcSock , err := net .Listen ("tcp" , port .grpcAddress )
170+ grpcSock , err := lc .Listen (ctx , "tcp" , port .grpcAddress )
149171 assert .NoError (t , err )
150172
151173 grpcAdders = append (grpcAdders , port .grpcAddress )
@@ -154,7 +176,7 @@ func createNode(t *testing.T, n int) ([]Node, []string, []string) {
154176 assert .NoError (t , s .Serve (grpcSock ))
155177 }()
156178
157- l , err := net .Listen ("tcp" , port .redisAddress )
179+ l , err := lc .Listen (ctx , "tcp" , port .redisAddress )
158180 assert .NoError (t , err )
159181 rd := NewRedisServer (l , st , coordinator )
160182 go func () {
@@ -165,14 +187,34 @@ func createNode(t *testing.T, n int) ([]Node, []string, []string) {
165187 port .grpcAddress ,
166188 port .raftAddress ,
167189 port .redisAddress ,
190+ r ,
191+ tm ,
168192 s ,
169- rd ) ,
170- )
193+ rd ,
194+ ))
171195
172196 }
173197
174- //nolint:mnd
175- time .Sleep (10 * time .Second )
198+ d := & net.Dialer {Timeout : time .Second }
199+ for _ , n := range nodes {
200+ assert .Eventually (t , func () bool {
201+ conn , err := d .DialContext (ctx , "tcp" , n .grpcAddress )
202+ if err != nil {
203+ return false
204+ }
205+ _ = conn .Close ()
206+ conn , err = d .DialContext (ctx , "tcp" , n .redisAddress )
207+ if err != nil {
208+ return false
209+ }
210+ _ = conn .Close ()
211+ return true
212+ }, waitTimeout , waitInterval )
213+ }
214+
215+ assert .Eventually (t , func () bool {
216+ return nodes [0 ].raft .State () == raft .Leader
217+ }, waitTimeout , waitInterval )
176218
177219 return nodes , grpcAdders , redisAdders
178220}
0 commit comments