diff --git a/staging/src/k8s.io/client-go/rest/request.go b/staging/src/k8s.io/client-go/rest/request.go index e1ba760d64b..bb6fb4decb7 100644 --- a/staging/src/k8s.io/client-go/rest/request.go +++ b/staging/src/k8s.io/client-go/rest/request.go @@ -481,7 +481,13 @@ func (r *Request) Body(obj interface{}) *Request { return r } -// URL returns the current working URL. +// Error returns any error encountered constructing the request, if any. +func (r *Request) Error() error { + return r.err +} + +// URL returns the current working URL. Check the result of Error() to ensure +// that the returned URL is valid. func (r *Request) URL() *url.URL { p := r.pathPrefix if r.namespaceSet && len(r.namespace) > 0 { diff --git a/staging/src/k8s.io/client-go/rest/request_test.go b/staging/src/k8s.io/client-go/rest/request_test.go index dbc54fa758b..9c36c0de30c 100644 --- a/staging/src/k8s.io/client-go/rest/request_test.go +++ b/staging/src/k8s.io/client-go/rest/request_test.go @@ -269,6 +269,26 @@ func TestRequestVersionedParamsFromListOptions(t *testing.T) { } } +func TestRequestVersionedParamsWithInvalidScheme(t *testing.T) { + parameterCodec := runtime.NewParameterCodec(runtime.NewScheme()) + r := (&Request{c: &RESTClient{content: ClientContentConfig{GroupVersion: v1.SchemeGroupVersion}}}) + r.VersionedParams(&v1.PodExecOptions{Stdin: false, Stdout: true}, + parameterCodec) + + if r.Error() == nil { + t.Errorf("should have recorded an error: %#v", r.params) + } +} + +func TestRequestError(t *testing.T) { + // Invalid body, see TestRequestBody() + r := (&Request{}).Body([]string{"test"}) + + if r.Error() != r.err { + t.Errorf("getter should be identical to reference: %#v %#v", r.Error(), r.err) + } +} + func TestRequestURI(t *testing.T) { r := (&Request{}).Param("foo", "a") r.Prefix("other")