From d814e9dc3571e27ab305859ce46fc8b08468c0e0 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Thu, 21 Apr 2016 20:47:42 -0700 Subject: [PATCH] integration: wait for ReadyNotify in Issue3699 test Fixes #5147 --- integration/cluster.go | 2 +- integration/cluster_test.go | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/integration/cluster.go b/integration/cluster.go index 4798aeb70..aa9855bc1 100644 --- a/integration/cluster.go +++ b/integration/cluster.go @@ -329,11 +329,11 @@ func (c *cluster) waitLeader(t *testing.T, membs []*member) int { } if lead != 0 && lead != m.s.Lead() { lead = 0 + time.Sleep(10 * tickDuration) break } lead = m.s.Lead() } - time.Sleep(10 * tickDuration) } for i, m := range membs { diff --git a/integration/cluster_test.go b/integration/cluster_test.go index 4d7e9e033..69f9d426c 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -21,6 +21,7 @@ import ( "os" "strconv" "testing" + "time" "github.com/coreos/etcd/client" "github.com/coreos/etcd/pkg/testutil" @@ -301,7 +302,6 @@ func TestIssue3699(t *testing.T) { // make node a unavailable c.Members[0].Stop(t) - <-c.Members[0].s.StopNotify() // add node d c.AddMember(t) @@ -317,11 +317,16 @@ func TestIssue3699(t *testing.T) { // bring back node a // node a will remain useless as long as d is the leader. - err := c.Members[0].Restart(t) + if err := c.Members[0].Restart(t); err != nil { + t.Fatal(err) + } select { + // waiting for ReadyNotify can take several seconds + case <-time.After(10 * time.Second): + t.Fatalf("waited too long for ready notification") case <-c.Members[0].s.StopNotify(): t.Fatalf("should not be stopped") - default: + case <-c.Members[0].s.ReadyNotify(): } // must waitLeader so goroutines don't leak on terminate c.waitLeader(t, c.Members) @@ -330,11 +335,10 @@ func TestIssue3699(t *testing.T) { cc := mustNewHTTPClient(t, []string{c.URL(0)}, c.cfg.ClientTLS) kapi := client.NewKeysAPI(cc) ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) - _, err = kapi.Set(ctx, "/foo", "bar", nil) - cancel() - if err != nil { + if _, err := kapi.Set(ctx, "/foo", "bar", nil); err != nil { t.Fatalf("unexpected error on Set (%v)", err) } + cancel() } // clusterMustProgress ensures that cluster can make progress. It creates