Merge branch 'print-error-msg' of https://github.com/k4leung4/distribution into print-error-msg
Changed to use typed error instead of formatted string. Added tests for new public method. Signed-off-by: Kenny Leung <kleung@google.com>master
						commit
						7ff5042c1e
					
				|  | @ -241,7 +241,7 @@ func (th *tokenHandler) fetchToken(params map[string]string) (token *tokenRespon | |||
| 
 | ||||
| 	if !client.SuccessStatus(resp.StatusCode) { | ||||
| 		err := client.HandleErrorResponse(resp) | ||||
| 		return nil, fmt.Errorf("token auth attempt for registry: %s request failed with status: %d %s: %q", req.URL, resp.StatusCode, http.StatusText(resp.StatusCode), err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	decoder := json.NewDecoder(resp.Body) | ||||
|  |  | |||
|  | @ -0,0 +1,89 @@ | |||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| type nopCloser struct { | ||||
| 	io.Reader | ||||
| } | ||||
| 
 | ||||
| func (nopCloser) Close() error { return nil } | ||||
| 
 | ||||
| func TestHandleErrorResponse401ValidBody(t *testing.T) { | ||||
| 	json := "{\"errors\":[{\"code\":\"UNAUTHORIZED\",\"message\":\"action requires authentication\"}]}" | ||||
| 	response := &http.Response{ | ||||
| 		Status:     "401 Unauthorized", | ||||
| 		StatusCode: 401, | ||||
| 		Body:       nopCloser{bytes.NewBufferString(json)}, | ||||
| 	} | ||||
| 	err := HandleErrorResponse(response) | ||||
| 
 | ||||
| 	expectedMsg := "unauthorized: action requires authentication" | ||||
| 	if !strings.Contains(err.Error(), expectedMsg) { | ||||
| 		t.Errorf("Expected \"%s\", got: \"%s\"", expectedMsg, err.Error()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHandleErrorResponse401WithInvalidBody(t *testing.T) { | ||||
| 	json := "{invalid json}" | ||||
| 	response := &http.Response{ | ||||
| 		Status:     "401 Unauthorized", | ||||
| 		StatusCode: 401, | ||||
| 		Body:       nopCloser{bytes.NewBufferString(json)}, | ||||
| 	} | ||||
| 	err := HandleErrorResponse(response) | ||||
| 
 | ||||
| 	expectedMsg := "unauthorized: authentication required" | ||||
| 	if !strings.Contains(err.Error(), expectedMsg) { | ||||
| 		t.Errorf("Expected \"%s\", got: \"%s\"", expectedMsg, err.Error()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHandleErrorResponseExpectedStatusCode400ValidBody(t *testing.T) { | ||||
| 	json := "{\"errors\":[{\"code\":\"DIGEST_INVALID\",\"message\":\"provided digest does not match\"}]}" | ||||
| 	response := &http.Response{ | ||||
| 		Status:     "400 Bad Request", | ||||
| 		StatusCode: 400, | ||||
| 		Body:       nopCloser{bytes.NewBufferString(json)}, | ||||
| 	} | ||||
| 	err := HandleErrorResponse(response) | ||||
| 
 | ||||
| 	expectedMsg := "digest invalid: provided digest does not match" | ||||
| 	if !strings.Contains(err.Error(), expectedMsg) { | ||||
| 		t.Errorf("Expected \"%s\", got: \"%s\"", expectedMsg, err.Error()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHandleErrorResponseExpectedStatusCode404InvalidBody(t *testing.T) { | ||||
| 	json := "{invalid json}" | ||||
| 	response := &http.Response{ | ||||
| 		Status:     "404 Not Found", | ||||
| 		StatusCode: 404, | ||||
| 		Body:       nopCloser{bytes.NewBufferString(json)}, | ||||
| 	} | ||||
| 	err := HandleErrorResponse(response) | ||||
| 
 | ||||
| 	expectedMsg := "Error parsing HTTP response: invalid character 'i' looking for beginning of object key string: \"{invalid json}\"" | ||||
| 	if !strings.Contains(err.Error(), expectedMsg) { | ||||
| 		t.Errorf("Expected \"%s\", got: \"%s\"", expectedMsg, err.Error()) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHandleErrorResponseUnexpectedStatusCode501(t *testing.T) { | ||||
| 	response := &http.Response{ | ||||
| 		Status:     "501 Not Implemented", | ||||
| 		StatusCode: 501, | ||||
| 		Body:       nopCloser{bytes.NewBufferString("{\"Error Encountered\" : \"Function not implemented.\"}")}, | ||||
| 	} | ||||
| 	err := HandleErrorResponse(response) | ||||
| 
 | ||||
| 	expectedMsg := "Received unexpected HTTP status: 501 Not Implemented" | ||||
| 	if !strings.Contains(err.Error(), expectedMsg) { | ||||
| 		t.Errorf("Expected \"%s\", got: \"%s\"", expectedMsg, err.Error()) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue