mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
test: enhance the test case TestV3WatchProgressOnMemberRestart
Signed-off-by: Benjamin Wang <wachao@vmware.com>
This commit is contained in:
parent
36fc3cae65
commit
87e271701b
@ -890,6 +890,7 @@ func TestV3WatchProgressOnMemberRestart(t *testing.T) {
|
||||
defer cancel()
|
||||
|
||||
errC := make(chan error, 1)
|
||||
watchReady := make(chan struct{}, 1)
|
||||
doneC := make(chan struct{}, 1)
|
||||
progressNotifyC := make(chan struct{}, 1)
|
||||
go func() {
|
||||
@ -901,13 +902,14 @@ func TestV3WatchProgressOnMemberRestart(t *testing.T) {
|
||||
)
|
||||
|
||||
wch := client.Watch(ctx, "foo", clientv3.WithProgressNotify())
|
||||
watchReady <- struct{}{}
|
||||
for wr := range wch {
|
||||
if wr.Err() != nil {
|
||||
errC <- fmt.Errorf("watch error: %w", wr.Err())
|
||||
return
|
||||
}
|
||||
|
||||
if wr.IsProgressNotify() {
|
||||
if len(wr.Events) == 0 {
|
||||
// We need to make sure at least one progress notification
|
||||
// is received after receiving the normal watch response
|
||||
// and before restarting the member.
|
||||
@ -934,21 +936,30 @@ func TestV3WatchProgressOnMemberRestart(t *testing.T) {
|
||||
}
|
||||
}()
|
||||
|
||||
// write the key before the member restarts
|
||||
t.Log("Writing key 'foo'")
|
||||
// waiting for the watcher ready
|
||||
t.Log("Waiting for the watcher to be ready.")
|
||||
<-watchReady
|
||||
time.Sleep(time.Second)
|
||||
|
||||
// write a K/V firstly
|
||||
t.Log("Writing key 'foo' firstly")
|
||||
_, err := client.Put(ctx, "foo", "bar1")
|
||||
require.NoError(t, err)
|
||||
|
||||
// make sure at least one progress notification is received
|
||||
// before restarting the member
|
||||
t.Log("Waiting for the progress notification")
|
||||
<-progressNotifyC
|
||||
select {
|
||||
case <-progressNotifyC:
|
||||
case <-time.After(5 * time.Second):
|
||||
t.Log("Do not receive the progress notification in 5 seconds, move forward anyway.")
|
||||
}
|
||||
|
||||
// restart the member
|
||||
t.Log("Restarting the member")
|
||||
clus.Members[0].Stop(t)
|
||||
clus.Members[0].Restart(t)
|
||||
clus.WaitMembersForLeader(t, clus.Members)
|
||||
clus.Members[0].WaitOK(t)
|
||||
|
||||
// write the same key again after the member restarted
|
||||
t.Log("Writing the same key 'foo' again after restarting the member")
|
||||
@ -961,7 +972,7 @@ func TestV3WatchProgressOnMemberRestart(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
case <-doneC:
|
||||
t.Log("Done")
|
||||
case <-time.After(10 * time.Second):
|
||||
case <-time.After(15 * time.Second):
|
||||
t.Fatal("Timed out waiting for the response")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user