Merge pull request #17074 from krousey/timeout
Auto commit by PR queue bot
This commit is contained in:
@@ -28,15 +28,21 @@ import (
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
)
|
||||
|
||||
type HTTPClientFunc func(*http.Request) (*http.Response, error)
|
||||
func CreateHTTPClient(roundTripper func(*http.Request) (*http.Response, error)) *http.Client {
|
||||
return &http.Client{
|
||||
Transport: roundTripperFunc(roundTripper),
|
||||
}
|
||||
}
|
||||
|
||||
func (f HTTPClientFunc) Do(req *http.Request) (*http.Response, error) {
|
||||
type roundTripperFunc func(*http.Request) (*http.Response, error)
|
||||
|
||||
func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
return f(req)
|
||||
}
|
||||
|
||||
// RESTClient provides a fake RESTClient interface.
|
||||
type RESTClient struct {
|
||||
Client unversioned.HTTPClient
|
||||
Client *http.Client
|
||||
Codec runtime.Codec
|
||||
Req *http.Request
|
||||
Resp *http.Response
|
||||
@@ -68,7 +74,7 @@ func (c *RESTClient) Do(req *http.Request) (*http.Response, error) {
|
||||
return nil, c.Err
|
||||
}
|
||||
c.Req = req
|
||||
if c.Client != unversioned.HTTPClient(nil) {
|
||||
if c.Client != nil {
|
||||
return c.Client.Do(req)
|
||||
}
|
||||
return c.Resp, nil
|
||||
|
||||
@@ -19,7 +19,7 @@ package unversioned_test
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"errors"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@@ -41,7 +41,6 @@ func objBody(object interface{}) io.ReadCloser {
|
||||
}
|
||||
|
||||
func TestNegotiateVersion(t *testing.T) {
|
||||
refusedErr := fmt.Errorf("connection refused")
|
||||
tests := []struct {
|
||||
name, version, expectedVersion string
|
||||
serverVersions []string
|
||||
@@ -87,8 +86,8 @@ func TestNegotiateVersion(t *testing.T) {
|
||||
config: &unversioned.Config{Version: testapi.Default.Version()},
|
||||
serverVersions: []string{"version1"},
|
||||
clientVersions: []string{"version1", testapi.Default.Version()},
|
||||
sendErr: refusedErr,
|
||||
expectErr: func(err error) bool { return err == refusedErr },
|
||||
sendErr: errors.New("connection refused"),
|
||||
expectErr: func(err error) bool { return strings.Contains(err.Error(), "connection refused") },
|
||||
},
|
||||
}
|
||||
codec := testapi.Default.Codec()
|
||||
@@ -100,7 +99,7 @@ func TestNegotiateVersion(t *testing.T) {
|
||||
StatusCode: 200,
|
||||
Body: objBody(&unversionedapi.APIVersions{Versions: test.serverVersions}),
|
||||
},
|
||||
Client: fake.HTTPClientFunc(func(req *http.Request) (*http.Response, error) {
|
||||
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
||||
if test.sendErr != nil {
|
||||
return nil, test.sendErr
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package unversioned
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
@@ -43,7 +44,7 @@ type RESTClient struct {
|
||||
|
||||
// Set specific behavior of the client. If not set http.DefaultClient will be
|
||||
// used.
|
||||
Client HTTPClient
|
||||
Client *http.Client
|
||||
|
||||
// TODO extract this into a wrapper interface via the RESTClient interface in kubectl.
|
||||
Throttle util.RateLimiter
|
||||
@@ -88,6 +89,9 @@ func (c *RESTClient) Verb(verb string) *Request {
|
||||
if c.Throttle != nil {
|
||||
c.Throttle.Accept()
|
||||
}
|
||||
if c.Client == nil {
|
||||
return NewRequest(nil, verb, c.baseURL, c.apiVersion, c.Codec)
|
||||
}
|
||||
return NewRequest(c.Client, verb, c.baseURL, c.apiVersion, c.Codec)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user