server: rewrite keepSetting in TestMultiNodeKillOne

It avoids blocking http request.
This commit is contained in:
Yicheng Qin 2014-08-04 17:25:34 -07:00
parent b1426e2635
commit 434bf8ca81
2 changed files with 14 additions and 23 deletions

View File

@ -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) resp, err := tc.PutForm(fmt.Sprintf("%s/v2/keys/foo_%v", urlStr, i), value)
if err == nil {
result, err := c.Set(key, "bar", 0) tc.ReadBody(resp)
if err != nil || result.Node.Key != "/"+key || result.Node.Value != "bar" {
select {
case <-stop:
stopSet = true
default:
}
} }
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 {

View File

@ -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.