@@ -17,32 +17,58 @@ func newTestRaft(t *testing.T, id string, fsm raft.FSM) (*raft.Raft, func()) {
1717 t .Helper ()
1818
1919 const n = 3
20+ addrs , trans := setupInmemTransports (id , n )
21+ connectInmemTransports (addrs , trans )
22+ cfg := buildRaftConfig (id , addrs )
23+ rafts := initTestRafts (t , cfg , trans , fsm )
24+ waitForLeader (t , id , rafts [0 ])
25+
26+ shutdown := func () {
27+ for _ , r := range rafts {
28+ r .Shutdown ()
29+ }
30+ }
31+ return rafts [0 ], shutdown
32+ }
33+
34+ func setupInmemTransports (id string , n int ) ([]raft.ServerAddress , []* raft.InmemTransport ) {
2035 addrs := make ([]raft.ServerAddress , n )
2136 trans := make ([]* raft.InmemTransport , n )
2237 for i := 0 ; i < n ; i ++ {
2338 addr , tr := raft .NewInmemTransport (raft .ServerAddress (fmt .Sprintf ("%s-%d" , id , i )))
2439 addrs [i ] = addr
2540 trans [i ] = tr
2641 }
42+ return addrs , trans
43+ }
44+
45+ func connectInmemTransports (addrs []raft.ServerAddress , trans []* raft.InmemTransport ) {
2746 // fully connect transports
28- for i := 0 ; i < n ; i ++ {
29- for j := i + 1 ; j < n ; j ++ {
47+ for i := 0 ; i < len ( trans ) ; i ++ {
48+ for j := i + 1 ; j < len ( trans ) ; j ++ {
3049 trans [i ].Connect (addrs [j ], trans [j ])
3150 trans [j ].Connect (addrs [i ], trans [i ])
3251 }
3352 }
53+ }
3454
55+ func buildRaftConfig (id string , addrs []raft.ServerAddress ) raft.Configuration {
3556 // cluster configuration
3657 cfg := raft.Configuration {}
37- for i := 0 ; i < n ; i ++ {
58+ for i := 0 ; i < len ( addrs ) ; i ++ {
3859 cfg .Servers = append (cfg .Servers , raft.Server {
3960 ID : raft .ServerID (fmt .Sprintf ("%s-%d" , id , i )),
4061 Address : addrs [i ],
4162 })
4263 }
64+ return cfg
65+ }
4366
44- rafts := make ([]* raft.Raft , n )
45- for i := 0 ; i < n ; i ++ {
67+ func initTestRafts (t * testing.T , cfg raft.Configuration , trans []* raft.InmemTransport , fsm raft.FSM ) []* raft.Raft {
68+ t .Helper ()
69+
70+ rafts := make ([]* raft.Raft , len (trans ))
71+ for i := 0 ; i < len (trans ); i ++ {
4672 c := raft .DefaultConfig ()
4773 c .LocalID = cfg .Servers [i ].ID
4874 if i == 0 {
@@ -73,23 +99,22 @@ func newTestRaft(t *testing.T, id string, fsm raft.FSM) (*raft.Raft, func()) {
7399 rafts [i ] = r
74100 }
75101
76- // node 0 should become leader
102+ return rafts
103+ }
104+
105+ func waitForLeader (t * testing.T , id string , leader * raft.Raft ) {
106+ t .Helper ()
107+
108+ // node 0 should become leader quickly during tests
77109 for i := 0 ; i < 100 ; i ++ {
78- if rafts [ 0 ] .State () == raft .Leader {
110+ if leader .State () == raft .Leader {
79111 break
80112 }
81113 time .Sleep (50 * time .Millisecond )
82114 }
83- if rafts [ 0 ] .State () != raft .Leader {
115+ if leader .State () != raft .Leader {
84116 t .Fatalf ("node %s-0 is not leader" , id )
85117 }
86-
87- shutdown := func () {
88- for _ , r := range rafts {
89- r .Shutdown ()
90- }
91- }
92- return rafts [0 ], shutdown
93118}
94119
95120func TestShardRouterCommit (t * testing.T ) {
0 commit comments