Merge pull request #17074 from krousey/timeout

Auto commit by PR queue bot
This commit is contained in:
k8s-merge-robot
2015-11-12 11:20:34 -08:00
23 changed files with 90 additions and 93 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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)
}