From 4d40816a90db91fb5ce01cfea40d5c6fc5797582 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Tue, 4 Nov 2014 13:07:44 -0800 Subject: [PATCH] etcdserver: refactor non-blocking check for sync tests to make it much more reliable and avoid false errors. --- etcdserver/server_test.go | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/etcdserver/server_test.go b/etcdserver/server_test.go index 6693d4f4e..bc277cfb2 100644 --- a/etcdserver/server_test.go +++ b/etcdserver/server_test.go @@ -678,12 +678,17 @@ func TestSync(t *testing.T) { srv := &EtcdServer{ node: n, } - start := time.Now() - srv.sync(defaultSyncTimeout) + done := make(chan struct{}) + go func() { + srv.sync(10 * time.Second) + close(done) + }() // check that sync is non-blocking - if d := time.Since(start); d > time.Millisecond { - t.Errorf("CallSyncTime = %v, want < %v", d, time.Millisecond) + select { + case <-done: + case <-time.After(time.Second): + t.Fatalf("sync should be non-blocking but did not return after 1s!") } testutil.ForceGosched() @@ -707,12 +712,17 @@ func TestSyncTimeout(t *testing.T) { srv := &EtcdServer{ node: n, } - start := time.Now() - srv.sync(0) + done := make(chan struct{}) + go func() { + srv.sync(0) + close(done) + }() // check that sync is non-blocking - if d := time.Since(start); d > time.Millisecond { - t.Errorf("CallSyncTime = %v, want < %v", d, time.Millisecond) + select { + case <-done: + case <-time.After(time.Second): + t.Fatalf("sync should be non-blocking but did not return after 1s!") } // give time for goroutine in sync to cancel