From 38e6d474affe08230043fa36fa02f623c2ab2661 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 31 Dec 2018 18:20:09 +0100 Subject: [PATCH] client: return rich / errdefs errors this patch makes the client return errors matching the errdefs interface. Signed-off-by: Sebastiaan van Stijn --- client/ping.go | 11 +++++++++-- client/request.go | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/client/ping.go b/client/ping.go index 0ebb6b752b..e4d9be447d 100644 --- a/client/ping.go +++ b/client/ping.go @@ -5,6 +5,7 @@ import ( "net/http" "path" + "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" ) @@ -14,6 +15,10 @@ import ( // by the daemon. func (cli *Client) Ping(ctx context.Context) (types.Ping, error) { var ping types.Ping + + // Using cli.buildRequest() + cli.doRequest() instead of cli.sendRequest() + // because ping requests are used during API version negotiation, so we want + // to hit the non-versioned /_ping endpoint, not /v1.xx/_ping req, err := cli.buildRequest("HEAD", path.Join(cli.basePath, "/_ping"), nil, nil) if err != nil { return ping, err @@ -43,7 +48,8 @@ func (cli *Client) Ping(ctx context.Context) (types.Ping, error) { func parsePingResponse(cli *Client, resp serverResponse) (types.Ping, error) { var ping types.Ping if resp.header == nil { - return ping, cli.checkResponseErr(resp) + err := cli.checkResponseErr(resp) + return ping, httputils.FromStatusCode(err, resp.statusCode) } ping.APIVersion = resp.header.Get("API-Version") ping.OSType = resp.header.Get("OSType") @@ -53,5 +59,6 @@ func parsePingResponse(cli *Client, resp serverResponse) (types.Ping, error) { if bv := resp.header.Get("Builder-Version"); bv != "" { ping.BuilderVersion = types.BuilderVersion(bv) } - return ping, cli.checkResponseErr(resp) + err := cli.checkResponseErr(resp) + return ping, httputils.FromStatusCode(err, resp.statusCode) } diff --git a/client/request.go b/client/request.go index 52ed12446d..86c03b066d 100644 --- a/client/request.go +++ b/client/request.go @@ -13,6 +13,7 @@ import ( "os" "strings" + "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/versions" "github.com/pkg/errors" @@ -120,9 +121,10 @@ func (cli *Client) sendRequest(ctx context.Context, method, path string, query u } resp, err := cli.doRequest(ctx, req) if err != nil { - return resp, err + return resp, httputils.FromStatusCode(err, resp.statusCode) } - return resp, cli.checkResponseErr(resp) + err = cli.checkResponseErr(resp) + return resp, httputils.FromStatusCode(err, resp.statusCode) } func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResponse, error) {