From 42f6fdf059807ecbe66cce90676021363a541154 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Tue, 17 Apr 2018 10:22:04 +0200 Subject: [PATCH] =?UTF-8?q?Move=20integration-cli/request=20to=20internal/?= =?UTF-8?q?test/request=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … and change a bit the method signature Signed-off-by: Vincent Demeester --- integration-cli/daemon/daemon.go | 15 -- integration-cli/docker_api_attach_test.go | 2 +- integration-cli/docker_api_build_test.go | 2 +- integration-cli/docker_api_containers_test.go | 6 +- integration-cli/docker_api_create_test.go | 2 +- .../docker_api_exec_resize_test.go | 2 +- integration-cli/docker_api_exec_test.go | 2 +- integration-cli/docker_api_images_test.go | 2 +- integration-cli/docker_api_logs_test.go | 2 +- integration-cli/docker_api_network_test.go | 2 +- integration-cli/docker_api_stats_test.go | 2 +- integration-cli/docker_api_swarm_test.go | 8 +- integration-cli/docker_api_test.go | 2 +- .../docker_cli_update_unix_test.go | 2 +- .../docker_deprecated_api_v124_test.go | 2 +- .../docker_deprecated_api_v124_unix_test.go | 2 +- integration-cli/docker_utils_test.go | 2 +- integration/build/build_session_test.go | 13 +- integration/build/build_test.go | 2 +- integration/container/create_test.go | 2 +- integration/container/diff_test.go | 2 +- integration/container/exec_test.go | 2 +- integration/container/export_test.go | 2 +- integration/container/health_test.go | 2 +- integration/container/inspect_test.go | 2 +- integration/container/kill_test.go | 2 +- integration/container/links_linux_test.go | 2 +- integration/container/logs_test.go | 2 +- integration/container/mounts_linux_test.go | 2 +- integration/container/nat_test.go | 2 +- integration/container/pause_test.go | 2 +- integration/container/ps_test.go | 2 +- integration/container/remove_test.go | 2 +- integration/container/rename_test.go | 2 +- integration/container/resize_test.go | 4 +- integration/container/stats_test.go | 2 +- integration/container/stop_test.go | 2 +- integration/container/update_linux_test.go | 2 +- integration/container/update_test.go | 2 +- integration/image/commit_test.go | 2 +- integration/image/import_test.go | 2 +- integration/image/remove_test.go | 2 +- integration/image/tag_test.go | 2 +- integration/internal/request/client.go | 42 ---- integration/network/delete_test.go | 2 +- integration/session/session_test.go | 10 +- integration/system/event_test.go | 4 +- integration/system/info_linux_test.go | 4 +- integration/system/info_test.go | 2 +- integration/system/login_test.go | 2 +- integration/system/version_test.go | 2 +- integration/volume/volume_test.go | 2 +- internal/test/daemon/container.go | 4 +- internal/test/daemon/daemon.go | 4 +- internal/test/fakestorage/storage.go | 2 +- .../test}/request/npipe.go | 2 +- .../test}/request/npipe_windows.go | 2 +- internal/test/request/ops.go | 78 +++++++ .../test}/request/request.go | 194 ++++++++---------- 59 files changed, 239 insertions(+), 239 deletions(-) delete mode 100644 integration/internal/request/client.go rename {integration-cli => internal/test}/request/npipe.go (69%) rename {integration-cli => internal/test}/request/npipe_windows.go (69%) create mode 100644 internal/test/request/ops.go rename {integration-cli => internal/test}/request/request.go (57%) diff --git a/integration-cli/daemon/daemon.go b/integration-cli/daemon/daemon.go index bfbc66bdfa..951cbe31f9 100644 --- a/integration-cli/daemon/daemon.go +++ b/integration-cli/daemon/daemon.go @@ -118,21 +118,6 @@ func (d *Daemon) WaitRun(contID string) error { return WaitInspectWithArgs(d.dockerBinary, contID, "{{.State.Running}}", "true", 10*time.Second, args...) } -// CmdRetryOutOfSequence tries the specified command against the current daemon for 10 times -func (d *Daemon) CmdRetryOutOfSequence(args ...string) (string, error) { - for i := 0; ; i++ { - out, err := d.Cmd(args...) - if err != nil { - if strings.Contains(out, "update out of sequence") { - if i < 10 { - continue - } - } - } - return out, err - } -} - // WaitInspectWithArgs waits for the specified expression to be equals to the specified expected string in the given time. // Deprecated: use cli.WaitCmd instead func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time.Duration, arg ...string) error { diff --git a/integration-cli/docker_api_attach_test.go b/integration-cli/docker_api_attach_test.go index e191f278f7..35f893e7ed 100644 --- a/integration-cli/docker_api_attach_test.go +++ b/integration-cli/docker_api_attach_test.go @@ -15,7 +15,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/stdcopy" "github.com/go-check/check" "golang.org/x/net/websocket" diff --git a/integration-cli/docker_api_build_test.go b/integration-cli/docker_api_build_test.go index 389b20db80..e997274a05 100644 --- a/integration-cli/docker_api_build_test.go +++ b/integration-cli/docker_api_build_test.go @@ -13,10 +13,10 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/internal/test/fakecontext" "github.com/docker/docker/internal/test/fakegit" "github.com/docker/docker/internal/test/fakestorage" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index 2da31ac3e1..6b8b10119d 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -24,7 +24,7 @@ import ( "github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli/build" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/stringid" @@ -1254,13 +1254,13 @@ func (s *DockerSuite) TestContainerAPIChunkedEncoding(c *check.C) { "OpenStdin": true, } - resp, _, err := request.Post("/containers/create", request.JSONBody(config), func(req *http.Request) error { + resp, _, err := request.Post("/containers/create", request.JSONBody(config), request.With(func(req *http.Request) error { // This is a cheat to make the http request do chunked encoding // Otherwise (just setting the Content-Encoding to chunked) net/http will overwrite // https://golang.org/src/pkg/net/http/request.go?s=11980:12172 req.ContentLength = -1 return nil - }) + })) c.Assert(err, checker.IsNil, check.Commentf("error creating container with chunked encoding")) defer resp.Body.Close() c.Assert(resp.StatusCode, checker.Equals, http.StatusCreated) diff --git a/integration-cli/docker_api_create_test.go b/integration-cli/docker_api_create_test.go index 760e715b18..0e5a1307e6 100644 --- a/integration-cli/docker_api_create_test.go +++ b/integration-cli/docker_api_create_test.go @@ -7,7 +7,7 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_exec_resize_test.go b/integration-cli/docker_api_exec_resize_test.go index 7289b2689c..37a266a277 100644 --- a/integration-cli/docker_api_exec_resize_test.go +++ b/integration-cli/docker_api_exec_resize_test.go @@ -10,7 +10,7 @@ import ( "sync" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_exec_test.go b/integration-cli/docker_api_exec_test.go index ffc7da4fc5..a23cedc0dc 100644 --- a/integration-cli/docker_api_exec_test.go +++ b/integration-cli/docker_api_exec_test.go @@ -15,7 +15,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" "golang.org/x/net/context" ) diff --git a/integration-cli/docker_api_images_test.go b/integration-cli/docker_api_images_test.go index 5e47858da6..21bfbc6217 100644 --- a/integration-cli/docker_api_images_test.go +++ b/integration-cli/docker_api_images_test.go @@ -11,7 +11,7 @@ import ( "github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli/build" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" "golang.org/x/net/context" ) diff --git a/integration-cli/docker_api_logs_test.go b/integration-cli/docker_api_logs_test.go index 46ca5172c3..36dbb4bbb5 100644 --- a/integration-cli/docker_api_logs_test.go +++ b/integration-cli/docker_api_logs_test.go @@ -14,7 +14,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/stdcopy" "github.com/go-check/check" "golang.org/x/net/context" diff --git a/integration-cli/docker_api_network_test.go b/integration-cli/docker_api_network_test.go index f0c26e2d94..21418306ec 100644 --- a/integration-cli/docker_api_network_test.go +++ b/integration-cli/docker_api_network_test.go @@ -12,7 +12,7 @@ import ( "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/network" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go index 1818c3b4ea..5606ddbd68 100644 --- a/integration-cli/docker_api_stats_test.go +++ b/integration-cli/docker_api_stats_test.go @@ -15,7 +15,7 @@ import ( "github.com/docker/docker/api/types/versions" "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" "golang.org/x/net/context" ) diff --git a/integration-cli/docker_api_swarm_test.go b/integration-cli/docker_api_swarm_test.go index b67b9f92dc..86ccfe1cb6 100644 --- a/integration-cli/docker_api_swarm_test.go +++ b/integration-cli/docker_api_swarm_test.go @@ -22,8 +22,8 @@ import ( "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/daemon" - "github.com/docker/docker/integration-cli/request" testdaemon "github.com/docker/docker/internal/test/daemon" + "github.com/docker/docker/internal/test/request" "github.com/docker/swarmkit/ca" "github.com/go-check/check" "github.com/gotestyourself/gotestyourself/assert" @@ -242,7 +242,7 @@ func (s *DockerSwarmSuite) TestAPISwarmPromoteDemote(c *check.C) { node := d1.GetNode(c, d1.NodeID()) node.Spec.Role = swarm.NodeRoleWorker url := fmt.Sprintf("/nodes/%s/update?version=%d", node.ID, node.Version.Index) - res, body, err := request.DoOnHost(d1.Sock(), url, request.Method("POST"), request.JSONBody(node.Spec)) + res, body, err := request.Post(url, request.Host(d1.Sock()), request.JSONBody(node.Spec)) c.Assert(err, checker.IsNil) b, err := request.ReadBody(body) c.Assert(err, checker.IsNil) @@ -529,7 +529,7 @@ func (s *DockerSwarmSuite) TestAPISwarmInvalidAddress(c *check.C) { req := swarm.InitRequest{ ListenAddr: "", } - res, _, err := request.DoOnHost(d.Sock(), "/swarm/init", request.Method("POST"), request.JSONBody(req)) + res, _, err := request.Post("/swarm/init", request.Host(d.Sock()), request.JSONBody(req)) c.Assert(err, checker.IsNil) c.Assert(res.StatusCode, checker.Equals, http.StatusBadRequest) @@ -537,7 +537,7 @@ func (s *DockerSwarmSuite) TestAPISwarmInvalidAddress(c *check.C) { ListenAddr: "0.0.0.0:2377", RemoteAddrs: []string{""}, } - res, _, err = request.DoOnHost(d.Sock(), "/swarm/join", request.Method("POST"), request.JSONBody(req2)) + res, _, err = request.Post("/swarm/join", request.Host(d.Sock()), request.JSONBody(req2)) c.Assert(err, checker.IsNil) c.Assert(res.StatusCode, checker.Equals, http.StatusBadRequest) } diff --git a/integration-cli/docker_api_test.go b/integration-cli/docker_api_test.go index e5b454fbf2..1dcaa1c4cf 100644 --- a/integration-cli/docker_api_test.go +++ b/integration-cli/docker_api_test.go @@ -10,7 +10,7 @@ import ( "github.com/docker/docker/api" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_update_unix_test.go b/integration-cli/docker_cli_update_unix_test.go index 0d2d30f824..564c50f32f 100644 --- a/integration-cli/docker_cli_update_unix_test.go +++ b/integration-cli/docker_cli_update_unix_test.go @@ -13,7 +13,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/parsers/kernel" "github.com/go-check/check" "github.com/kr/pty" diff --git a/integration-cli/docker_deprecated_api_v124_test.go b/integration-cli/docker_deprecated_api_v124_test.go index 279efddd8e..0f3f99b438 100644 --- a/integration-cli/docker_deprecated_api_v124_test.go +++ b/integration-cli/docker_deprecated_api_v124_test.go @@ -8,7 +8,7 @@ import ( "strings" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_deprecated_api_v124_unix_test.go b/integration-cli/docker_deprecated_api_v124_unix_test.go index 20a8885908..c182b2a7aa 100644 --- a/integration-cli/docker_deprecated_api_v124_unix_test.go +++ b/integration-cli/docker_deprecated_api_v124_unix_test.go @@ -6,7 +6,7 @@ import ( "fmt" "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" ) diff --git a/integration-cli/docker_utils_test.go b/integration-cli/docker_utils_test.go index a5fb437e4c..93006395d5 100644 --- a/integration-cli/docker_utils_test.go +++ b/integration-cli/docker_utils_test.go @@ -18,7 +18,7 @@ import ( "github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/daemon" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/go-check/check" "github.com/gotestyourself/gotestyourself/icmd" "golang.org/x/net/context" diff --git a/integration/build/build_session_test.go b/integration/build/build_session_test.go index 391b83ba30..ff04b63d8f 100644 --- a/integration/build/build_session_test.go +++ b/integration/build/build_session_test.go @@ -8,9 +8,9 @@ import ( "testing" dclient "github.com/docker/docker/client" - "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/internal/test/daemon" "github.com/docker/docker/internal/test/fakecontext" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/moby/buildkit/session" @@ -65,8 +65,9 @@ func TestBuildWithSession(t *testing.T) { // rebuild with regular tar, confirm cache still applies fctx.Add("Dockerfile", dockerfile) // FIXME(vdemeester) use sock here - res, body, err := request.DoOnHost(d.Sock(), + res, body, err := request.Do( "/build", + request.Host(d.Sock()), request.Method(http.MethodPost), request.RawContent(fctx.AsTarReader(t)), request.ContentType("application/x-tar")) @@ -103,14 +104,14 @@ func testBuildWithSession(t *testing.T, client dclient.APIClient, daemonSock str g.Go(func() error { // FIXME use sock here - res, body, err := request.DoOnHost( - daemonSock, + res, body, err := request.Do( "/build?remote=client-session&session="+sess.ID(), + request.Host(daemonSock), request.Method(http.MethodPost), - func(req *http.Request) error { + request.With(func(req *http.Request) error { req.Body = ioutil.NopCloser(strings.NewReader(dockerfile)) return nil - }, + }), ) if err != nil { return err diff --git a/integration/build/build_test.go b/integration/build/build_test.go index a9f79156f7..880c0197a4 100644 --- a/integration/build/build_test.go +++ b/integration/build/build_test.go @@ -13,8 +13,8 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/versions" - "github.com/docker/docker/integration/internal/request" "github.com/docker/docker/internal/test/fakecontext" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/jsonmessage" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/create_test.go b/integration/container/create_test.go index 521584d88a..61a07bcc97 100644 --- a/integration/container/create_test.go +++ b/integration/container/create_test.go @@ -7,7 +7,7 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/network" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/skip" ) diff --git a/integration/container/diff_test.go b/integration/container/diff_test.go index 56fb983b1d..fee58391e9 100644 --- a/integration/container/diff_test.go +++ b/integration/container/diff_test.go @@ -7,7 +7,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/archive" "github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/exec_test.go b/integration/container/exec_test.go index 1b710432d1..790f3fe3da 100644 --- a/integration/container/exec_test.go +++ b/integration/container/exec_test.go @@ -8,7 +8,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" ) diff --git a/integration/container/export_test.go b/integration/container/export_test.go index 1b7eff44be..dbeea341cd 100644 --- a/integration/container/export_test.go +++ b/integration/container/export_test.go @@ -9,8 +9,8 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" "github.com/docker/docker/internal/test/daemon" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/jsonmessage" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/health_test.go b/integration/container/health_test.go index 651cb2b00c..e13885002d 100644 --- a/integration/container/health_test.go +++ b/integration/container/health_test.go @@ -9,7 +9,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/poll" ) diff --git a/integration/container/inspect_test.go b/integration/container/inspect_test.go index 0433522e68..8ed5904433 100644 --- a/integration/container/inspect_test.go +++ b/integration/container/inspect_test.go @@ -8,7 +8,7 @@ import ( "github.com/docker/docker/client" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/kill_test.go b/integration/container/kill_test.go index 4df28966f0..8cef5bb897 100644 --- a/integration/container/kill_test.go +++ b/integration/container/kill_test.go @@ -8,7 +8,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/links_linux_test.go b/integration/container/links_linux_test.go index ed5966bc7b..4fafd32c85 100644 --- a/integration/container/links_linux_test.go +++ b/integration/container/links_linux_test.go @@ -9,7 +9,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/skip" diff --git a/integration/container/logs_test.go b/integration/container/logs_test.go index ba64ea1391..80e3d9a6c6 100644 --- a/integration/container/logs_test.go +++ b/integration/container/logs_test.go @@ -7,7 +7,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/stdcopy" "github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/skip" diff --git a/integration/container/mounts_linux_test.go b/integration/container/mounts_linux_test.go index 38aa98355a..884eebb1b4 100644 --- a/integration/container/mounts_linux_test.go +++ b/integration/container/mounts_linux_test.go @@ -11,7 +11,7 @@ import ( "github.com/docker/docker/api/types/mount" "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/system" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/nat_test.go b/integration/container/nat_test.go index 5e7402770b..12541b6a0a 100644 --- a/integration/container/nat_test.go +++ b/integration/container/nat_test.go @@ -13,7 +13,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/go-connections/nat" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/pause_test.go b/integration/container/pause_test.go index dd8356f853..449b623957 100644 --- a/integration/container/pause_test.go +++ b/integration/container/pause_test.go @@ -10,7 +10,7 @@ import ( "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/ps_test.go b/integration/container/ps_test.go index 2e8f3469d5..7ee92481e9 100644 --- a/integration/container/ps_test.go +++ b/integration/container/ps_test.go @@ -7,7 +7,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" ) diff --git a/integration/container/remove_test.go b/integration/container/remove_test.go index bbc521b059..5596c88042 100644 --- a/integration/container/remove_test.go +++ b/integration/container/remove_test.go @@ -9,7 +9,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/rename_test.go b/integration/container/rename_test.go index cdeec5d27e..d35e6aa683 100644 --- a/integration/container/rename_test.go +++ b/integration/container/rename_test.go @@ -9,7 +9,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/network" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/docker/docker/pkg/stringid" "github.com/gotestyourself/gotestyourself/assert" diff --git a/integration/container/resize_test.go b/integration/container/resize_test.go index 149ac3afd1..e5d5db2df6 100644 --- a/integration/container/resize_test.go +++ b/integration/container/resize_test.go @@ -7,9 +7,9 @@ import ( "time" "github.com/docker/docker/api/types" - req "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" + req "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/container/stats_test.go b/integration/container/stats_test.go index d10808f8f7..dbececa0e5 100644 --- a/integration/container/stats_test.go +++ b/integration/container/stats_test.go @@ -9,7 +9,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/stop_test.go b/integration/container/stop_test.go index 04aec21594..5cb970ba58 100644 --- a/integration/container/stop_test.go +++ b/integration/container/stop_test.go @@ -9,7 +9,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/icmd" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/update_linux_test.go b/integration/container/update_linux_test.go index a08417ea24..6e4fb637ff 100644 --- a/integration/container/update_linux_test.go +++ b/integration/container/update_linux_test.go @@ -9,7 +9,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/poll" diff --git a/integration/container/update_test.go b/integration/container/update_test.go index 03dcc635c6..5e407e0c0b 100644 --- a/integration/container/update_test.go +++ b/integration/container/update_test.go @@ -7,7 +7,7 @@ import ( containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/image/commit_test.go b/integration/image/commit_test.go index e13719b532..ea62c6257a 100644 --- a/integration/image/commit_test.go +++ b/integration/image/commit_test.go @@ -6,7 +6,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" ) diff --git a/integration/image/import_test.go b/integration/image/import_test.go index b3a0c7c76c..89dddf2cc8 100644 --- a/integration/image/import_test.go +++ b/integration/image/import_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/docker/docker/api/types" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" ) diff --git a/integration/image/remove_test.go b/integration/image/remove_test.go index c89f6f7a03..5ad09d51e0 100644 --- a/integration/image/remove_test.go +++ b/integration/image/remove_test.go @@ -6,7 +6,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/image/tag_test.go b/integration/image/tag_test.go index c396c07c5c..e009114250 100644 --- a/integration/image/tag_test.go +++ b/integration/image/tag_test.go @@ -5,7 +5,7 @@ import ( "fmt" "testing" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/internal/request/client.go b/integration/internal/request/client.go deleted file mode 100644 index 07dc2e33c3..0000000000 --- a/integration/internal/request/client.go +++ /dev/null @@ -1,42 +0,0 @@ -package request // import "github.com/docker/docker/integration/internal/request" - -import ( - "fmt" - "testing" - "time" - - "golang.org/x/net/context" - - "github.com/docker/docker/client" - "github.com/docker/docker/internal/test/environment" - "github.com/gotestyourself/gotestyourself/assert" -) - -// NewAPIClient returns a docker API client configured from environment variables -func NewAPIClient(t *testing.T, ops ...func(*client.Client) error) client.APIClient { - ops = append([]func(*client.Client) error{client.FromEnv}, ops...) - clt, err := client.NewClientWithOpts(ops...) - assert.NilError(t, err) - return clt -} - -// DaemonTime provides the current time on the daemon host -func DaemonTime(ctx context.Context, t *testing.T, client client.APIClient, testEnv *environment.Execution) time.Time { - if testEnv.IsLocalDaemon() { - return time.Now() - } - - info, err := client.Info(ctx) - assert.NilError(t, err) - - dt, err := time.Parse(time.RFC3339Nano, info.SystemTime) - assert.NilError(t, err, "invalid time format in GET /info response") - return dt -} - -// DaemonUnixTime returns the current time on the daemon host with nanoseconds precision. -// It return the time formatted how the client sends timestamps to the server. -func DaemonUnixTime(ctx context.Context, t *testing.T, client client.APIClient, testEnv *environment.Execution) string { - dt := DaemonTime(ctx, t, client, testEnv) - return fmt.Sprintf("%d.%09d", dt.Unix(), int64(dt.Nanosecond())) -} diff --git a/integration/network/delete_test.go b/integration/network/delete_test.go index e2af49de7e..49a237f71e 100644 --- a/integration/network/delete_test.go +++ b/integration/network/delete_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/docker/docker/api/types" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" ) diff --git a/integration/session/session_test.go b/integration/session/session_test.go index de9319436e..893682faba 100644 --- a/integration/session/session_test.go +++ b/integration/session/session_test.go @@ -4,7 +4,7 @@ import ( "net/http" "testing" - req "github.com/docker/docker/integration-cli/request" + req "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/skip" @@ -15,11 +15,11 @@ func TestSessionCreate(t *testing.T) { defer setupTest(t)() - res, body, err := req.Post("/session", func(r *http.Request) error { + res, body, err := req.Post("/session", req.With(func(r *http.Request) error { r.Header.Set("X-Docker-Expose-Session-Uuid", "testsessioncreate") // so we don't block default name if something else is using it r.Header.Set("Upgrade", "h2c") return nil - }) + })) assert.NilError(t, err) assert.NilError(t, body.Close()) assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusSwitchingProtocols)) @@ -36,10 +36,10 @@ func TestSessionCreateWithBadUpgrade(t *testing.T) { assert.NilError(t, err) assert.Check(t, is.Contains(string(buf), "no upgrade")) - res, body, err = req.Post("/session", func(r *http.Request) error { + res, body, err = req.Post("/session", req.With(func(r *http.Request) error { r.Header.Set("Upgrade", "foo") return nil - }) + })) assert.NilError(t, err) assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusBadRequest)) buf, err = req.ReadBody(body) diff --git a/integration/system/event_test.go b/integration/system/event_test.go index b270ffcb91..9156edf4f2 100644 --- a/integration/system/event_test.go +++ b/integration/system/event_test.go @@ -13,9 +13,9 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/strslice" - req "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" + req "github.com/docker/docker/internal/test/request" "github.com/docker/docker/pkg/jsonmessage" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" diff --git a/integration/system/info_linux_test.go b/integration/system/info_linux_test.go index e8bf70f9b8..c08fae1320 100644 --- a/integration/system/info_linux_test.go +++ b/integration/system/info_linux_test.go @@ -6,8 +6,8 @@ import ( "net/http" "testing" - req "github.com/docker/docker/integration-cli/request" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" + req "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "golang.org/x/net/context" diff --git a/integration/system/info_test.go b/integration/system/info_test.go index e19ba9ba3d..15aa22de8a 100644 --- a/integration/system/info_test.go +++ b/integration/system/info_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "golang.org/x/net/context" diff --git a/integration/system/login_test.go b/integration/system/login_test.go index e8ef10c30c..6956305f4a 100644 --- a/integration/system/login_test.go +++ b/integration/system/login_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/docker/docker/api/types" - "github.com/docker/docker/integration/internal/request" "github.com/docker/docker/integration/internal/requirement" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "github.com/gotestyourself/gotestyourself/skip" diff --git a/integration/system/version_test.go b/integration/system/version_test.go index 38784e3ee9..8892436fd2 100644 --- a/integration/system/version_test.go +++ b/integration/system/version_test.go @@ -3,7 +3,7 @@ package system // import "github.com/docker/docker/integration/system" import ( "testing" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/gotestyourself/gotestyourself/assert" is "github.com/gotestyourself/gotestyourself/assert/cmp" "golang.org/x/net/context" diff --git a/integration/volume/volume_test.go b/integration/volume/volume_test.go index 4a747b6a6b..ac67292548 100644 --- a/integration/volume/volume_test.go +++ b/integration/volume/volume_test.go @@ -11,7 +11,7 @@ import ( "github.com/docker/docker/api/types/filters" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/integration/internal/container" - "github.com/docker/docker/integration/internal/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/google/go-cmp/cmp/cmpopts" "github.com/gotestyourself/gotestyourself/assert" diff --git a/internal/test/daemon/container.go b/internal/test/daemon/container.go index 0adda2cf15..d7e11efcdc 100644 --- a/internal/test/daemon/container.go +++ b/internal/test/daemon/container.go @@ -8,7 +8,7 @@ import ( ) // ActiveContainers returns the list of ids of the currently running containers -func (d *Daemon) ActiveContainers(t testingT) []string { +func (d *Daemon) ActiveContainers(t assert.TestingT) []string { cli := d.NewClientT(t) defer cli.Close() @@ -23,7 +23,7 @@ func (d *Daemon) ActiveContainers(t testingT) []string { } // FindContainerIP returns the ip of the specified container -func (d *Daemon) FindContainerIP(t testingT, id string) string { +func (d *Daemon) FindContainerIP(t assert.TestingT, id string) string { cli := d.NewClientT(t) defer cli.Close() diff --git a/internal/test/daemon/daemon.go b/internal/test/daemon/daemon.go index 7324503278..fbe5f5a28f 100644 --- a/internal/test/daemon/daemon.go +++ b/internal/test/daemon/daemon.go @@ -16,7 +16,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/events" "github.com/docker/docker/client" - "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/stringid" @@ -479,7 +479,7 @@ func (d *Daemon) ReloadConfig() error { errCh := make(chan error) started := make(chan struct{}) go func() { - _, body, err := request.DoOnHost(d.Sock(), "/events", request.Method(http.MethodGet)) + _, body, err := request.Get("/events", request.Host(d.Sock())) close(started) if err != nil { errCh <- err diff --git a/internal/test/fakestorage/storage.go b/internal/test/fakestorage/storage.go index ca3410ca85..ee001386e6 100644 --- a/internal/test/fakestorage/storage.go +++ b/internal/test/fakestorage/storage.go @@ -14,9 +14,9 @@ import ( "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" - "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/internal/test/environment" "github.com/docker/docker/internal/test/fakecontext" + "github.com/docker/docker/internal/test/request" "github.com/docker/docker/internal/testutil" "github.com/docker/go-connections/nat" "github.com/gotestyourself/gotestyourself/assert" diff --git a/integration-cli/request/npipe.go b/internal/test/request/npipe.go similarity index 69% rename from integration-cli/request/npipe.go rename to internal/test/request/npipe.go index 89f98cc68a..e6ab03945e 100644 --- a/integration-cli/request/npipe.go +++ b/internal/test/request/npipe.go @@ -1,6 +1,6 @@ // +build !windows -package request // import "github.com/docker/docker/integration-cli/request" +package request import ( "net" diff --git a/integration-cli/request/npipe_windows.go b/internal/test/request/npipe_windows.go similarity index 69% rename from integration-cli/request/npipe_windows.go rename to internal/test/request/npipe_windows.go index 54b7cefa2b..a268aac922 100644 --- a/integration-cli/request/npipe_windows.go +++ b/internal/test/request/npipe_windows.go @@ -1,4 +1,4 @@ -package request // import "github.com/docker/docker/integration-cli/request" +package request import ( "net" diff --git a/internal/test/request/ops.go b/internal/test/request/ops.go new file mode 100644 index 0000000000..c85308c476 --- /dev/null +++ b/internal/test/request/ops.go @@ -0,0 +1,78 @@ +package request + +import ( + "bytes" + "encoding/json" + "io" + "io/ioutil" + "net/http" + "strings" +) + +// Options defines request options, like request modifiers and which host to target +type Options struct { + host string + requestModifiers []func(*http.Request) error +} + +// Host creates a modifier that sets the specified host as the request URL host +func Host(host string) func(*Options) { + return func(o *Options) { + o.host = host + } +} + +// With adds a request modifier to the options +func With(f func(*http.Request) error) func(*Options) { + return func(o *Options) { + o.requestModifiers = append(o.requestModifiers, f) + } +} + +// Method creates a modifier that sets the specified string as the request method +func Method(method string) func(*Options) { + return With(func(req *http.Request) error { + req.Method = method + return nil + }) +} + +// RawString sets the specified string as body for the request +func RawString(content string) func(*Options) { + return RawContent(ioutil.NopCloser(strings.NewReader(content))) +} + +// RawContent sets the specified reader as body for the request +func RawContent(reader io.ReadCloser) func(*Options) { + return With(func(req *http.Request) error { + req.Body = reader + return nil + }) +} + +// ContentType sets the specified Content-Type request header +func ContentType(contentType string) func(*Options) { + return With(func(req *http.Request) error { + req.Header.Set("Content-Type", contentType) + return nil + }) +} + +// JSON sets the Content-Type request header to json +func JSON(o *Options) { + ContentType("application/json")(o) +} + +// JSONBody creates a modifier that encodes the specified data to a JSON string and set it as request body. It also sets +// the Content-Type header of the request. +func JSONBody(data interface{}) func(*Options) { + return With(func(req *http.Request) error { + jsonData := bytes.NewBuffer(nil) + if err := json.NewEncoder(jsonData).Encode(data); err != nil { + return err + } + req.Body = ioutil.NopCloser(jsonData) + req.Header.Set("Content-Type", "application/json") + return nil + }) +} diff --git a/integration-cli/request/request.go b/internal/test/request/request.go similarity index 57% rename from integration-cli/request/request.go rename to internal/test/request/request.go index 4e61e09359..5b3fa4efd5 100644 --- a/integration-cli/request/request.go +++ b/internal/test/request/request.go @@ -1,9 +1,9 @@ -package request // import "github.com/docker/docker/integration-cli/request" +package request // import "github.com/docker/docker/internal/test/request" import ( - "bytes" + "context" "crypto/tls" - "encoding/json" + "fmt" "io" "io/ioutil" "net" @@ -11,92 +11,75 @@ import ( "net/url" "os" "path/filepath" - "strings" "time" - dclient "github.com/docker/docker/client" + "github.com/docker/docker/client" + "github.com/docker/docker/internal/test/environment" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/ioutils" "github.com/docker/go-connections/sockets" "github.com/docker/go-connections/tlsconfig" + "github.com/gotestyourself/gotestyourself/assert" "github.com/pkg/errors" ) -// Method creates a modifier that sets the specified string as the request method -func Method(method string) func(*http.Request) error { - return func(req *http.Request) error { - req.Method = method - return nil +// NewAPIClient returns a docker API client configured from environment variables +func NewAPIClient(t assert.TestingT, ops ...func(*client.Client) error) client.APIClient { + ops = append([]func(*client.Client) error{client.FromEnv}, ops...) + clt, err := client.NewClientWithOpts(ops...) + assert.NilError(t, err) + return clt +} + +// DaemonTime provides the current time on the daemon host +func DaemonTime(ctx context.Context, t assert.TestingT, client client.APIClient, testEnv *environment.Execution) time.Time { + if testEnv.IsLocalDaemon() { + return time.Now() } + + info, err := client.Info(ctx) + assert.NilError(t, err) + + dt, err := time.Parse(time.RFC3339Nano, info.SystemTime) + assert.NilError(t, err, "invalid time format in GET /info response") + return dt } -// RawString sets the specified string as body for the request -func RawString(content string) func(*http.Request) error { - return RawContent(ioutil.NopCloser(strings.NewReader(content))) -} - -// RawContent sets the specified reader as body for the request -func RawContent(reader io.ReadCloser) func(*http.Request) error { - return func(req *http.Request) error { - req.Body = reader - return nil - } -} - -// ContentType sets the specified Content-Type request header -func ContentType(contentType string) func(*http.Request) error { - return func(req *http.Request) error { - req.Header.Set("Content-Type", contentType) - return nil - } -} - -// JSON sets the Content-Type request header to json -func JSON(req *http.Request) error { - return ContentType("application/json")(req) -} - -// JSONBody creates a modifier that encodes the specified data to a JSON string and set it as request body. It also sets -// the Content-Type header of the request. -func JSONBody(data interface{}) func(*http.Request) error { - return func(req *http.Request) error { - jsonData := bytes.NewBuffer(nil) - if err := json.NewEncoder(jsonData).Encode(data); err != nil { - return err - } - req.Body = ioutil.NopCloser(jsonData) - req.Header.Set("Content-Type", "application/json") - return nil - } +// DaemonUnixTime returns the current time on the daemon host with nanoseconds precision. +// It return the time formatted how the client sends timestamps to the server. +func DaemonUnixTime(ctx context.Context, t assert.TestingT, client client.APIClient, testEnv *environment.Execution) string { + dt := DaemonTime(ctx, t, client, testEnv) + return fmt.Sprintf("%d.%09d", dt.Unix(), int64(dt.Nanosecond())) } // Post creates and execute a POST request on the specified host and endpoint, with the specified request modifiers -func Post(endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { +func Post(endpoint string, modifiers ...func(*Options)) (*http.Response, io.ReadCloser, error) { return Do(endpoint, append(modifiers, Method(http.MethodPost))...) } // Delete creates and execute a DELETE request on the specified host and endpoint, with the specified request modifiers -func Delete(endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { +func Delete(endpoint string, modifiers ...func(*Options)) (*http.Response, io.ReadCloser, error) { return Do(endpoint, append(modifiers, Method(http.MethodDelete))...) } // Get creates and execute a GET request on the specified host and endpoint, with the specified request modifiers -func Get(endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { +func Get(endpoint string, modifiers ...func(*Options)) (*http.Response, io.ReadCloser, error) { return Do(endpoint, modifiers...) } // Do creates and execute a request on the specified endpoint, with the specified request modifiers -func Do(endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { - return DoOnHost(DaemonHost(), endpoint, modifiers...) -} - -// DoOnHost creates and execute a request on the specified host and endpoint, with the specified request modifiers -func DoOnHost(host, endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { - req, err := newRequest(host, endpoint, modifiers...) +func Do(endpoint string, modifiers ...func(*Options)) (*http.Response, io.ReadCloser, error) { + opts := &Options{ + host: DaemonHost(), + } + for _, mod := range modifiers { + mod(opts) + } + req, err := newRequest(endpoint, opts) if err != nil { return nil, nil, err } - client, err := newHTTPClient(host) + client, err := newHTTPClient(opts.host) if err != nil { return nil, nil, err } @@ -111,11 +94,17 @@ func DoOnHost(host, endpoint string, modifiers ...func(*http.Request) error) (*h return resp, body, err } +// ReadBody read the specified ReadCloser content and returns it +func ReadBody(b io.ReadCloser) ([]byte, error) { + defer b.Close() + return ioutil.ReadAll(b) +} + // newRequest creates a new http Request to the specified host and endpoint, with the specified request modifiers -func newRequest(host, endpoint string, modifiers ...func(*http.Request) error) (*http.Request, error) { - hostUrl, err := dclient.ParseHostURL(host) +func newRequest(endpoint string, opts *Options) (*http.Request, error) { + hostURL, err := client.ParseHostURL(opts.host) if err != nil { - return nil, errors.Wrapf(err, "failed parsing url %q", host) + return nil, errors.Wrapf(err, "failed parsing url %q", opts.host) } req, err := http.NewRequest("GET", endpoint, nil) if err != nil { @@ -127,13 +116,14 @@ func newRequest(host, endpoint string, modifiers ...func(*http.Request) error) ( } else { req.URL.Scheme = "http" } - req.URL.Host = hostUrl.Host + req.URL.Host = hostURL.Host - for _, config := range modifiers { + for _, config := range opts.requestModifiers { if err := config(req); err != nil { return nil, err } } + return req, nil } @@ -141,12 +131,12 @@ func newRequest(host, endpoint string, modifiers ...func(*http.Request) error) ( // TODO: Share more code with client.defaultHTTPClient func newHTTPClient(host string) (*http.Client, error) { // FIXME(vdemeester) 10*time.Second timeout of SockRequest… ? - hostUrl, err := dclient.ParseHostURL(host) + hostURL, err := client.ParseHostURL(host) if err != nil { return nil, err } transport := new(http.Transport) - if hostUrl.Scheme == "tcp" && os.Getenv("DOCKER_TLS_VERIFY") != "" { + if hostURL.Scheme == "tcp" && os.Getenv("DOCKER_TLS_VERIFY") != "" { // Setup the socket TLS configuration. tlsConfig, err := getTLSConfig() if err != nil { @@ -155,51 +145,10 @@ func newHTTPClient(host string) (*http.Client, error) { transport = &http.Transport{TLSClientConfig: tlsConfig} } transport.DisableKeepAlives = true - err = sockets.ConfigureTransport(transport, hostUrl.Scheme, hostUrl.Host) + err = sockets.ConfigureTransport(transport, hostURL.Scheme, hostURL.Host) return &http.Client{Transport: transport}, err } -// NewClient returns a new Docker API client -// Deprecated: Use Execution.APIClient() -func NewClient() (dclient.APIClient, error) { - return dclient.NewClientWithOpts(dclient.WithHost(DaemonHost())) -} - -// ReadBody read the specified ReadCloser content and returns it -func ReadBody(b io.ReadCloser) ([]byte, error) { - defer b.Close() - return ioutil.ReadAll(b) -} - -// SockConn opens a connection on the specified socket -func SockConn(timeout time.Duration, daemon string) (net.Conn, error) { - daemonURL, err := url.Parse(daemon) - if err != nil { - return nil, errors.Wrapf(err, "could not parse url %q", daemon) - } - - var c net.Conn - switch daemonURL.Scheme { - case "npipe": - return npipeDial(daemonURL.Path, timeout) - case "unix": - return net.DialTimeout(daemonURL.Scheme, daemonURL.Path, timeout) - case "tcp": - if os.Getenv("DOCKER_TLS_VERIFY") != "" { - // Setup the socket TLS configuration. - tlsConfig, err := getTLSConfig() - if err != nil { - return nil, err - } - dialer := &net.Dialer{Timeout: timeout} - return tls.DialWithDialer(dialer, daemonURL.Scheme, daemonURL.Host, tlsConfig) - } - return net.DialTimeout(daemonURL.Scheme, daemonURL.Host, timeout) - default: - return c, errors.Errorf("unknown scheme %v (%s)", daemonURL.Scheme, daemon) - } -} - func getTLSConfig() (*tls.Config, error) { dockerCertPath := os.Getenv("DOCKER_CERT_PATH") @@ -228,3 +177,32 @@ func DaemonHost() string { } return daemonURLStr } + +// SockConn opens a connection on the specified socket +func SockConn(timeout time.Duration, daemon string) (net.Conn, error) { + daemonURL, err := url.Parse(daemon) + if err != nil { + return nil, errors.Wrapf(err, "could not parse url %q", daemon) + } + + var c net.Conn + switch daemonURL.Scheme { + case "npipe": + return npipeDial(daemonURL.Path, timeout) + case "unix": + return net.DialTimeout(daemonURL.Scheme, daemonURL.Path, timeout) + case "tcp": + if os.Getenv("DOCKER_TLS_VERIFY") != "" { + // Setup the socket TLS configuration. + tlsConfig, err := getTLSConfig() + if err != nil { + return nil, err + } + dialer := &net.Dialer{Timeout: timeout} + return tls.DialWithDialer(dialer, daemonURL.Scheme, daemonURL.Host, tlsConfig) + } + return net.DialTimeout(daemonURL.Scheme, daemonURL.Host, timeout) + default: + return c, errors.Errorf("unknown scheme %v (%s)", daemonURL.Scheme, daemon) + } +}