Browse Source

etcdserver: refactor non-blocking check for sync tests

to make it much more reliable and avoid false errors.
Yicheng Qin 11 years ago
parent
commit
4d40816a90
1 changed files with 18 additions and 8 deletions
  1. 18 8
      etcdserver/server_test.go

+ 18 - 8
etcdserver/server_test.go

@@ -678,12 +678,17 @@ func TestSync(t *testing.T) {
 	srv := &EtcdServer{
 	srv := &EtcdServer{
 		node: n,
 		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
 	// 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()
 	testutil.ForceGosched()
@@ -707,12 +712,17 @@ func TestSyncTimeout(t *testing.T) {
 	srv := &EtcdServer{
 	srv := &EtcdServer{
 		node: n,
 		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
 	// 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
 	// give time for goroutine in sync to cancel