1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package logging
- import (
- "bytes"
- "context"
- "runtime"
- "strings"
- "testing"
- "time"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/api/types/container"
- "github.com/docker/docker/pkg/stdcopy"
- "github.com/docker/docker/testutil/daemon"
- "gotest.tools/v3/assert"
- )
- // TestReadPluginNoRead tests that reads are supported even if the plugin isn't capable.
- func TestReadPluginNoRead(t *testing.T) {
- if runtime.GOOS == "windows" {
- t.Skip("no unix domain sockets on Windows")
- }
- t.Parallel()
- d := daemon.New(t)
- d.StartWithBusybox(t, "--iptables=false")
- defer d.Stop(t)
- client, err := d.NewClient()
- assert.Assert(t, err)
- createPlugin(t, client, "test", "discard", asLogDriver)
- ctx := context.Background()
- err = client.PluginEnable(ctx, "test", types.PluginEnableOptions{Timeout: 30})
- assert.Check(t, err)
- d.Stop(t)
- cfg := &container.Config{
- Image: "busybox",
- Cmd: []string{"/bin/echo", "hello world"},
- }
- for desc, test := range map[string]struct {
- dOpts []string
- logsSupported bool
- }{
- "default": {logsSupported: true},
- "disabled caching": {[]string{"--log-opt=cache-disabled=true"}, false},
- "explicitly enabled caching": {[]string{"--log-opt=cache-disabled=false"}, true},
- } {
- t.Run(desc, func(t *testing.T) {
- d.Start(t, append([]string{"--iptables=false"}, test.dOpts...)...)
- defer d.Stop(t)
- c, err := client.ContainerCreate(ctx,
- cfg,
- &container.HostConfig{LogConfig: container.LogConfig{Type: "test"}},
- nil,
- nil,
- "",
- )
- assert.Assert(t, err)
- defer client.ContainerRemove(ctx, c.ID, types.ContainerRemoveOptions{Force: true})
- err = client.ContainerStart(ctx, c.ID, types.ContainerStartOptions{})
- assert.Assert(t, err)
- logs, err := client.ContainerLogs(ctx, c.ID, types.ContainerLogsOptions{ShowStdout: true})
- if !test.logsSupported {
- assert.Assert(t, err != nil)
- return
- }
- assert.Assert(t, err)
- defer logs.Close()
- buf := bytes.NewBuffer(nil)
- errCh := make(chan error, 1)
- go func() {
- _, err := stdcopy.StdCopy(buf, buf, logs)
- errCh <- err
- }()
- select {
- case <-time.After(60 * time.Second):
- t.Fatal("timeout waiting for IO to complete")
- case err := <-errCh:
- assert.Assert(t, err)
- }
- assert.Assert(t, strings.TrimSpace(buf.String()) == "hello world", buf.Bytes())
- })
- }
- }
|