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"
"math/rand"
"net/http/httptest"
"net/url"
"reflect"
"testing"
"time"
@ -339,37 +340,22 @@ func TestModeSwitch(t *testing.T) {
// Sending set commands
func keepSetting(urlStr string, stop chan bool) {
stopSet := false
tc := NewTestClient()
i := 0
c := etcd.NewClient([]string{urlStr})
value := url.Values(map[string][]string{"value": {"bar"}})
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 {
case <-stop:
stopSet = true
stop <- true
return
default:
}
if stopSet {
break
}
i++
}
stop <- true
}
type leadterm struct {

View File

@ -21,6 +21,7 @@ import (
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
"net/url"
"reflect"
@ -981,7 +982,11 @@ type testHttpClient struct {
// Creates a new HTTP client with KeepAlive disabled.
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.