Browse Source

server: rewrite keepSetting in TestMultiNodeKillOne

It avoids blocking http request.
Yicheng Qin 11 years ago
parent
commit
434bf8ca81
2 changed files with 14 additions and 23 deletions
  1. 8 22
      etcd/etcd_functional_test.go
  2. 6 1
      etcd/v2_http_kv_test.go

+ 8 - 22
etcd/etcd_functional_test.go

@@ -20,6 +20,7 @@ import (
 	"fmt"
 	"fmt"
 	"math/rand"
 	"math/rand"
 	"net/http/httptest"
 	"net/http/httptest"
+	"net/url"
 	"reflect"
 	"reflect"
 	"testing"
 	"testing"
 	"time"
 	"time"
@@ -339,37 +340,22 @@ func TestModeSwitch(t *testing.T) {
 
 
 // Sending set commands
 // Sending set commands
 func keepSetting(urlStr string, stop chan bool) {
 func keepSetting(urlStr string, stop chan bool) {
-	stopSet := false
+	tc := NewTestClient()
 	i := 0
 	i := 0
-	c := etcd.NewClient([]string{urlStr})
+	value := url.Values(map[string][]string{"value": {"bar"}})
 	for {
 	for {
-		key := fmt.Sprintf("%s_%v", "foo", i)
-
-		result, err := c.Set(key, "bar", 0)
-
-		if err != nil || result.Node.Key != "/"+key || result.Node.Value != "bar" {
-			select {
-			case <-stop:
-				stopSet = true
-
-			default:
-			}
+		resp, err := tc.PutForm(fmt.Sprintf("%s/v2/keys/foo_%v", urlStr, i), value)
+		if err == nil {
+			tc.ReadBody(resp)
 		}
 		}
-
 		select {
 		select {
 		case <-stop:
 		case <-stop:
-			stopSet = true
-
+			stop <- true
+			return
 		default:
 		default:
 		}
 		}
-
-		if stopSet {
-			break
-		}
-
 		i++
 		i++
 	}
 	}
-	stop <- true
 }
 }
 
 
 type leadterm struct {
 type leadterm struct {

+ 6 - 1
etcd/v2_http_kv_test.go

@@ -21,6 +21,7 @@ import (
 	"fmt"
 	"fmt"
 	"io"
 	"io"
 	"io/ioutil"
 	"io/ioutil"
+	"net"
 	"net/http"
 	"net/http"
 	"net/url"
 	"net/url"
 	"reflect"
 	"reflect"
@@ -981,7 +982,11 @@ type testHttpClient struct {
 
 
 // Creates a new HTTP client with KeepAlive disabled.
 // Creates a new HTTP client with KeepAlive disabled.
 func NewTestClient() *testHttpClient {
 func NewTestClient() *testHttpClient {
-	return &testHttpClient{&http.Client{Transport: &http.Transport{DisableKeepAlives: true}}}
+	tr := &http.Transport{
+		Dial:              (&net.Dialer{Timeout: time.Second}).Dial,
+		DisableKeepAlives: true,
+	}
+	return &testHttpClient{&http.Client{Transport: tr}}
 }
 }
 
 
 // Reads the body from the response and closes it.
 // Reads the body from the response and closes it.