瀏覽代碼

Merge pull request #25794 from chenchun/timeout

Add default timeout to pkg/plugins/client
Anusha Ragunathan 8 年之前
父節點
當前提交
a4d1365bce
共有 2 個文件被更改,包括 24 次插入1 次删除
  1. 3 1
      pkg/plugins/client.go
  2. 21 0
      pkg/plugins/client_test.go

+ 3 - 1
pkg/plugins/client.go

@@ -16,7 +16,8 @@ import (
 )
 
 const (
-	defaultTimeOut = 30
+	defaultTimeOut     = 30
+	defaultHTTPTimeOut = 32 * time.Second
 )
 
 // NewClient creates a new plugin client (http).
@@ -53,6 +54,7 @@ func NewClient(addr string, tlsConfig *tlsconfig.Options) (*Client, error) {
 func NewClientWithTransport(tr transport.Transport) *Client {
 	return &Client{
 		http: &http.Client{
+			Timeout:   defaultHTTPTimeOut,
 			Transport: tr,
 		},
 		requestFactory: tr,

+ 21 - 0
pkg/plugins/client_test.go

@@ -6,6 +6,7 @@ import (
 	"net/http/httptest"
 	"net/url"
 	"reflect"
+	"strings"
 	"testing"
 	"time"
 
@@ -30,6 +31,26 @@ func teardownRemotePluginServer() {
 	}
 }
 
+func TestHttpTimeout(t *testing.T) {
+	addr := setupRemotePluginServer()
+	defer teardownRemotePluginServer()
+	stop := false // we need this variable to stop the http server
+	mux.HandleFunc("/hang", func(w http.ResponseWriter, r *http.Request) {
+		for {
+			if stop {
+				break
+			}
+			time.Sleep(5 * time.Second)
+		}
+	})
+	c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true})
+	_, err := c.callWithRetry("hang", nil, false)
+	stop = true
+	if err == nil || !strings.Contains(err.Error(), "request canceled") {
+		t.Fatalf("The request should be canceled %v", err)
+	}
+}
+
 func TestFailedConnection(t *testing.T) {
 	c, _ := NewClient("tcp://127.0.0.1:1", &tlsconfig.Options{InsecureSkipVerify: true})
 	_, err := c.callWithRetry("Service.Method", nil, false)