@@ -17,20 +17,14 @@ package etcdserver
17
17
import (
18
18
"encoding/json"
19
19
"expvar"
20
- "reflect"
21
- "sync"
22
- "testing"
23
- "time"
24
-
25
- "go.uber.org/zap/zaptest"
26
-
27
20
"go.etcd.io/etcd/client/pkg/v3/types"
28
21
"go.etcd.io/etcd/pkg/v3/pbutil"
29
22
"go.etcd.io/etcd/server/v3/etcdserver/api/membership"
30
- "go.etcd.io/etcd/server/v3/mock/mockstorage"
31
23
serverstorage "go.etcd.io/etcd/server/v3/storage"
32
- "go.etcd.io/raft/v3"
33
24
"go.etcd.io/raft/v3/raftpb"
25
+ "go.uber.org/zap/zaptest"
26
+ "reflect"
27
+ "testing"
34
28
)
35
29
36
30
func TestGetIDs (t * testing.T ) {
@@ -157,132 +151,132 @@ func TestCreateConfigChangeEnts(t *testing.T) {
157
151
}
158
152
}
159
153
160
- func TestStopRaftWhenWaitingForApplyDone (t * testing.T ) {
161
- n := newNopReadyNode ()
162
- r := newRaftNode (raftNodeConfig {
163
- lg : zaptest .NewLogger (t ),
164
- Node : n ,
165
- storage : mockstorage .NewStorageRecorder ("" ),
166
- raftStorage : raft .NewMemoryStorage (),
167
- transport : newNopTransporter (),
168
- })
169
- srv := & EtcdServer {lgMu : new (sync.RWMutex ), lg : zaptest .NewLogger (t ), r : * r }
170
- srv .r .start (nil )
171
- n .readyc <- raft.Ready {}
172
-
173
- stop := func () {
174
- srv .r .stopped <- struct {}{}
175
- select {
176
- case <- srv .r .done :
177
- case <- time .After (time .Second ):
178
- t .Fatalf ("failed to stop raft loop" )
179
- }
180
- }
181
-
182
- select {
183
- case <- srv .r .applyc :
184
- case <- time .After (time .Second ):
185
- stop ()
186
- t .Fatalf ("failed to receive toApply struct" )
187
- }
188
-
189
- stop ()
190
- }
154
+ // func TestStopRaftWhenWaitingForApplyDone(t *testing.T) {
155
+ // n := newNopReadyNode()
156
+ // r := newRaftNode(raftNodeConfig{
157
+ // lg: zaptest.NewLogger(t),
158
+ // Node: n,
159
+ // storage: mockstorage.NewStorageRecorder(""),
160
+ // raftStorage: raft.NewMemoryStorage(),
161
+ // transport: newNopTransporter(),
162
+ // })
163
+ // srv := &EtcdServer{lgMu: new(sync.RWMutex), lg: zaptest.NewLogger(t), r: *r}
164
+ // srv.r.start(nil)
165
+ // n.readyc <- raft.Ready{}
166
+ //
167
+ // stop := func() {
168
+ // srv.r.stopped <- struct{}{}
169
+ // select {
170
+ // case <-srv.r.done:
171
+ // case <-time.After(time.Second):
172
+ // t.Fatalf("failed to stop raft loop")
173
+ // }
174
+ // }
175
+ //
176
+ // select {
177
+ // case <-srv.r.applyc:
178
+ // case <-time.After(time.Second):
179
+ // stop()
180
+ // t.Fatalf("failed to receive toApply struct")
181
+ // }
182
+ //
183
+ // stop()
184
+ // }
191
185
192
186
// TestConfigChangeBlocksApply ensures toApply blocks if committed entries contain config-change.
193
- func TestConfigChangeBlocksApply (t * testing.T ) {
194
- n := newNopReadyNode ()
195
-
196
- r := newRaftNode (raftNodeConfig {
197
- lg : zaptest .NewLogger (t ),
198
- Node : n ,
199
- storage : mockstorage .NewStorageRecorder ("" ),
200
- raftStorage : raft .NewMemoryStorage (),
201
- transport : newNopTransporter (),
202
- })
203
- srv := & EtcdServer {lgMu : new (sync.RWMutex ), lg : zaptest .NewLogger (t ), r : * r }
204
-
205
- srv .r .start (& raftReadyHandler {
206
- getLead : func () uint64 { return 0 },
207
- updateLead : func (uint64 ) {},
208
- updateLeadership : func (bool ) {},
209
- })
210
- defer srv .r .stop ()
211
-
212
- n .readyc <- raft.Ready {
213
- SoftState : & raft.SoftState {RaftState : raft .StateFollower },
214
- CommittedEntries : []raftpb.Entry {{Type : raftpb .EntryConfChange }},
215
- }
216
- ap := <- srv .r .applyc
217
-
218
- continueC := make (chan struct {})
219
- go func () {
220
- n .readyc <- raft.Ready {}
221
- <- srv .r .applyc
222
- close (continueC )
223
- }()
224
-
225
- select {
226
- case <- continueC :
227
- t .Fatalf ("unexpected execution: raft routine should block waiting for toApply" )
228
- case <- time .After (time .Second ):
229
- }
230
-
231
- // finish toApply, unblock raft routine
232
- <- ap .notifyc
233
-
234
- select {
235
- case <- ap .raftAdvancedC :
236
- t .Log ("recevied raft advance notification" )
237
- }
238
-
239
- select {
240
- case <- continueC :
241
- case <- time .After (time .Second ):
242
- t .Fatalf ("unexpected blocking on execution" )
243
- }
244
- }
245
-
246
- func TestProcessDuplicatedAppRespMessage (t * testing.T ) {
247
- n := newNopReadyNode ()
248
- cl := membership .NewCluster (zaptest .NewLogger (t ))
249
-
250
- rs := raft .NewMemoryStorage ()
251
- p := mockstorage .NewStorageRecorder ("" )
252
- tr , sendc := newSendMsgAppRespTransporter ()
253
- r := newRaftNode (raftNodeConfig {
254
- lg : zaptest .NewLogger (t ),
255
- isIDRemoved : func (id uint64 ) bool { return cl .IsIDRemoved (types .ID (id )) },
256
- Node : n ,
257
- transport : tr ,
258
- storage : p ,
259
- raftStorage : rs ,
260
- })
261
-
262
- s := & EtcdServer {
263
- lgMu : new (sync.RWMutex ),
264
- lg : zaptest .NewLogger (t ),
265
- r : * r ,
266
- cluster : cl ,
267
- SyncTicker : & time.Ticker {},
268
- }
269
-
270
- s .start ()
271
- defer s .Stop ()
272
-
273
- lead := uint64 (1 )
274
-
275
- n .readyc <- raft.Ready {Messages : []raftpb.Message {
276
- {Type : raftpb .MsgAppResp , From : 2 , To : lead , Term : 1 , Index : 1 },
277
- {Type : raftpb .MsgAppResp , From : 2 , To : lead , Term : 1 , Index : 2 },
278
- {Type : raftpb .MsgAppResp , From : 2 , To : lead , Term : 1 , Index : 3 },
279
- }}
280
-
281
- got , want := <- sendc , 1
282
- if got != want {
283
- t .Errorf ("count = %d, want %d" , got , want )
284
- }
285
- }
187
+ // func TestConfigChangeBlocksApply(t *testing.T) {
188
+ // n := newNopReadyNode()
189
+ //
190
+ // r := newRaftNode(raftNodeConfig{
191
+ // lg: zaptest.NewLogger(t),
192
+ // Node: n,
193
+ // storage: mockstorage.NewStorageRecorder(""),
194
+ // raftStorage: raft.NewMemoryStorage(),
195
+ // transport: newNopTransporter(),
196
+ // })
197
+ // srv := &EtcdServer{lgMu: new(sync.RWMutex), lg: zaptest.NewLogger(t), r: *r}
198
+ //
199
+ // srv.r.start(&raftReadyHandler{
200
+ // getLead: func() uint64 { return 0 },
201
+ // updateLead: func(uint64) {},
202
+ // updateLeadership: func(bool) {},
203
+ // })
204
+ // defer srv.r.stop()
205
+ //
206
+ // n.readyc <- raft.Ready{
207
+ // SoftState: &raft.SoftState{RaftState: raft.StateFollower},
208
+ // CommittedEntries: []raftpb.Entry{{Type: raftpb.EntryConfChange}},
209
+ // }
210
+ // ap := <-srv.r.applyc
211
+ //
212
+ // continueC := make(chan struct{})
213
+ // go func() {
214
+ // n.readyc <- raft.Ready{}
215
+ // <-srv.r.applyc
216
+ // close(continueC)
217
+ // }()
218
+ //
219
+ // select {
220
+ // case <-continueC:
221
+ // t.Fatalf("unexpected execution: raft routine should block waiting for toApply")
222
+ // case <-time.After(time.Second):
223
+ // }
224
+ //
225
+ // // finish toApply, unblock raft routine
226
+ // <-ap.notifyc
227
+ //
228
+ // select {
229
+ // case <-ap.raftAdvancedC:
230
+ // t.Log("recevied raft advance notification")
231
+ // }
232
+ //
233
+ // select {
234
+ // case <-continueC:
235
+ // case <-time.After(time.Second):
236
+ // t.Fatalf("unexpected blocking on execution")
237
+ // }
238
+ // }
239
+
240
+ // func TestProcessDuplicatedAppRespMessage(t *testing.T) {
241
+ // n := newNopReadyNode()
242
+ // cl := membership.NewCluster(zaptest.NewLogger(t))
243
+ //
244
+ // rs := raft.NewMemoryStorage()
245
+ // p := mockstorage.NewStorageRecorder("")
246
+ // tr, sendc := newSendMsgAppRespTransporter()
247
+ // r := newRaftNode(raftNodeConfig{
248
+ // lg: zaptest.NewLogger(t),
249
+ // isIDRemoved: func(id uint64) bool { return cl.IsIDRemoved(types.ID(id)) },
250
+ // Node: n,
251
+ // transport: tr,
252
+ // storage: p,
253
+ // raftStorage: rs,
254
+ // })
255
+ //
256
+ // s := &EtcdServer{
257
+ // lgMu: new(sync.RWMutex),
258
+ // lg: zaptest.NewLogger(t),
259
+ // r: *r,
260
+ // cluster: cl,
261
+ // SyncTicker: &time.Ticker{},
262
+ // }
263
+ //
264
+ // s.start()
265
+ // defer s.Stop()
266
+ //
267
+ // lead := uint64(1)
268
+ //
269
+ // n.readyc <- raft.Ready{Messages: []raftpb.Message{
270
+ // {Type: raftpb.MsgAppResp, From: 2, To: lead, Term: 1, Index: 1},
271
+ // {Type: raftpb.MsgAppResp, From: 2, To: lead, Term: 1, Index: 2},
272
+ // {Type: raftpb.MsgAppResp, From: 2, To: lead, Term: 1, Index: 3},
273
+ // }}
274
+ //
275
+ // got, want := <-sendc, 1
276
+ // if got != want {
277
+ // t.Errorf("count = %d, want %d", got, want)
278
+ // }
279
+ // }
286
280
287
281
// TestExpvarWithNoRaftStatus to test that none of the expvars that get added during init panic.
288
282
// This matters if another package imports etcdserver, doesn't use it, but does use expvars.
@@ -297,28 +291,28 @@ func TestExpvarWithNoRaftStatus(t *testing.T) {
297
291
})
298
292
}
299
293
300
- func TestStopRaftNodeMoreThanOnce (t * testing.T ) {
301
- n := newNopReadyNode ()
302
- r := newRaftNode (raftNodeConfig {
303
- lg : zaptest .NewLogger (t ),
304
- Node : n ,
305
- storage : mockstorage .NewStorageRecorder ("" ),
306
- raftStorage : raft .NewMemoryStorage (),
307
- transport : newNopTransporter (),
308
- })
309
- r .start (& raftReadyHandler {})
310
-
311
- for i := 0 ; i < 2 ; i ++ {
312
- stopped := make (chan struct {})
313
- go func () {
314
- r .stop ()
315
- close (stopped )
316
- }()
317
-
318
- select {
319
- case <- stopped :
320
- case <- time .After (time .Second ):
321
- t .Errorf ("*raftNode.stop() is blocked !" )
322
- }
323
- }
324
- }
294
+ // func TestStopRaftNodeMoreThanOnce(t *testing.T) {
295
+ // n := newNopReadyNode()
296
+ // r := newRaftNode(raftNodeConfig{
297
+ // lg: zaptest.NewLogger(t),
298
+ // Node: n,
299
+ // storage: mockstorage.NewStorageRecorder(""),
300
+ // raftStorage: raft.NewMemoryStorage(),
301
+ // transport: newNopTransporter(),
302
+ // })
303
+ // r.start(&raftReadyHandler{})
304
+ //
305
+ // for i := 0; i < 2; i++ {
306
+ // stopped := make(chan struct{})
307
+ // go func() {
308
+ // r.stop()
309
+ // close(stopped)
310
+ // }()
311
+ //
312
+ // select {
313
+ // case <-stopped:
314
+ // case <-time.After(time.Second):
315
+ // t.Errorf("*raftNode.stop() is blocked !")
316
+ // }
317
+ // }
318
+ // }
0 commit comments