@@ -6,14 +6,13 @@ import (
6
6
"time"
7
7
8
8
"github.com/stretchr/testify/require"
9
+ "github.com/wind-c/comqtt/v2/cluster/discovery/mlist"
9
10
"github.com/wind-c/comqtt/v2/cluster/log"
10
11
"github.com/wind-c/comqtt/v2/cluster/utils"
11
12
"github.com/wind-c/comqtt/v2/config"
12
13
)
13
14
14
- func TestCluster (t * testing.T ) {
15
- log .Init (log .DefaultOptions ())
16
-
15
+ func TestCluster_Hashicorp_Serf (t * testing.T ) {
17
16
bindPort1 , err := utils .GetFreePort ()
18
17
require .NoError (t , err , "Failed to get free port for node1" )
19
18
raftPort1 , err := utils .GetFreePort ()
@@ -48,10 +47,6 @@ func TestCluster(t *testing.T) {
48
47
DiscoveryWay : config .DiscoveryWaySerf ,
49
48
NodesFileDir : t .TempDir (),
50
49
}
51
- agent1 := NewAgent (conf1 )
52
- err = agent1 .Start ()
53
- require .NoError (t , err , "Agent start failed for node: %s" , conf1 .NodeName )
54
-
55
50
conf2 := & config.Cluster {
56
51
NodeName : "node2" ,
57
52
RaftImpl : config .RaftImplHashicorp ,
@@ -65,11 +60,6 @@ func TestCluster(t *testing.T) {
65
60
DiscoveryWay : config .DiscoveryWaySerf ,
66
61
NodesFileDir : t .TempDir (),
67
62
}
68
- agent2 := NewAgent (conf2 )
69
- err = agent2 .Start ()
70
- defer agent2 .Stop ()
71
- require .NoError (t , err , "Agent start failed for node: %s" , conf2 .NodeName )
72
-
73
63
conf3 := & config.Cluster {
74
64
NodeName : "node3" ,
75
65
RaftImpl : config .RaftImplHashicorp ,
@@ -83,6 +73,79 @@ func TestCluster(t *testing.T) {
83
73
DiscoveryWay : config .DiscoveryWaySerf ,
84
74
NodesFileDir : t .TempDir (),
85
75
}
76
+ testCluster (t , conf1 , conf2 , conf3 )
77
+ }
78
+
79
+ func TestCluster_Hashicorp_Memberlist (t * testing.T ) {
80
+ bindPort1 , err := utils .GetFreePort ()
81
+ require .NoError (t , err , "Failed to get free port for node1" )
82
+
83
+ bindPort2 , err := utils .GetFreePort ()
84
+ require .NoError (t , err , "Failed to get free port for node2" )
85
+
86
+ bindPort3 , err := utils .GetFreePort ()
87
+ require .NoError (t , err , "Failed to get free port for node3" )
88
+
89
+ members := []string {
90
+ "127.0.0.1:" + strconv .Itoa (bindPort1 ),
91
+ "127.0.0.1:" + strconv .Itoa (bindPort2 ),
92
+ "127.0.0.1:" + strconv .Itoa (bindPort3 ),
93
+ }
94
+
95
+ conf1 := & config.Cluster {
96
+ NodeName : "node1" ,
97
+ RaftImpl : config .RaftImplHashicorp ,
98
+ BindAddr : "127.0.0.1" ,
99
+ BindPort : bindPort1 ,
100
+ RaftPort : mlist .GetRaftPortFromBindPort (bindPort1 ),
101
+ RaftBootstrap : true ,
102
+ RaftDir : t .TempDir (),
103
+ GrpcEnable : false ,
104
+ Members : members ,
105
+ DiscoveryWay : config .DiscoveryWayMemberlist ,
106
+ NodesFileDir : t .TempDir (),
107
+ }
108
+ conf2 := & config.Cluster {
109
+ NodeName : "node2" ,
110
+ RaftImpl : config .RaftImplHashicorp ,
111
+ BindAddr : "127.0.0.1" ,
112
+ BindPort : bindPort2 ,
113
+ RaftPort : mlist .GetRaftPortFromBindPort (bindPort2 ),
114
+ RaftBootstrap : false ,
115
+ RaftDir : t .TempDir (),
116
+ GrpcEnable : false ,
117
+ Members : members ,
118
+ DiscoveryWay : config .DiscoveryWayMemberlist ,
119
+ NodesFileDir : t .TempDir (),
120
+ }
121
+ conf3 := & config.Cluster {
122
+ NodeName : "node3" ,
123
+ RaftImpl : config .RaftImplHashicorp ,
124
+ BindAddr : "127.0.0.1" ,
125
+ BindPort : bindPort3 ,
126
+ RaftPort : mlist .GetRaftPortFromBindPort (bindPort3 ),
127
+ RaftBootstrap : false ,
128
+ RaftDir : t .TempDir (),
129
+ GrpcEnable : false ,
130
+ Members : members ,
131
+ DiscoveryWay : config .DiscoveryWayMemberlist ,
132
+ NodesFileDir : t .TempDir (),
133
+ }
134
+ testCluster (t , conf1 , conf2 , conf3 )
135
+ }
136
+
137
+ func testCluster (t * testing.T , conf1 * config.Cluster , conf2 * config.Cluster , conf3 * config.Cluster ) {
138
+ log .Init (log .DefaultOptions ())
139
+
140
+ agent1 := NewAgent (conf1 )
141
+ err := agent1 .Start ()
142
+ require .NoError (t , err , "Agent start failed for node: %s" , conf1 .NodeName )
143
+
144
+ agent2 := NewAgent (conf2 )
145
+ err = agent2 .Start ()
146
+ defer agent2 .Stop ()
147
+ require .NoError (t , err , "Agent start failed for node: %s" , conf2 .NodeName )
148
+
86
149
agent3 := NewAgent (conf3 )
87
150
err = agent3 .Start ()
88
151
defer agent3 .Stop ()
@@ -121,13 +184,14 @@ func TestCluster(t *testing.T) {
121
184
}
122
185
123
186
// Restart agent1 and verify it is a follower
124
- err = agent1 .Start ()
187
+ restartedAgent1 := NewAgent (conf1 )
188
+ err = restartedAgent1 .Start ()
125
189
require .NoError (t , err , "Agent restart failed for node: %s" , conf1 .NodeName )
126
- defer agent1 .Stop ()
190
+ defer restartedAgent1 .Stop ()
127
191
128
192
time .Sleep (5 * time .Second )
129
193
130
- _ , leaderAfterRestart1 := agent1 .raftPeer .GetLeader ()
194
+ _ , leaderAfterRestart1 := restartedAgent1 .raftPeer .GetLeader ()
131
195
_ , leaderAfterRestart2 := agent2 .raftPeer .GetLeader ()
132
196
_ , leaderAfterRestart3 := agent3 .raftPeer .GetLeader ()
133
197
0 commit comments