distribution: TestPullSchema2Config fix test response

The test was depending on the client constructing an error based on the
http-status code, and the client not reading the response body if the
response was not a JSON response.

This fix;

- adds the correct content-type headers in the response
- includes error-messages in the response
- adds additional tests to cover both the plain (non-JSON) and JSON
  error responses, as well as an empty response.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-09-27 14:03:59 +02:00
parent a9fcb775e5
commit 2c89640ab9
No known key found for this signature in database
GPG key ID: 76698F39D527CE8C

View file

@ -268,6 +268,27 @@ func TestPullSchema2Config(t *testing.T) {
name: "unauthorized",
handler: func(callCount int, w http.ResponseWriter) {
w.WriteHeader(http.StatusUnauthorized)
// FIXME: current distribution client does not handle plain-text error-responses, so this response is ignored.
_, _ = w.Write([]byte("you need to be authenticated"))
},
expectError: "unauthorized: authentication required",
expectAttempts: 1,
},
{
name: "unauthorized JSON",
handler: func(callCount int, w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
_, _ = w.Write([]byte(` { "errors": [{"code": "UNAUTHORIZED", "message": "you need to be authenticated", "detail": "more detail"}]}`))
},
expectError: "unauthorized: you need to be authenticated",
expectAttempts: 1,
},
{
name: "unauthorized JSON no body",
handler: func(callCount int, w http.ResponseWriter) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
},
expectError: "unauthorized: authentication required",
expectAttempts: 1,