From 022e93f627efeacd29440ce7668ee735a2c7beb9 Mon Sep 17 00:00:00 2001 From: Billie Cleek Date: Tue, 10 Oct 2017 05:46:54 -0700 Subject: [PATCH] do not panic when Client.Transport is not *http.Transport (#3440) --- api/client.go | 7 ++++--- api/client_test.go | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/api/client.go b/api/client.go index 28bfc017fd..0204cec7aa 100644 --- a/api/client.go +++ b/api/client.go @@ -271,9 +271,10 @@ func NewClient(c *Config) (*Client, error) { c.HttpClient.Transport = cleanhttp.DefaultTransport() } - tp := c.HttpClient.Transport.(*http.Transport) - if err := http2.ConfigureTransport(tp); err != nil { - return nil, err + if tp, ok := c.HttpClient.Transport.(*http.Transport); ok { + if err := http2.ConfigureTransport(tp); err != nil { + return nil, err + } } redirFunc := func() { diff --git a/api/client_test.go b/api/client_test.go index 2dc89a86aa..3bc866b157 100644 --- a/api/client_test.go +++ b/api/client_test.go @@ -194,3 +194,22 @@ func TestClientTimeoutSetting(t *testing.T) { } } + +type roundTripperFunc func(*http.Request) (*http.Response, error) + +func (rt roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { + return rt(r) +} + +func TestClientNonTransportRoundTripper(t *testing.T) { + client := &http.Client{ + Transport: roundTripperFunc(http.DefaultTransport.RoundTrip), + } + + _, err := NewClient(&Config{ + HttpClient: client, + }) + if err != nil { + t.Fatal(err) + } +}