1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Move integration-cli/request to internal/test/request…

… and change a bit the method signature

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
Vincent Demeester 2018-04-17 10:22:04 +02:00
parent 9722214c8a
commit 42f6fdf059
No known key found for this signature in database
GPG key ID: 083CC6FD6EB699A3
59 changed files with 239 additions and 239 deletions

View file

@ -118,21 +118,6 @@ func (d *Daemon) WaitRun(contID string) error {
return WaitInspectWithArgs(d.dockerBinary, contID, "{{.State.Running}}", "true", 10*time.Second, args...) 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. // WaitInspectWithArgs waits for the specified expression to be equals to the specified expected string in the given time.
// Deprecated: use cli.WaitCmd instead // Deprecated: use cli.WaitCmd instead
func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time.Duration, arg ...string) error { func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time.Duration, arg ...string) error {

View file

@ -15,7 +15,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "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/docker/docker/pkg/stdcopy"
"github.com/go-check/check" "github.com/go-check/check"
"golang.org/x/net/websocket" "golang.org/x/net/websocket"

View file

@ -13,10 +13,10 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration-cli/checker" "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/fakecontext"
"github.com/docker/docker/internal/test/fakegit" "github.com/docker/docker/internal/test/fakegit"
"github.com/docker/docker/internal/test/fakestorage" "github.com/docker/docker/internal/test/fakestorage"
"github.com/docker/docker/internal/test/request"
"github.com/go-check/check" "github.com/go-check/check"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -24,7 +24,7 @@ import (
"github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/checker"
"github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli"
"github.com/docker/docker/integration-cli/cli/build" "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/ioutils"
"github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/mount"
"github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringid"
@ -1254,13 +1254,13 @@ func (s *DockerSuite) TestContainerAPIChunkedEncoding(c *check.C) {
"OpenStdin": true, "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 // This is a cheat to make the http request do chunked encoding
// Otherwise (just setting the Content-Encoding to chunked) net/http will overwrite // Otherwise (just setting the Content-Encoding to chunked) net/http will overwrite
// https://golang.org/src/pkg/net/http/request.go?s=11980:12172 // https://golang.org/src/pkg/net/http/request.go?s=11980:12172
req.ContentLength = -1 req.ContentLength = -1
return nil return nil
}) }))
c.Assert(err, checker.IsNil, check.Commentf("error creating container with chunked encoding")) c.Assert(err, checker.IsNil, check.Commentf("error creating container with chunked encoding"))
defer resp.Body.Close() defer resp.Body.Close()
c.Assert(resp.StatusCode, checker.Equals, http.StatusCreated) c.Assert(resp.StatusCode, checker.Equals, http.StatusCreated)

View file

@ -7,7 +7,7 @@ import (
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -10,7 +10,7 @@ import (
"sync" "sync"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -15,7 +15,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
"golang.org/x/net/context" "golang.org/x/net/context"
) )

View file

@ -11,7 +11,7 @@ import (
"github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/checker"
"github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli"
"github.com/docker/docker/integration-cli/cli/build" "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" "github.com/go-check/check"
"golang.org/x/net/context" "golang.org/x/net/context"
) )

View file

@ -14,7 +14,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "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/docker/docker/pkg/stdcopy"
"github.com/go-check/check" "github.com/go-check/check"
"golang.org/x/net/context" "golang.org/x/net/context"

View file

@ -12,7 +12,7 @@ import (
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/network"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -15,7 +15,7 @@ import (
"github.com/docker/docker/api/types/versions" "github.com/docker/docker/api/types/versions"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
"golang.org/x/net/context" "golang.org/x/net/context"
) )

View file

@ -22,8 +22,8 @@ import (
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/checker"
"github.com/docker/docker/integration-cli/daemon" "github.com/docker/docker/integration-cli/daemon"
"github.com/docker/docker/integration-cli/request"
testdaemon "github.com/docker/docker/internal/test/daemon" testdaemon "github.com/docker/docker/internal/test/daemon"
"github.com/docker/docker/internal/test/request"
"github.com/docker/swarmkit/ca" "github.com/docker/swarmkit/ca"
"github.com/go-check/check" "github.com/go-check/check"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
@ -242,7 +242,7 @@ func (s *DockerSwarmSuite) TestAPISwarmPromoteDemote(c *check.C) {
node := d1.GetNode(c, d1.NodeID()) node := d1.GetNode(c, d1.NodeID())
node.Spec.Role = swarm.NodeRoleWorker node.Spec.Role = swarm.NodeRoleWorker
url := fmt.Sprintf("/nodes/%s/update?version=%d", node.ID, node.Version.Index) 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) c.Assert(err, checker.IsNil)
b, err := request.ReadBody(body) b, err := request.ReadBody(body)
c.Assert(err, checker.IsNil) c.Assert(err, checker.IsNil)
@ -529,7 +529,7 @@ func (s *DockerSwarmSuite) TestAPISwarmInvalidAddress(c *check.C) {
req := swarm.InitRequest{ req := swarm.InitRequest{
ListenAddr: "", 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(err, checker.IsNil)
c.Assert(res.StatusCode, checker.Equals, http.StatusBadRequest) 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", ListenAddr: "0.0.0.0:2377",
RemoteAddrs: []string{""}, 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(err, checker.IsNil)
c.Assert(res.StatusCode, checker.Equals, http.StatusBadRequest) c.Assert(res.StatusCode, checker.Equals, http.StatusBadRequest)
} }

View file

@ -10,7 +10,7 @@ import (
"github.com/docker/docker/api" "github.com/docker/docker/api"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -13,7 +13,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/checker" "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/docker/docker/pkg/parsers/kernel"
"github.com/go-check/check" "github.com/go-check/check"
"github.com/kr/pty" "github.com/kr/pty"

View file

@ -8,7 +8,7 @@ import (
"strings" "strings"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -6,7 +6,7 @@ import (
"fmt" "fmt"
"github.com/docker/docker/integration-cli/checker" "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" "github.com/go-check/check"
) )

View file

@ -18,7 +18,7 @@ import (
"github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/checker"
"github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli"
"github.com/docker/docker/integration-cli/daemon" "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/go-check/check"
"github.com/gotestyourself/gotestyourself/icmd" "github.com/gotestyourself/gotestyourself/icmd"
"golang.org/x/net/context" "golang.org/x/net/context"

View file

@ -8,9 +8,9 @@ import (
"testing" "testing"
dclient "github.com/docker/docker/client" 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/daemon"
"github.com/docker/docker/internal/test/fakecontext" "github.com/docker/docker/internal/test/fakecontext"
"github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/moby/buildkit/session" "github.com/moby/buildkit/session"
@ -65,8 +65,9 @@ func TestBuildWithSession(t *testing.T) {
// rebuild with regular tar, confirm cache still applies // rebuild with regular tar, confirm cache still applies
fctx.Add("Dockerfile", dockerfile) fctx.Add("Dockerfile", dockerfile)
// FIXME(vdemeester) use sock here // FIXME(vdemeester) use sock here
res, body, err := request.DoOnHost(d.Sock(), res, body, err := request.Do(
"/build", "/build",
request.Host(d.Sock()),
request.Method(http.MethodPost), request.Method(http.MethodPost),
request.RawContent(fctx.AsTarReader(t)), request.RawContent(fctx.AsTarReader(t)),
request.ContentType("application/x-tar")) request.ContentType("application/x-tar"))
@ -103,14 +104,14 @@ func testBuildWithSession(t *testing.T, client dclient.APIClient, daemonSock str
g.Go(func() error { g.Go(func() error {
// FIXME use sock here // FIXME use sock here
res, body, err := request.DoOnHost( res, body, err := request.Do(
daemonSock,
"/build?remote=client-session&session="+sess.ID(), "/build?remote=client-session&session="+sess.ID(),
request.Host(daemonSock),
request.Method(http.MethodPost), request.Method(http.MethodPost),
func(req *http.Request) error { request.With(func(req *http.Request) error {
req.Body = ioutil.NopCloser(strings.NewReader(dockerfile)) req.Body = ioutil.NopCloser(strings.NewReader(dockerfile))
return nil return nil
}, }),
) )
if err != nil { if err != nil {
return err return err

View file

@ -13,8 +13,8 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/versions" "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/fakecontext"
"github.com/docker/docker/internal/test/request"
"github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/jsonmessage"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -7,7 +7,7 @@ import (
"github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network" "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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/skip" "github.com/gotestyourself/gotestyourself/skip"
) )

View file

@ -7,7 +7,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/integration/internal/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/docker/docker/pkg/archive"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -8,7 +8,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/strslice" "github.com/docker/docker/api/types/strslice"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
) )

View file

@ -9,8 +9,8 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/integration/internal/container" "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/daemon"
"github.com/docker/docker/internal/test/request"
"github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/jsonmessage"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -9,7 +9,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration/internal/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/poll" "github.com/gotestyourself/gotestyourself/poll"
) )

View file

@ -8,7 +8,7 @@ import (
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -8,7 +8,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/client" "github.com/docker/docker/client"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -9,7 +9,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/skip" "github.com/gotestyourself/gotestyourself/skip"

View file

@ -7,7 +7,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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/stdcopy" "github.com/docker/docker/pkg/stdcopy"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
"github.com/gotestyourself/gotestyourself/skip" "github.com/gotestyourself/gotestyourself/skip"

View file

@ -11,7 +11,7 @@ import (
"github.com/docker/docker/api/types/mount" "github.com/docker/docker/api/types/mount"
"github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/network"
"github.com/docker/docker/client" "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/docker/docker/pkg/system"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -13,7 +13,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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/go-connections/nat" "github.com/docker/go-connections/nat"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -10,7 +10,7 @@ import (
"github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -7,7 +7,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
) )

View file

@ -9,7 +9,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -9,7 +9,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/network"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringid"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"

View file

@ -7,9 +7,9 @@ import (
"time" "time"
"github.com/docker/docker/api/types" "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/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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -9,7 +9,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -9,7 +9,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
"github.com/gotestyourself/gotestyourself/icmd" "github.com/gotestyourself/gotestyourself/icmd"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -9,7 +9,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/poll" "github.com/gotestyourself/gotestyourself/poll"

View file

@ -7,7 +7,7 @@ import (
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -6,7 +6,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
) )

View file

@ -9,7 +9,7 @@ import (
"testing" "testing"
"github.com/docker/docker/api/types" "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" "github.com/docker/docker/internal/testutil"
) )

View file

@ -6,7 +6,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/docker/docker/integration/internal/request" "github.com/docker/docker/internal/test/request"
"github.com/docker/docker/internal/testutil" "github.com/docker/docker/internal/testutil"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -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()))
}

View file

@ -5,7 +5,7 @@ import (
"testing" "testing"
"github.com/docker/docker/api/types" "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" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
) )

View file

@ -4,7 +4,7 @@ import (
"net/http" "net/http"
"testing" "testing"
req "github.com/docker/docker/integration-cli/request" req "github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/skip" "github.com/gotestyourself/gotestyourself/skip"
@ -15,11 +15,11 @@ func TestSessionCreate(t *testing.T) {
defer setupTest(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("X-Docker-Expose-Session-Uuid", "testsessioncreate") // so we don't block default name if something else is using it
r.Header.Set("Upgrade", "h2c") r.Header.Set("Upgrade", "h2c")
return nil return nil
}) }))
assert.NilError(t, err) assert.NilError(t, err)
assert.NilError(t, body.Close()) assert.NilError(t, body.Close())
assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusSwitchingProtocols)) assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusSwitchingProtocols))
@ -36,10 +36,10 @@ func TestSessionCreateWithBadUpgrade(t *testing.T) {
assert.NilError(t, err) assert.NilError(t, err)
assert.Check(t, is.Contains(string(buf), "no upgrade")) 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") r.Header.Set("Upgrade", "foo")
return nil return nil
}) }))
assert.NilError(t, err) assert.NilError(t, err)
assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusBadRequest)) assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusBadRequest))
buf, err = req.ReadBody(body) buf, err = req.ReadBody(body)

View file

@ -13,9 +13,9 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/strslice" "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/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/docker/docker/pkg/jsonmessage"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"

View file

@ -6,8 +6,8 @@ import (
"net/http" "net/http"
"testing" "testing"
req "github.com/docker/docker/integration-cli/request" "github.com/docker/docker/internal/test/request"
"github.com/docker/docker/integration/internal/request" req "github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"golang.org/x/net/context" "golang.org/x/net/context"

View file

@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/docker/docker/integration/internal/request" "github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"golang.org/x/net/context" "golang.org/x/net/context"

View file

@ -4,8 +4,8 @@ import (
"testing" "testing"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/integration/internal/request"
"github.com/docker/docker/integration/internal/requirement" "github.com/docker/docker/integration/internal/requirement"
"github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"github.com/gotestyourself/gotestyourself/skip" "github.com/gotestyourself/gotestyourself/skip"

View file

@ -3,7 +3,7 @@ package system // import "github.com/docker/docker/integration/system"
import ( import (
"testing" "testing"
"github.com/docker/docker/integration/internal/request" "github.com/docker/docker/internal/test/request"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"
is "github.com/gotestyourself/gotestyourself/assert/cmp" is "github.com/gotestyourself/gotestyourself/assert/cmp"
"golang.org/x/net/context" "golang.org/x/net/context"

View file

@ -11,7 +11,7 @@ import (
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
volumetypes "github.com/docker/docker/api/types/volume" volumetypes "github.com/docker/docker/api/types/volume"
"github.com/docker/docker/integration/internal/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/docker/docker/internal/testutil"
"github.com/google/go-cmp/cmp/cmpopts" "github.com/google/go-cmp/cmp/cmpopts"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"

View file

@ -8,7 +8,7 @@ import (
) )
// ActiveContainers returns the list of ids of the currently running containers // 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) cli := d.NewClientT(t)
defer cli.Close() defer cli.Close()
@ -23,7 +23,7 @@ func (d *Daemon) ActiveContainers(t testingT) []string {
} }
// FindContainerIP returns the ip of the specified container // 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) cli := d.NewClientT(t)
defer cli.Close() defer cli.Close()

View file

@ -16,7 +16,7 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/events"
"github.com/docker/docker/client" "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/opts"
"github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/ioutils"
"github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringid"
@ -479,7 +479,7 @@ func (d *Daemon) ReloadConfig() error {
errCh := make(chan error) errCh := make(chan error)
started := make(chan struct{}) started := make(chan struct{})
go func() { go func() {
_, body, err := request.DoOnHost(d.Sock(), "/events", request.Method(http.MethodGet)) _, body, err := request.Get("/events", request.Host(d.Sock()))
close(started) close(started)
if err != nil { if err != nil {
errCh <- err errCh <- err

View file

@ -14,9 +14,9 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
containertypes "github.com/docker/docker/api/types/container" containertypes "github.com/docker/docker/api/types/container"
"github.com/docker/docker/client" "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/environment"
"github.com/docker/docker/internal/test/fakecontext" "github.com/docker/docker/internal/test/fakecontext"
"github.com/docker/docker/internal/test/request"
"github.com/docker/docker/internal/testutil" "github.com/docker/docker/internal/testutil"
"github.com/docker/go-connections/nat" "github.com/docker/go-connections/nat"
"github.com/gotestyourself/gotestyourself/assert" "github.com/gotestyourself/gotestyourself/assert"

View file

@ -1,6 +1,6 @@
// +build !windows // +build !windows
package request // import "github.com/docker/docker/integration-cli/request" package request
import ( import (
"net" "net"

View file

@ -1,4 +1,4 @@
package request // import "github.com/docker/docker/integration-cli/request" package request
import ( import (
"net" "net"

View file

@ -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
})
}

View file

@ -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 ( import (
"bytes" "context"
"crypto/tls" "crypto/tls"
"encoding/json" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"net" "net"
@ -11,92 +11,75 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"time" "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/opts"
"github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/ioutils"
"github.com/docker/go-connections/sockets" "github.com/docker/go-connections/sockets"
"github.com/docker/go-connections/tlsconfig" "github.com/docker/go-connections/tlsconfig"
"github.com/gotestyourself/gotestyourself/assert"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// Method creates a modifier that sets the specified string as the request method // NewAPIClient returns a docker API client configured from environment variables
func Method(method string) func(*http.Request) error { func NewAPIClient(t assert.TestingT, ops ...func(*client.Client) error) client.APIClient {
return func(req *http.Request) error { ops = append([]func(*client.Client) error{client.FromEnv}, ops...)
req.Method = method clt, err := client.NewClientWithOpts(ops...)
return nil 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 // DaemonUnixTime returns the current time on the daemon host with nanoseconds precision.
func RawString(content string) func(*http.Request) error { // It return the time formatted how the client sends timestamps to the server.
return RawContent(ioutil.NopCloser(strings.NewReader(content))) 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()))
// 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
}
} }
// Post creates and execute a POST request on the specified host and endpoint, with the specified request modifiers // 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))...) 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 // 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))...) 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 // 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...) return Do(endpoint, modifiers...)
} }
// Do creates and execute a request on the specified endpoint, with the specified request 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) { func Do(endpoint string, modifiers ...func(*Options)) (*http.Response, io.ReadCloser, error) {
return DoOnHost(DaemonHost(), endpoint, modifiers...) opts := &Options{
} host: DaemonHost(),
}
// DoOnHost creates and execute a request on the specified host and endpoint, with the specified request modifiers for _, mod := range modifiers {
func DoOnHost(host, endpoint string, modifiers ...func(*http.Request) error) (*http.Response, io.ReadCloser, error) { mod(opts)
req, err := newRequest(host, endpoint, modifiers...) }
req, err := newRequest(endpoint, opts)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
client, err := newHTTPClient(host) client, err := newHTTPClient(opts.host)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -111,11 +94,17 @@ func DoOnHost(host, endpoint string, modifiers ...func(*http.Request) error) (*h
return resp, body, err 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 // 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) { func newRequest(endpoint string, opts *Options) (*http.Request, error) {
hostUrl, err := dclient.ParseHostURL(host) hostURL, err := client.ParseHostURL(opts.host)
if err != nil { 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) req, err := http.NewRequest("GET", endpoint, nil)
if err != nil { if err != nil {
@ -127,13 +116,14 @@ func newRequest(host, endpoint string, modifiers ...func(*http.Request) error) (
} else { } else {
req.URL.Scheme = "http" 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 { if err := config(req); err != nil {
return nil, err return nil, err
} }
} }
return req, nil return req, nil
} }
@ -141,12 +131,12 @@ func newRequest(host, endpoint string, modifiers ...func(*http.Request) error) (
// TODO: Share more code with client.defaultHTTPClient // TODO: Share more code with client.defaultHTTPClient
func newHTTPClient(host string) (*http.Client, error) { func newHTTPClient(host string) (*http.Client, error) {
// FIXME(vdemeester) 10*time.Second timeout of SockRequest… ? // FIXME(vdemeester) 10*time.Second timeout of SockRequest… ?
hostUrl, err := dclient.ParseHostURL(host) hostURL, err := client.ParseHostURL(host)
if err != nil { if err != nil {
return nil, err return nil, err
} }
transport := new(http.Transport) 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. // Setup the socket TLS configuration.
tlsConfig, err := getTLSConfig() tlsConfig, err := getTLSConfig()
if err != nil { if err != nil {
@ -155,51 +145,10 @@ func newHTTPClient(host string) (*http.Client, error) {
transport = &http.Transport{TLSClientConfig: tlsConfig} transport = &http.Transport{TLSClientConfig: tlsConfig}
} }
transport.DisableKeepAlives = true 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 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) { func getTLSConfig() (*tls.Config, error) {
dockerCertPath := os.Getenv("DOCKER_CERT_PATH") dockerCertPath := os.Getenv("DOCKER_CERT_PATH")
@ -228,3 +177,32 @@ func DaemonHost() string {
} }
return daemonURLStr 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)
}
}