mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-14 06:15:45 +00:00
Merge pull request #126265 from tnqn/fix-watch-error
Enrich the error returned from Request.Watch method
This commit is contained in:
commit
fd58143ed2
@ -752,8 +752,9 @@ func (r *Request) Watch(ctx context.Context) (watch.Interface, error) {
|
|||||||
// the server must have sent us an error in 'err'
|
// the server must have sent us an error in 'err'
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
if result := r.transformResponse(resp, req); result.err != nil {
|
result := r.transformResponse(resp, req)
|
||||||
return true, result.err
|
if err := result.Error(); err != nil {
|
||||||
|
return true, err
|
||||||
}
|
}
|
||||||
return true, fmt.Errorf("for request %s, got status: %v", url, resp.StatusCode)
|
return true, fmt.Errorf("for request %s, got status: %v", url, resp.StatusCode)
|
||||||
}()
|
}()
|
||||||
|
@ -977,7 +977,7 @@ func TestRequestWatch(t *testing.T) {
|
|||||||
Err: true,
|
Err: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "server returns forbidden",
|
name: "server returns forbidden with json content",
|
||||||
Request: &Request{
|
Request: &Request{
|
||||||
c: &RESTClient{
|
c: &RESTClient{
|
||||||
content: defaultContentConfig(),
|
content: defaultContentConfig(),
|
||||||
@ -986,41 +986,27 @@ func TestRequestWatch(t *testing.T) {
|
|||||||
},
|
},
|
||||||
serverReturns: []responseErr{
|
serverReturns: []responseErr{
|
||||||
{response: &http.Response{
|
{response: &http.Response{
|
||||||
|
Header: http.Header{"Content-Type": []string{"application/json"}},
|
||||||
StatusCode: http.StatusForbidden,
|
StatusCode: http.StatusForbidden,
|
||||||
Body: io.NopCloser(bytes.NewReader([]byte{})),
|
Body: io.NopCloser(bytes.NewReader([]byte(runtime.EncodeOrDie(scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &metav1.Status{
|
||||||
|
Status: metav1.StatusFailure,
|
||||||
|
Message: "secrets is forbidden",
|
||||||
|
Reason: metav1.StatusReasonForbidden,
|
||||||
|
Code: http.StatusForbidden,
|
||||||
|
})))),
|
||||||
}, err: nil},
|
}, err: nil},
|
||||||
},
|
},
|
||||||
attemptsExpected: 1,
|
attemptsExpected: 1,
|
||||||
Expect: []watch.Event{
|
Err: true,
|
||||||
{
|
|
||||||
Type: watch.Error,
|
|
||||||
Object: &metav1.Status{
|
|
||||||
Status: "Failure",
|
|
||||||
Code: 500,
|
|
||||||
Reason: "InternalError",
|
|
||||||
Message: `an error on the server ("unable to decode an event from the watch stream: test error") has prevented the request from succeeding`,
|
|
||||||
Details: &metav1.StatusDetails{
|
|
||||||
Causes: []metav1.StatusCause{
|
|
||||||
{
|
|
||||||
Type: "UnexpectedServerResponse",
|
|
||||||
Message: "unable to decode an event from the watch stream: test error",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Type: "ClientWatchDecoding",
|
|
||||||
Message: "unable to decode an event from the watch stream: test error",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Err: true,
|
|
||||||
ErrFn: func(err error) bool {
|
ErrFn: func(err error) bool {
|
||||||
|
if err.Error() != "secrets is forbidden" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
return apierrors.IsForbidden(err)
|
return apierrors.IsForbidden(err)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "server returns forbidden",
|
name: "server returns forbidden without content",
|
||||||
Request: &Request{
|
Request: &Request{
|
||||||
c: &RESTClient{
|
c: &RESTClient{
|
||||||
content: defaultContentConfig(),
|
content: defaultContentConfig(),
|
||||||
|
Loading…
Reference in New Issue
Block a user