diff --git a/pkg/plugins/client.go b/pkg/plugins/client.go index e8e730eb58..84103c7ae7 100644 --- a/pkg/plugins/client.go +++ b/pkg/plugins/client.go @@ -129,15 +129,15 @@ func (c *Client) SendFile(serviceMethod string, data io.Reader, ret interface{}) } func (c *Client) callWithRetry(serviceMethod string, data io.Reader, retry bool) (io.ReadCloser, error) { - req, err := c.requestFactory.NewRequest(serviceMethod, data) - if err != nil { - return nil, err - } - var retries int start := time.Now() for { + req, err := c.requestFactory.NewRequest(serviceMethod, data) + if err != nil { + return nil, err + } + resp, err := c.http.Do(req) if err != nil { if !retry { diff --git a/pkg/plugins/client_test.go b/pkg/plugins/client_test.go index 9faad86a15..fc583fe0c2 100644 --- a/pkg/plugins/client_test.go +++ b/pkg/plugins/client_test.go @@ -6,6 +6,7 @@ import ( "net/http/httptest" "net/url" "reflect" + "strings" "testing" "time" @@ -38,6 +39,26 @@ func TestFailedConnection(t *testing.T) { } } +func TestFailOnce(t *testing.T) { + addr := setupRemotePluginServer() + defer teardownRemotePluginServer() + + failed := false + mux.HandleFunc("/Test.FailOnce", func(w http.ResponseWriter, r *http.Request) { + if !failed { + failed = true + panic("Plugin not ready") + } + }) + + c, _ := NewClient(addr, &tlsconfig.Options{InsecureSkipVerify: true}) + b := strings.NewReader("body") + _, err := c.callWithRetry("Test.FailOnce", b, true) + if err != nil { + t.Fatal(err) + } +} + func TestEchoInputOutput(t *testing.T) { addr := setupRemotePluginServer() defer teardownRemotePluginServer()