Merge pull request #3443 from thaJeztah/remove_ioutil

Remove uses of deprecated io/ioutil, and use new t.TempDir() and t.Cleanup() in tests
This commit is contained in:
Sebastiaan van Stijn 2022-02-25 16:57:40 +01:00 committed by GitHub
commit ae3b0b34c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
144 changed files with 584 additions and 911 deletions

View File

@ -2,6 +2,7 @@ linters:
enable: enable:
- bodyclose - bodyclose
- deadcode - deadcode
- depguard
- dogsled - dogsled
- gocyclo - gocyclo
- goimports - goimports
@ -33,6 +34,13 @@ run:
- .*generated.* - .*generated.*
linters-settings: linters-settings:
depguard:
list-type: blacklist
include-go-root: true
packages:
# The io/ioutil package has been deprecated.
# https://go.dev/doc/go1.16#ioutil
- io/ioutil
gocyclo: gocyclo:
min-complexity: 16 min-complexity: 16
govet: govet:

View File

@ -1,7 +1,6 @@
package manager package manager
import ( import (
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -57,12 +56,12 @@ func getPluginDirs(dockerCli command.Cli) ([]string, error) {
} }
func addPluginCandidatesFromDir(res map[string][]string, d string) error { func addPluginCandidatesFromDir(res map[string][]string, d string) error {
dentries, err := ioutil.ReadDir(d) dentries, err := os.ReadDir(d)
if err != nil { if err != nil {
return err return err
} }
for _, dentry := range dentries { for _, dentry := range dentries {
switch dentry.Mode() & os.ModeType { switch dentry.Type() & os.ModeType {
case 0, os.ModeSymlink: case 0, os.ModeSymlink:
// Regular file or symlink, keep going // Regular file or symlink, keep going
default: default:

View File

@ -1,7 +1,7 @@
package checkpoint package checkpoint
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -41,7 +41,7 @@ func TestCheckpointCreateErrors(t *testing.T) {
}) })
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package checkpoint package checkpoint
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -41,7 +41,7 @@ func TestCheckpointListErrors(t *testing.T) {
}) })
cmd := newListCommand(cli) cmd := newListCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package checkpoint package checkpoint
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -40,7 +40,7 @@ func TestCheckpointRemoveErrors(t *testing.T) {
}) })
cmd := newRemoveCommand(cli) cmd := newRemoveCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -3,7 +3,6 @@ package command
import ( import (
"context" "context"
"io" "io"
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
@ -275,7 +274,7 @@ func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile.
store := &ContextStoreWithDefault{ store := &ContextStoreWithDefault{
Store: store.New(cliconfig.ContextStoreDir(), storeConfig), Store: store.New(cliconfig.ContextStoreDir(), storeConfig),
Resolver: func() (*DefaultContext, error) { Resolver: func() (*DefaultContext, error) {
return ResolveDefaultContext(opts, configFile, storeConfig, ioutil.Discard) return ResolveDefaultContext(opts, configFile, storeConfig, io.Discard)
}, },
} }
contextName, err := resolveContextName(opts, configFile, store) contextName, err := resolveContextName(opts, configFile, store)

View File

@ -4,7 +4,7 @@ import (
"bytes" "bytes"
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"os" "os"
@ -225,23 +225,23 @@ func TestNewDockerCliAndOperators(t *testing.T) {
outbuf := bytes.NewBuffer(nil) outbuf := bytes.NewBuffer(nil)
errbuf := bytes.NewBuffer(nil) errbuf := bytes.NewBuffer(nil)
err = cli.Apply( err = cli.Apply(
WithInputStream(ioutil.NopCloser(inbuf)), WithInputStream(io.NopCloser(inbuf)),
WithOutputStream(outbuf), WithOutputStream(outbuf),
WithErrorStream(errbuf), WithErrorStream(errbuf),
) )
assert.NilError(t, err) assert.NilError(t, err)
// Check input stream // Check input stream
inputStream, err := ioutil.ReadAll(cli.In()) inputStream, err := io.ReadAll(cli.In())
assert.NilError(t, err) assert.NilError(t, err)
assert.Equal(t, string(inputStream), "input") assert.Equal(t, string(inputStream), "input")
// Check output stream // Check output stream
fmt.Fprintf(cli.Out(), "output") fmt.Fprintf(cli.Out(), "output")
outputStream, err := ioutil.ReadAll(outbuf) outputStream, err := io.ReadAll(outbuf)
assert.NilError(t, err) assert.NilError(t, err)
assert.Equal(t, string(outputStream), "output") assert.Equal(t, string(outputStream), "output")
// Check error stream // Check error stream
fmt.Fprintf(cli.Err(), "error") fmt.Fprintf(cli.Err(), "error")
errStream, err := ioutil.ReadAll(errbuf) errStream, err := io.ReadAll(errbuf)
assert.NilError(t, err) assert.NilError(t, err)
assert.Equal(t, string(errStream), "error") assert.Equal(t, string(errStream), "error")
} }

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -61,7 +60,7 @@ func RunConfigCreate(dockerCli command.Cli, options CreateOptions) error {
defer file.Close() defer file.Close()
} }
configData, err := ioutil.ReadAll(in) configData, err := io.ReadAll(in)
if err != nil { if err != nil {
return errors.Errorf("Error reading content from %q: %v", options.File, err) return errors.Errorf("Error reading content from %q: %v", options.File, err)
} }

View File

@ -1,7 +1,8 @@
package config package config
import ( import (
"io/ioutil" "io"
"os"
"path/filepath" "path/filepath"
"reflect" "reflect"
"strings" "strings"
@ -46,7 +47,7 @@ func TestConfigCreateErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -82,7 +83,7 @@ func TestConfigCreateWithLabels(t *testing.T) {
} }
name := "foo" name := "foo"
data, err := ioutil.ReadFile(filepath.Join("testdata", configDataFile)) data, err := os.ReadFile(filepath.Join("testdata", configDataFile))
assert.NilError(t, err) assert.NilError(t, err)
expected := swarm.ConfigSpec{ expected := swarm.ConfigSpec{

View File

@ -2,7 +2,7 @@ package config
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -59,7 +59,7 @@ func TestConfigInspectErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package config package config
import ( import (
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -40,7 +40,7 @@ func TestConfigListErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package config package config
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -36,7 +36,7 @@ func TestConfigRemoveErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -73,7 +73,7 @@ func TestConfigRemoveContinueAfterError(t *testing.T) {
cmd := newConfigRemoveCommand(cli) cmd := newConfigRemoveCommand(cli)
cmd.SetArgs(names) cmd.SetArgs(names)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.Error(t, cmd.Execute(), "error removing config: foo") assert.Error(t, cmd.Execute(), "error removing config: foo")
assert.Check(t, is.DeepEqual(names, removedConfigs)) assert.Check(t, is.DeepEqual(names, removedConfigs))
} }

View File

@ -2,7 +2,7 @@ package container
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
@ -71,7 +71,7 @@ func TestNewAttachCommandErrors(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewAttachCommand(test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc})) cmd := NewAttachCommand(test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }

View File

@ -2,7 +2,6 @@ package container
import ( import (
"io" "io"
"io/ioutil"
"os" "os"
"runtime" "runtime"
"strings" "strings"
@ -54,7 +53,7 @@ func TestRunCopyFromContainerToStdout(t *testing.T) {
fakeClient := &fakeClient{ fakeClient := &fakeClient{
containerCopyFromFunc: func(container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) { containerCopyFromFunc: func(container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
assert.Check(t, is.Equal("container", container)) assert.Check(t, is.Equal("container", container))
return ioutil.NopCloser(strings.NewReader(tarContent)), types.ContainerPathStat{}, nil return io.NopCloser(strings.NewReader(tarContent)), types.ContainerPathStat{}, nil
}, },
} }
options := copyOptions{source: "container:/path", destination: "-"} options := copyOptions{source: "container:/path", destination: "-"}
@ -84,7 +83,7 @@ func TestRunCopyFromContainerToFilesystem(t *testing.T) {
assert.Check(t, is.Equal("", cli.OutBuffer().String())) assert.Check(t, is.Equal("", cli.OutBuffer().String()))
assert.Check(t, is.Equal("", cli.ErrBuffer().String())) assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
content, err := ioutil.ReadFile(destDir.Join("file1")) content, err := os.ReadFile(destDir.Join("file1"))
assert.NilError(t, err) assert.NilError(t, err)
assert.Check(t, is.Equal("content\n", string(content))) assert.Check(t, is.Equal("content\n", string(content)))
} }

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"os" "os"
"runtime" "runtime"
"sort" "sort"
@ -67,7 +66,7 @@ func TestCIDFileCloseWithWrite(t *testing.T) {
content := "id" content := "id"
assert.NilError(t, file.Write(content)) assert.NilError(t, file.Write(content))
actual, err := ioutil.ReadFile(path) actual, err := os.ReadFile(path)
assert.NilError(t, err) assert.NilError(t, err)
assert.Check(t, is.Equal(content, string(actual))) assert.Check(t, is.Equal(content, string(actual)))
@ -130,7 +129,7 @@ func TestCreateContainerImagePullPolicy(t *testing.T) {
}, },
imageCreateFunc: func(parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) { imageCreateFunc: func(parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
defer func() { pullCounter++ }() defer func() { pullCounter++ }()
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
infoFunc: func() (types.Info, error) { infoFunc: func() (types.Info, error) {
return types.Info{IndexServerAddress: "https://indexserver.example.com"}, nil return types.Info{IndexServerAddress: "https://indexserver.example.com"}, nil
@ -194,7 +193,7 @@ func TestNewCreateCommandWithContentTrustErrors(t *testing.T) {
}, test.EnableContentTrust) }, test.EnableContentTrust)
cli.SetNotaryClient(tc.notaryFunc) cli.SetNotaryClient(tc.notaryFunc)
cmd := NewCreateCommand(cli) cmd := NewCreateCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.ErrorContains(t, err, tc.expectedError) assert.ErrorContains(t, err, tc.expectedError)
@ -254,7 +253,7 @@ func TestNewCreateCommandWithWarnings(t *testing.T) {
}, },
}) })
cmd := NewCreateCommand(cli) cmd := NewCreateCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)
@ -306,7 +305,7 @@ func TestCreateContainerWithProxyConfig(t *testing.T) {
}, },
}) })
cmd := NewCreateCommand(cli) cmd := NewCreateCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"image:tag"}) cmd.SetArgs([]string{"image:tag"})
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -2,7 +2,7 @@ package container
import ( import (
"context" "context"
"io/ioutil" "io"
"os" "os"
"testing" "testing"
@ -267,7 +267,7 @@ func TestNewExecCommandErrors(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc}) cli := test.NewFakeCli(&fakeClient{inspectFunc: tc.containerInspectFunc})
cmd := NewExecCommand(cli) cmd := NewExecCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }

View File

@ -2,7 +2,6 @@ package container
import ( import (
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -17,11 +16,11 @@ func TestContainerExportOutputToFile(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{ cli := test.NewFakeCli(&fakeClient{
containerExportFunc: func(container string) (io.ReadCloser, error) { containerExportFunc: func(container string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("bar")), nil return io.NopCloser(strings.NewReader("bar")), nil
}, },
}) })
cmd := NewExportCommand(cli) cmd := NewExportCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"-o", dir.Join("foo"), "container"}) cmd.SetArgs([]string{"-o", dir.Join("foo"), "container"})
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
@ -35,11 +34,11 @@ func TestContainerExportOutputToFile(t *testing.T) {
func TestContainerExportOutputToIrregularFile(t *testing.T) { func TestContainerExportOutputToIrregularFile(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{ cli := test.NewFakeCli(&fakeClient{
containerExportFunc: func(container string) (io.ReadCloser, error) { containerExportFunc: func(container string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("foo")), nil return io.NopCloser(strings.NewReader("foo")), nil
}, },
}) })
cmd := NewExportCommand(cli) cmd := NewExportCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"-o", "/dev/random", "container"}) cmd.SetArgs([]string{"-o", "/dev/random", "container"})
err := cmd.Execute() err := cmd.Execute()

View File

@ -2,7 +2,7 @@ package container
import ( import (
"context" "context"
"io/ioutil" "io"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -89,7 +89,7 @@ func buildContainerListOptions(opts *psOptions) (*types.ContainerListOptions, er
// This shouldn't error out but swallowing the error makes it harder // This shouldn't error out but swallowing the error makes it harder
// to track down if preProcessor issues come up. // to track down if preProcessor issues come up.
if err := tmpl.Execute(ioutil.Discard, optionsProcessor); err != nil { if err := tmpl.Execute(io.Discard, optionsProcessor); err != nil {
return nil, errors.Wrap(err, "failed to execute template") return nil, errors.Wrap(err, "failed to execute template")
} }

View File

@ -2,7 +2,7 @@ package container
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
@ -161,7 +161,7 @@ func TestContainerListErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,6 @@ package container
import ( import (
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -15,7 +14,7 @@ import (
var logFn = func(expectedOut string) func(string, types.ContainerLogsOptions) (io.ReadCloser, error) { var logFn = func(expectedOut string) func(string, types.ContainerLogsOptions) (io.ReadCloser, error) {
return func(container string, opts types.ContainerLogsOptions) (io.ReadCloser, error) { return func(container string, opts types.ContainerLogsOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader(expectedOut)), nil return io.NopCloser(strings.NewReader(expectedOut)), nil
} }
} }

View File

@ -4,7 +4,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "os"
"path" "path"
"reflect" "reflect"
"regexp" "regexp"
@ -845,7 +845,7 @@ func parseSecurityOpts(securityOpts []string) ([]string, error) {
} }
} }
if con[0] == "seccomp" && con[1] != "unconfined" { if con[0] == "seccomp" && con[1] != "unconfined" {
f, err := ioutil.ReadFile(con[1]) f, err := os.ReadFile(con[1])
if err != nil { if err != nil {
return securityOpts, errors.Errorf("opening seccomp profile (%s) failed: %v", con[1], err) return securityOpts, errors.Errorf("opening seccomp profile (%s) failed: %v", con[1], err)
} }

View File

@ -2,7 +2,7 @@ package container
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"os" "os"
"runtime" "runtime"
"strings" "strings"
@ -58,7 +58,7 @@ func parseRun(args []string) (*container.Config, *container.HostConfig, *network
func setupRunFlags() (*pflag.FlagSet, *containerOptions) { func setupRunFlags() (*pflag.FlagSet, *containerOptions) {
flags := pflag.NewFlagSet("run", pflag.ContinueOnError) flags := pflag.NewFlagSet("run", pflag.ContinueOnError)
flags.SetOutput(ioutil.Discard) flags.SetOutput(io.Discard)
flags.Usage = nil flags.Usage = nil
copts := addFlags(flags) copts := addFlags(flags)
return flags, copts return flags, copts

View File

@ -1,7 +1,7 @@
package container package container
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -47,7 +47,7 @@ func TestNewPortCommandOutput(t *testing.T) {
}, },
}, test.EnableContentTrust) }, test.EnableContentTrust)
cmd := NewPortCommand(cli) cmd := NewPortCommand(cli)
cmd.SetErr(ioutil.Discard) cmd.SetErr(io.Discard)
cmd.SetArgs([]string{"some_container", "80"}) cmd.SetArgs([]string{"some_container", "80"})
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -3,7 +3,7 @@ package container
import ( import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"sort" "sort"
"testing" "testing"
@ -27,7 +27,7 @@ func TestRemoveForce(t *testing.T) {
Version: "1.36", Version: "1.36",
}) })
cmd := NewRmCommand(cli) cmd := NewRmCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
t.Run("without force", func(t *testing.T) { t.Run("without force", func(t *testing.T) {
cmd.SetArgs([]string{"nosuchcontainer", "mycontainer"}) cmd.SetArgs([]string{"nosuchcontainer", "mycontainer"})

View File

@ -2,7 +2,7 @@ package container
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -68,7 +68,7 @@ func TestRunCommandWithContentTrustErrors(t *testing.T) {
cli.SetNotaryClient(tc.notaryFunc) cli.SetNotaryClient(tc.notaryFunc)
cmd := NewRunCommand(cli) cmd := NewRunCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err := cmd.Execute() err := cmd.Execute()
assert.Assert(t, err != nil) assert.Assert(t, err != nil)
assert.Assert(t, is.Contains(cli.ErrBuffer().String(), tc.expectedError)) assert.Assert(t, is.Contains(cli.ErrBuffer().String(), tc.expectedError))

View File

@ -2,8 +2,6 @@ package context
import ( import (
"fmt" "fmt"
"io/ioutil"
"os"
"testing" "testing"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -14,9 +12,9 @@ import (
"gotest.tools/v3/assert" "gotest.tools/v3/assert"
) )
func makeFakeCli(t *testing.T, opts ...func(*test.FakeCli)) (*test.FakeCli, func()) { func makeFakeCli(t *testing.T, opts ...func(*test.FakeCli)) *test.FakeCli {
dir, err := ioutil.TempDir("", t.Name()) t.Helper()
assert.NilError(t, err) dir := t.TempDir()
storeConfig := store.NewConfig( storeConfig := store.NewConfig(
func() interface{} { return &command.DockerContext{} }, func() interface{} { return &command.DockerContext{} },
store.EndpointTypeGetter(docker.DockerEndpoint, func() interface{} { return &docker.EndpointMeta{} }), store.EndpointTypeGetter(docker.DockerEndpoint, func() interface{} { return &docker.EndpointMeta{} }),
@ -40,15 +38,12 @@ func makeFakeCli(t *testing.T, opts ...func(*test.FakeCli)) (*test.FakeCli, func
}, nil }, nil
}, },
} }
cleanup := func() {
os.RemoveAll(dir)
}
result := test.NewFakeCli(nil, opts...) result := test.NewFakeCli(nil, opts...)
for _, o := range opts { for _, o := range opts {
o(result) o(result)
} }
result.SetContextStore(store) result.SetContextStore(store)
return result, cleanup return result
} }
func withCliConfig(configFile *configfile.ConfigFile) func(*test.FakeCli) { func withCliConfig(configFile *configfile.ConfigFile) func(*test.FakeCli) {
@ -58,8 +53,7 @@ func withCliConfig(configFile *configfile.ConfigFile) func(*test.FakeCli) {
} }
func TestCreate(t *testing.T) { func TestCreate(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
assert.NilError(t, cli.ContextStore().CreateOrUpdate(store.Metadata{Name: "existing-context"})) assert.NilError(t, cli.ContextStore().CreateOrUpdate(store.Metadata{Name: "existing-context"}))
tests := []struct { tests := []struct {
options CreateOptions options CreateOptions
@ -115,8 +109,7 @@ func assertContextCreateLogging(t *testing.T, cli *test.FakeCli, n string) {
} }
func TestCreateOrchestratorEmpty(t *testing.T) { func TestCreateOrchestratorEmpty(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
err := RunCreate(cli, &CreateOptions{ err := RunCreate(cli, &CreateOptions{
Name: "test", Name: "test",
@ -144,8 +137,7 @@ func TestCreateFromContext(t *testing.T) {
}, },
} }
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
cli.ResetOutputBuffers() cli.ResetOutputBuffers()
assert.NilError(t, RunCreate(cli, &CreateOptions{ assert.NilError(t, RunCreate(cli, &CreateOptions{
Name: "original", Name: "original",
@ -210,8 +202,7 @@ func TestCreateFromCurrent(t *testing.T) {
}, },
} }
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
cli.ResetOutputBuffers() cli.ResetOutputBuffers()
assert.NilError(t, RunCreate(cli, &CreateOptions{ assert.NilError(t, RunCreate(cli, &CreateOptions{
Name: "original", Name: "original",

View File

@ -3,7 +3,7 @@ package context
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil" "io"
"os" "os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -13,12 +13,8 @@ import (
) )
func TestExportImportWithFile(t *testing.T) { func TestExportImportWithFile(t *testing.T) {
contextDir, err := ioutil.TempDir("", t.Name()+"context") contextFile := filepath.Join(t.TempDir(), "exported")
assert.NilError(t, err) cli := makeFakeCli(t)
defer os.RemoveAll(contextDir)
contextFile := filepath.Join(contextDir, "exported")
cli, cleanup := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "test") createTestContext(t, cli, "test")
cli.ErrBuffer().Reset() cli.ErrBuffer().Reset()
assert.NilError(t, RunExport(cli, &ExportOptions{ assert.NilError(t, RunExport(cli, &ExportOptions{
@ -43,8 +39,7 @@ func TestExportImportWithFile(t *testing.T) {
} }
func TestExportImportPipe(t *testing.T) { func TestExportImportPipe(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "test") createTestContext(t, cli, "test")
cli.ErrBuffer().Reset() cli.ErrBuffer().Reset()
cli.OutBuffer().Reset() cli.OutBuffer().Reset()
@ -53,7 +48,7 @@ func TestExportImportPipe(t *testing.T) {
Dest: "-", Dest: "-",
})) }))
assert.Equal(t, cli.ErrBuffer().String(), "") assert.Equal(t, cli.ErrBuffer().String(), "")
cli.SetIn(streams.NewIn(ioutil.NopCloser(bytes.NewBuffer(cli.OutBuffer().Bytes())))) cli.SetIn(streams.NewIn(io.NopCloser(bytes.NewBuffer(cli.OutBuffer().Bytes()))))
cli.OutBuffer().Reset() cli.OutBuffer().Reset()
cli.ErrBuffer().Reset() cli.ErrBuffer().Reset()
assert.NilError(t, RunImport(cli, "test2", "-")) assert.NilError(t, RunImport(cli, "test2", "-"))
@ -71,14 +66,10 @@ func TestExportImportPipe(t *testing.T) {
} }
func TestExportExistingFile(t *testing.T) { func TestExportExistingFile(t *testing.T) {
contextDir, err := ioutil.TempDir("", t.Name()+"context") contextFile := filepath.Join(t.TempDir(), "exported")
assert.NilError(t, err) cli := makeFakeCli(t)
defer os.RemoveAll(contextDir)
contextFile := filepath.Join(contextDir, "exported")
cli, cleanup := makeFakeCli(t)
defer cleanup()
cli.ErrBuffer().Reset() cli.ErrBuffer().Reset()
assert.NilError(t, ioutil.WriteFile(contextFile, []byte{}, 0644)) assert.NilError(t, os.WriteFile(contextFile, []byte{}, 0644))
err = RunExport(cli, &ExportOptions{ContextName: "test", Dest: contextFile}) err := RunExport(cli, &ExportOptions{ContextName: "test", Dest: contextFile})
assert.Assert(t, os.IsExist(err)) assert.Assert(t, os.IsExist(err))
} }

View File

@ -9,8 +9,7 @@ import (
) )
func TestInspect(t *testing.T) { func TestInspect(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
cli.OutBuffer().Reset() cli.OutBuffer().Reset()
assert.NilError(t, runInspect(cli, inspectOptions{ assert.NilError(t, runInspect(cli, inspectOptions{

View File

@ -20,8 +20,7 @@ func createTestContext(t *testing.T, cli command.Cli, name string) {
} }
func TestList(t *testing.T) { func TestList(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
createTestContext(t, cli, "unset") createTestContext(t, cli, "unset")
@ -32,8 +31,7 @@ func TestList(t *testing.T) {
} }
func TestListQuiet(t *testing.T) { func TestListQuiet(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
cli.SetCurrentContext("current") cli.SetCurrentContext("current")

View File

@ -1,8 +1,6 @@
package context package context
import ( import (
"io/ioutil"
"os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -13,8 +11,7 @@ import (
) )
func TestRemove(t *testing.T) { func TestRemove(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
assert.NilError(t, RunRemove(cli, RemoveOptions{}, []string{"other"})) assert.NilError(t, RunRemove(cli, RemoveOptions{}, []string{"other"}))
@ -25,8 +22,7 @@ func TestRemove(t *testing.T) {
} }
func TestRemoveNotAContext(t *testing.T) { func TestRemoveNotAContext(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
err := RunRemove(cli, RemoveOptions{}, []string{"not-a-context"}) err := RunRemove(cli, RemoveOptions{}, []string{"not-a-context"})
@ -34,8 +30,7 @@ func TestRemoveNotAContext(t *testing.T) {
} }
func TestRemoveCurrent(t *testing.T) { func TestRemoveCurrent(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
cli.SetCurrentContext("current") cli.SetCurrentContext("current")
@ -44,16 +39,13 @@ func TestRemoveCurrent(t *testing.T) {
} }
func TestRemoveCurrentForce(t *testing.T) { func TestRemoveCurrentForce(t *testing.T) {
configDir, err := ioutil.TempDir("", t.Name()+"config") configDir := t.TempDir()
assert.NilError(t, err)
defer os.RemoveAll(configDir)
configFilePath := filepath.Join(configDir, "config.json") configFilePath := filepath.Join(configDir, "config.json")
testCfg := configfile.New(configFilePath) testCfg := configfile.New(configFilePath)
testCfg.CurrentContext = "current" testCfg.CurrentContext = "current"
assert.NilError(t, testCfg.Save()) assert.NilError(t, testCfg.Save())
cli, cleanup := makeFakeCli(t, withCliConfig(testCfg)) cli := makeFakeCli(t, withCliConfig(testCfg))
defer cleanup()
createTestContext(t, cli, "current") createTestContext(t, cli, "current")
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
cli.SetCurrentContext("current") cli.SetCurrentContext("current")
@ -64,8 +56,7 @@ func TestRemoveCurrentForce(t *testing.T) {
} }
func TestRemoveDefault(t *testing.T) { func TestRemoveDefault(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "other") createTestContext(t, cli, "other")
cli.SetCurrentContext("current") cli.SetCurrentContext("current")
err := RunRemove(cli, RemoveOptions{}, []string{"default"}) err := RunRemove(cli, RemoveOptions{}, []string{"default"})

View File

@ -10,8 +10,7 @@ import (
) )
func TestUpdateDescriptionOnly(t *testing.T) { func TestUpdateDescriptionOnly(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
err := RunCreate(cli, &CreateOptions{ err := RunCreate(cli, &CreateOptions{
Name: "test", Name: "test",
Docker: map[string]string{}, Docker: map[string]string{},
@ -34,8 +33,7 @@ func TestUpdateDescriptionOnly(t *testing.T) {
} }
func TestUpdateDockerOnly(t *testing.T) { func TestUpdateDockerOnly(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
createTestContext(t, cli, "test") createTestContext(t, cli, "test")
assert.NilError(t, RunUpdate(cli, &UpdateOptions{ assert.NilError(t, RunUpdate(cli, &UpdateOptions{
Name: "test", Name: "test",
@ -53,8 +51,7 @@ func TestUpdateDockerOnly(t *testing.T) {
} }
func TestUpdateInvalidDockerHost(t *testing.T) { func TestUpdateInvalidDockerHost(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
err := RunCreate(cli, &CreateOptions{ err := RunCreate(cli, &CreateOptions{
Name: "test", Name: "test",
Docker: map[string]string{}, Docker: map[string]string{},

View File

@ -1,8 +1,6 @@
package context package context
import ( import (
"io/ioutil"
"os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -13,14 +11,11 @@ import (
) )
func TestUse(t *testing.T) { func TestUse(t *testing.T) {
configDir, err := ioutil.TempDir("", t.Name()+"config") configDir := t.TempDir()
assert.NilError(t, err)
defer os.RemoveAll(configDir)
configFilePath := filepath.Join(configDir, "config.json") configFilePath := filepath.Join(configDir, "config.json")
testCfg := configfile.New(configFilePath) testCfg := configfile.New(configFilePath)
cli, cleanup := makeFakeCli(t, withCliConfig(testCfg)) cli := makeFakeCli(t, withCliConfig(testCfg))
defer cleanup() err := RunCreate(cli, &CreateOptions{
err = RunCreate(cli, &CreateOptions{
Name: "test", Name: "test",
Docker: map[string]string{}, Docker: map[string]string{},
}) })
@ -42,8 +37,7 @@ func TestUse(t *testing.T) {
} }
func TestUseNoExist(t *testing.T) { func TestUseNoExist(t *testing.T) {
cli, cleanup := makeFakeCli(t) cli := makeFakeCli(t)
defer cleanup()
err := newUseCommand(cli).RunE(nil, []string{"test"}) err := newUseCommand(cli).RunE(nil, []string{"test"})
assert.Check(t, store.IsErrContextDoesNotExist(err)) assert.Check(t, store.IsErrContextDoesNotExist(err))
} }

View File

@ -2,8 +2,6 @@ package command
import ( import (
"crypto/rand" "crypto/rand"
"io/ioutil"
"os"
"testing" "testing"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
@ -39,11 +37,10 @@ func testDefaultMetadata() store.Metadata {
} }
} }
func testStore(t *testing.T, meta store.Metadata, tls store.ContextTLSData) (store.Store, func()) { func testStore(t *testing.T, meta store.Metadata, tls store.ContextTLSData) store.Store {
testDir, err := ioutil.TempDir("", t.Name()) t.Helper()
assert.NilError(t, err) return &ContextStoreWithDefault{
s := &ContextStoreWithDefault{ Store: store.New(t.TempDir(), testCfg),
Store: store.New(testDir, testCfg),
Resolver: func() (*DefaultContext, error) { Resolver: func() (*DefaultContext, error) {
return &DefaultContext{ return &DefaultContext{
Meta: meta, Meta: meta,
@ -51,9 +48,6 @@ func testStore(t *testing.T, meta store.Metadata, tls store.ContextTLSData) (sto
}, nil }, nil
}, },
} }
return s, func() {
_ = os.RemoveAll(testDir)
}
} }
func TestDefaultContextInitializer(t *testing.T) { func TestDefaultContextInitializer(t *testing.T) {
@ -78,7 +72,7 @@ func TestExportDefaultImport(t *testing.T) {
rand.Read(file1) rand.Read(file1)
file2 := make([]byte, 3700) file2 := make([]byte, 3700)
rand.Read(file2) rand.Read(file2)
s, cleanup := testStore(t, testDefaultMetadata(), store.ContextTLSData{ s := testStore(t, testDefaultMetadata(), store.ContextTLSData{
Endpoints: map[string]store.EndpointTLSData{ Endpoints: map[string]store.EndpointTLSData{
"ep2": { "ep2": {
Files: map[string][]byte{ Files: map[string][]byte{
@ -88,7 +82,6 @@ func TestExportDefaultImport(t *testing.T) {
}, },
}, },
}) })
defer cleanup()
r := store.Export("default", s) r := store.Export("default", s)
defer r.Close() defer r.Close()
err := store.Import("dest", s, r) err := store.Import("dest", s, r)
@ -127,8 +120,7 @@ func TestExportDefaultImport(t *testing.T) {
func TestListDefaultContext(t *testing.T) { func TestListDefaultContext(t *testing.T) {
meta := testDefaultMetadata() meta := testDefaultMetadata()
s, cleanup := testStore(t, meta, store.ContextTLSData{}) s := testStore(t, meta, store.ContextTLSData{})
defer cleanup()
result, err := s.List() result, err := s.List()
assert.NilError(t, err) assert.NilError(t, err)
assert.Equal(t, 1, len(result)) assert.Equal(t, 1, len(result))
@ -136,8 +128,7 @@ func TestListDefaultContext(t *testing.T) {
} }
func TestGetDefaultContextStorageInfo(t *testing.T) { func TestGetDefaultContextStorageInfo(t *testing.T) {
s, cleanup := testStore(t, testDefaultMetadata(), store.ContextTLSData{}) s := testStore(t, testDefaultMetadata(), store.ContextTLSData{})
defer cleanup()
result := s.GetStorageInfo(DefaultContextName) result := s.GetStorageInfo(DefaultContextName)
assert.Equal(t, "<IN MEMORY>", result.MetadataPath) assert.Equal(t, "<IN MEMORY>", result.MetadataPath)
assert.Equal(t, "<IN MEMORY>", result.TLSPath) assert.Equal(t, "<IN MEMORY>", result.TLSPath)
@ -145,8 +136,7 @@ func TestGetDefaultContextStorageInfo(t *testing.T) {
func TestGetDefaultContextMetadata(t *testing.T) { func TestGetDefaultContextMetadata(t *testing.T) {
meta := testDefaultMetadata() meta := testDefaultMetadata()
s, cleanup := testStore(t, meta, store.ContextTLSData{}) s := testStore(t, meta, store.ContextTLSData{})
defer cleanup()
result, err := s.GetMetadata(DefaultContextName) result, err := s.GetMetadata(DefaultContextName)
assert.NilError(t, err) assert.NilError(t, err)
assert.Equal(t, DefaultContextName, result.Name) assert.Equal(t, DefaultContextName, result.Name)
@ -156,8 +146,7 @@ func TestGetDefaultContextMetadata(t *testing.T) {
func TestErrCreateDefault(t *testing.T) { func TestErrCreateDefault(t *testing.T) {
meta := testDefaultMetadata() meta := testDefaultMetadata()
s, cleanup := testStore(t, meta, store.ContextTLSData{}) s := testStore(t, meta, store.ContextTLSData{})
defer cleanup()
err := s.CreateOrUpdate(store.Metadata{ err := s.CreateOrUpdate(store.Metadata{
Endpoints: map[string]interface{}{ Endpoints: map[string]interface{}{
"ep1": endpoint{Foo: "bar"}, "ep1": endpoint{Foo: "bar"},
@ -170,16 +159,14 @@ func TestErrCreateDefault(t *testing.T) {
func TestErrRemoveDefault(t *testing.T) { func TestErrRemoveDefault(t *testing.T) {
meta := testDefaultMetadata() meta := testDefaultMetadata()
s, cleanup := testStore(t, meta, store.ContextTLSData{}) s := testStore(t, meta, store.ContextTLSData{})
defer cleanup()
err := s.Remove("default") err := s.Remove("default")
assert.Error(t, err, "default context cannot be removed") assert.Error(t, err, "default context cannot be removed")
} }
func TestErrTLSDataError(t *testing.T) { func TestErrTLSDataError(t *testing.T) {
meta := testDefaultMetadata() meta := testDefaultMetadata()
s, cleanup := testStore(t, meta, store.ContextTLSData{}) s := testStore(t, meta, store.ContextTLSData{})
defer cleanup()
_, err := s.GetTLSData("default", "noop", "noop") _, err := s.GetTLSData("default", "noop", "noop")
assert.Check(t, store.IsErrTLSDataDoesNotExist(err)) assert.Check(t, store.IsErrTLSDataDoesNotExist(err))
} }

View File

@ -8,7 +8,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"regexp" "regexp"
@ -298,7 +297,7 @@ func runBuild(dockerCli command.Cli, options buildOptions) error {
if err != nil { if err != nil {
return err return err
} }
dockerfileCtx = ioutil.NopCloser(bytes.NewBuffer(newDockerfile)) dockerfileCtx = io.NopCloser(bytes.NewBuffer(newDockerfile))
} }
} }
@ -394,7 +393,7 @@ func runBuild(dockerCli command.Cli, options buildOptions) error {
if imageID == "" { if imageID == "" {
return errors.Errorf("Server did not provide an image ID. Cannot write %s", options.imageIDFile) return errors.Errorf("Server did not provide an image ID. Cannot write %s", options.imageIDFile)
} }
if err := ioutil.WriteFile(options.imageIDFile, []byte(imageID), 0666); err != nil { if err := os.WriteFile(options.imageIDFile, []byte(imageID), 0666); err != nil {
return err return err
} }
} }

View File

@ -6,7 +6,6 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
@ -117,13 +116,13 @@ func DetectArchiveReader(input io.ReadCloser) (rc io.ReadCloser, isArchive bool,
// temporary directory containing the Dockerfile. // temporary directory containing the Dockerfile.
func WriteTempDockerfile(rc io.ReadCloser) (dockerfileDir string, err error) { func WriteTempDockerfile(rc io.ReadCloser) (dockerfileDir string, err error) {
// err is a named return value, due to the defer call below. // err is a named return value, due to the defer call below.
dockerfileDir, err = ioutil.TempDir("", "docker-build-tempdockerfile-") dockerfileDir, err = os.MkdirTemp("", "docker-build-tempdockerfile-")
if err != nil { if err != nil {
return "", errors.Errorf("unable to create temporary context directory: %v", err) return "", errors.Errorf("unable to create temporary context directory: %v", err)
} }
defer func() { defer func() {
if err != nil { if err != nil {
os.RemoveAll(dockerfileDir) _ = os.RemoveAll(dockerfileDir)
} }
}() }()
@ -240,7 +239,7 @@ func getWithStatusError(url string) (resp *http.Response, err error) {
return resp, nil return resp, nil
} }
msg := fmt.Sprintf("failed to GET %s with status %s", url, resp.Status) msg := fmt.Sprintf("failed to GET %s with status %s", url, resp.Status)
body, err := ioutil.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
resp.Body.Close() resp.Body.Close()
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "%s: error reading body", msg) return nil, errors.Wrapf(err, "%s: error reading body", msg)
@ -372,7 +371,7 @@ func isUNC(path string) bool {
// AddDockerfileToBuildContext from a ReadCloser, returns a new archive and // AddDockerfileToBuildContext from a ReadCloser, returns a new archive and
// the relative path to the dockerfile in the context. // the relative path to the dockerfile in the context.
func AddDockerfileToBuildContext(dockerfileCtx io.ReadCloser, buildCtx io.ReadCloser) (io.ReadCloser, string, error) { func AddDockerfileToBuildContext(dockerfileCtx io.ReadCloser, buildCtx io.ReadCloser) (io.ReadCloser, string, error) {
file, err := ioutil.ReadAll(dockerfileCtx) file, err := io.ReadAll(dockerfileCtx)
dockerfileCtx.Close() dockerfileCtx.Close()
if err != nil { if err != nil {
return nil, "", err return nil, "", err

View File

@ -4,7 +4,6 @@ import (
"archive/tar" "archive/tar"
"bytes" "bytes"
"io" "io"
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
@ -19,40 +18,34 @@ import (
const dockerfileContents = "FROM busybox" const dockerfileContents = "FROM busybox"
var prepareEmpty = func(t *testing.T) (string, func()) { func prepareEmpty(t *testing.T) string {
return "", func() {} return ""
} }
var prepareNoFiles = func(t *testing.T) (string, func()) { func prepareNoFiles(t *testing.T) string {
return createTestTempDir(t, "builder-context-test") return createTestTempDir(t)
} }
var prepareOneFile = func(t *testing.T) (string, func()) { func prepareOneFile(t *testing.T) string {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
return contextDir, cleanup return contextDir
} }
func testValidateContextDirectory(t *testing.T, prepare func(t *testing.T) (string, func()), excludes []string) { func testValidateContextDirectory(t *testing.T, prepare func(t *testing.T) string, excludes []string) {
contextDir, cleanup := prepare(t) contextDir := prepare(t)
defer cleanup()
err := ValidateContextDirectory(contextDir, excludes) err := ValidateContextDirectory(contextDir, excludes)
assert.NilError(t, err) assert.NilError(t, err)
} }
func TestGetContextFromLocalDirNoDockerfile(t *testing.T) { func TestGetContextFromLocalDirNoDockerfile(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
_, _, err := GetContextFromLocalDir(contextDir, "") _, _, err := GetContextFromLocalDir(contextDir, "")
assert.ErrorContains(t, err, "Dockerfile") assert.ErrorContains(t, err, "Dockerfile")
} }
func TestGetContextFromLocalDirNotExistingDir(t *testing.T) { func TestGetContextFromLocalDirNotExistingDir(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
fakePath := filepath.Join(contextDir, "fake") fakePath := filepath.Join(contextDir, "fake")
_, _, err := GetContextFromLocalDir(fakePath, "") _, _, err := GetContextFromLocalDir(fakePath, "")
@ -60,9 +53,7 @@ func TestGetContextFromLocalDirNotExistingDir(t *testing.T) {
} }
func TestGetContextFromLocalDirNotExistingDockerfile(t *testing.T) { func TestGetContextFromLocalDirNotExistingDockerfile(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
fakePath := filepath.Join(contextDir, "fake") fakePath := filepath.Join(contextDir, "fake")
_, _, err := GetContextFromLocalDir(contextDir, fakePath) _, _, err := GetContextFromLocalDir(contextDir, fakePath)
@ -70,13 +61,10 @@ func TestGetContextFromLocalDirNotExistingDockerfile(t *testing.T) {
} }
func TestGetContextFromLocalDirWithNoDirectory(t *testing.T) { func TestGetContextFromLocalDirWithNoDirectory(t *testing.T) {
contextDir, dirCleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer dirCleanup()
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
chdirCleanup := chdir(t, contextDir) chdir(t, contextDir)
defer chdirCleanup()
absContextDir, relDockerfile, err := GetContextFromLocalDir(contextDir, "") absContextDir, relDockerfile, err := GetContextFromLocalDir(contextDir, "")
assert.NilError(t, err) assert.NilError(t, err)
@ -86,9 +74,7 @@ func TestGetContextFromLocalDirWithNoDirectory(t *testing.T) {
} }
func TestGetContextFromLocalDirWithDockerfile(t *testing.T) { func TestGetContextFromLocalDirWithDockerfile(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
absContextDir, relDockerfile, err := GetContextFromLocalDir(contextDir, "") absContextDir, relDockerfile, err := GetContextFromLocalDir(contextDir, "")
@ -99,9 +85,7 @@ func TestGetContextFromLocalDirWithDockerfile(t *testing.T) {
} }
func TestGetContextFromLocalDirLocalFile(t *testing.T) { func TestGetContextFromLocalDirLocalFile(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
testFilename := createTestTempFile(t, contextDir, "tmpTest", "test") testFilename := createTestTempFile(t, contextDir, "tmpTest", "test")
@ -121,11 +105,8 @@ func TestGetContextFromLocalDirLocalFile(t *testing.T) {
} }
func TestGetContextFromLocalDirWithCustomDockerfile(t *testing.T) { func TestGetContextFromLocalDirWithCustomDockerfile(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup() chdir(t, contextDir)
chdirCleanup := chdir(t, contextDir)
defer chdirCleanup()
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
@ -137,7 +118,7 @@ func TestGetContextFromLocalDirWithCustomDockerfile(t *testing.T) {
} }
func TestGetContextFromReaderString(t *testing.T) { func TestGetContextFromReaderString(t *testing.T) {
tarArchive, relDockerfile, err := GetContextFromReader(ioutil.NopCloser(strings.NewReader(dockerfileContents)), "") tarArchive, relDockerfile, err := GetContextFromReader(io.NopCloser(strings.NewReader(dockerfileContents)), "")
if err != nil { if err != nil {
t.Fatalf("Error when executing GetContextFromReader: %s", err) t.Fatalf("Error when executing GetContextFromReader: %s", err)
@ -173,9 +154,7 @@ func TestGetContextFromReaderString(t *testing.T) {
} }
func TestGetContextFromReaderTar(t *testing.T) { func TestGetContextFromReaderTar(t *testing.T) {
contextDir, cleanup := createTestTempDir(t, "builder-context-test") contextDir := createTestTempDir(t)
defer cleanup()
createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents) createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents)
tarStream, err := archive.Tar(contextDir, archive.Uncompressed) tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
@ -238,23 +217,24 @@ func TestValidateContextDirectoryWithOneFileExcludes(t *testing.T) {
testValidateContextDirectory(t, prepareOneFile, []string{DefaultDockerfileName}) testValidateContextDirectory(t, prepareOneFile, []string{DefaultDockerfileName})
} }
// createTestTempDir creates a temporary directory for testing. // createTestTempDir creates a temporary directory for testing. It returns the
// It returns the created path and a cleanup function which is meant to be used as deferred call. // created path. When an error occurs, it terminates the test.
// When an error occurs, it terminates the test. func createTestTempDir(t *testing.T) string {
//nolint: unparam t.Helper()
func createTestTempDir(t *testing.T, prefix string) (string, func()) { path := t.TempDir()
path, err := ioutil.TempDir("", prefix)
// Eval Symlinks is needed to account for macOS TMP using symlinks
path, err := filepath.EvalSymlinks(path)
assert.NilError(t, err) assert.NilError(t, err)
path, err = filepath.EvalSymlinks(path) return path
assert.NilError(t, err)
return path, func() { assert.NilError(t, os.RemoveAll(path)) }
} }
// createTestTempFile creates a temporary file within dir with specific contents and permissions. // createTestTempFile creates a temporary file within dir with specific contents and permissions.
// When an error occurs, it terminates the test // When an error occurs, it terminates the test
func createTestTempFile(t *testing.T, dir, filename, contents string) string { func createTestTempFile(t *testing.T, dir, filename, contents string) string {
t.Helper()
filePath := filepath.Join(dir, filename) filePath := filepath.Join(dir, filename)
err := ioutil.WriteFile(filePath, []byte(contents), 0777) err := os.WriteFile(filePath, []byte(contents), 0777)
assert.NilError(t, err) assert.NilError(t, err)
return filePath return filePath
} }
@ -263,11 +243,13 @@ func createTestTempFile(t *testing.T, dir, filename, contents string) string {
// It returns a function which changes working directory back to the previous one. // It returns a function which changes working directory back to the previous one.
// This function is meant to be executed as a deferred call. // This function is meant to be executed as a deferred call.
// When an error occurs, it terminates the test. // When an error occurs, it terminates the test.
func chdir(t *testing.T, dir string) func() { func chdir(t *testing.T, dir string) {
workingDirectory, err := os.Getwd() workingDirectory, err := os.Getwd()
assert.NilError(t, err) assert.NilError(t, err)
assert.NilError(t, os.Chdir(dir)) assert.NilError(t, os.Chdir(dir))
return func() { assert.NilError(t, os.Chdir(workingDirectory)) } t.Cleanup(func() {
assert.NilError(t, os.Chdir(workingDirectory))
})
} }
func TestIsArchive(t *testing.T) { func TestIsArchive(t *testing.T) {

View File

@ -6,7 +6,6 @@ import (
"compress/gzip" "compress/gzip"
"context" "context"
"io" "io"
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -39,7 +38,7 @@ func TestRunBuildDockerfileFromStdinWithCompress(t *testing.T) {
FROM alpine:3.6 FROM alpine:3.6
COPY foo / COPY foo /
`) `)
cli.SetIn(streams.NewIn(ioutil.NopCloser(dockerfile))) cli.SetIn(streams.NewIn(io.NopCloser(dockerfile)))
dir := fs.NewDir(t, t.Name(), dir := fs.NewDir(t, t.Name(),
fs.WithFile("foo", "some content")) fs.WithFile("foo", "some content"))
@ -128,7 +127,7 @@ func TestRunBuildFromGitHubSpecialCase(t *testing.T) {
cmd := NewBuildCommand(test.NewFakeCli(&fakeClient{})) cmd := NewBuildCommand(test.NewFakeCli(&fakeClient{}))
// Clone a small repo that exists so git doesn't prompt for credentials // Clone a small repo that exists so git doesn't prompt for credentials
cmd.SetArgs([]string{"github.com/docker/for-win"}) cmd.SetArgs([]string{"github.com/docker/for-win"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err := cmd.Execute() err := cmd.Execute()
assert.ErrorContains(t, err, "unable to prepare context") assert.ErrorContains(t, err, "unable to prepare context")
assert.ErrorContains(t, err, "docker-build-git") assert.ErrorContains(t, err, "docker-build-git")
@ -139,20 +138,17 @@ func TestRunBuildFromGitHubSpecialCase(t *testing.T) {
// case. // case.
func TestRunBuildFromLocalGitHubDir(t *testing.T) { func TestRunBuildFromLocalGitHubDir(t *testing.T) {
defer env.Patch(t, "DOCKER_BUILDKIT", "0")() defer env.Patch(t, "DOCKER_BUILDKIT", "0")()
tmpDir, err := ioutil.TempDir("", "docker-build-from-local-dir-")
assert.NilError(t, err)
defer os.RemoveAll(tmpDir)
buildDir := filepath.Join(tmpDir, "github.com", "docker", "no-such-repository") buildDir := filepath.Join(t.TempDir(), "github.com", "docker", "no-such-repository")
err = os.MkdirAll(buildDir, 0777) err := os.MkdirAll(buildDir, 0777)
assert.NilError(t, err) assert.NilError(t, err)
err = ioutil.WriteFile(filepath.Join(buildDir, "Dockerfile"), []byte("FROM busybox\n"), 0644) err = os.WriteFile(filepath.Join(buildDir, "Dockerfile"), []byte("FROM busybox\n"), 0644)
assert.NilError(t, err) assert.NilError(t, err)
client := test.NewFakeCli(&fakeClient{}) client := test.NewFakeCli(&fakeClient{})
cmd := NewBuildCommand(client) cmd := NewBuildCommand(client)
cmd.SetArgs([]string{buildDir}) cmd.SetArgs([]string{buildDir})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err = cmd.Execute() err = cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)
} }
@ -193,7 +189,7 @@ func (f *fakeBuild) build(_ context.Context, context io.Reader, options types.Im
f.context = tar.NewReader(context) f.context = tar.NewReader(context)
f.options = options f.options = options
body := new(bytes.Buffer) body := new(bytes.Buffer)
return types.ImageBuildResponse{Body: ioutil.NopCloser(body)}, nil return types.ImageBuildResponse{Body: io.NopCloser(body)}, nil
} }
func (f *fakeBuild) headers(t *testing.T) []*tar.Header { func (f *fakeBuild) headers(t *testing.T) []*tar.Header {

View File

@ -3,7 +3,6 @@ package image
import ( import (
"context" "context"
"io" "io"
"io/ioutil"
"strings" "strings"
"time" "time"
@ -41,7 +40,7 @@ func (cli *fakeClient) ImageSave(_ context.Context, images []string) (io.ReadClo
if cli.imageSaveFunc != nil { if cli.imageSaveFunc != nil {
return cli.imageSaveFunc(images) return cli.imageSaveFunc(images)
} }
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
} }
func (cli *fakeClient) ImageRemove(_ context.Context, image string, func (cli *fakeClient) ImageRemove(_ context.Context, image string,
@ -56,7 +55,7 @@ func (cli *fakeClient) ImagePush(_ context.Context, ref string, options types.Im
if cli.imagePushFunc != nil { if cli.imagePushFunc != nil {
return cli.imagePushFunc(ref, options) return cli.imagePushFunc(ref, options)
} }
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
} }
func (cli *fakeClient) Info(_ context.Context) (types.Info, error) { func (cli *fakeClient) Info(_ context.Context) (types.Info, error) {
@ -70,7 +69,7 @@ func (cli *fakeClient) ImagePull(_ context.Context, ref string, options types.Im
if cli.imagePullFunc != nil { if cli.imagePullFunc != nil {
cli.imagePullFunc(ref, options) cli.imagePullFunc(ref, options)
} }
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
} }
func (cli *fakeClient) ImagesPrune(_ context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error) { func (cli *fakeClient) ImagesPrune(_ context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error) {
@ -106,7 +105,7 @@ func (cli *fakeClient) ImageImport(_ context.Context, source types.ImageImportSo
if cli.imageImportFunc != nil { if cli.imageImportFunc != nil {
return cli.imageImportFunc(source, ref, options) return cli.imageImportFunc(source, ref, options)
} }
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
} }
func (cli *fakeClient) ImageHistory(_ context.Context, img string) ([]image.HistoryResponseItem, error) { func (cli *fakeClient) ImageHistory(_ context.Context, img string) ([]image.HistoryResponseItem, error) {
@ -120,5 +119,5 @@ func (cli *fakeClient) ImageBuild(ctx context.Context, context io.Reader, option
if cli.imageBuildFunc != nil { if cli.imageBuildFunc != nil {
return cli.imageBuildFunc(ctx, context, options) return cli.imageBuildFunc(ctx, context, options)
} }
return types.ImageBuildResponse{Body: ioutil.NopCloser(strings.NewReader(""))}, nil return types.ImageBuildResponse{Body: io.NopCloser(strings.NewReader(""))}, nil
} }

View File

@ -2,7 +2,7 @@ package image
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -37,7 +37,7 @@ func TestNewHistoryCommandErrors(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewHistoryCommand(test.NewFakeCli(&fakeClient{imageHistoryFunc: tc.imageHistoryFunc})) cmd := NewHistoryCommand(test.NewFakeCli(&fakeClient{imageHistoryFunc: tc.imageHistoryFunc}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -95,7 +95,7 @@ func TestNewHistoryCommandSuccess(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{imageHistoryFunc: tc.imageHistoryFunc}) cli := test.NewFakeCli(&fakeClient{imageHistoryFunc: tc.imageHistoryFunc})
cmd := NewHistoryCommand(cli) cmd := NewHistoryCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -2,7 +2,6 @@ package image
import ( import (
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -36,7 +35,7 @@ func TestNewImportCommandErrors(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc})) cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -44,7 +43,7 @@ func TestNewImportCommandErrors(t *testing.T) {
func TestNewImportCommandInvalidFile(t *testing.T) { func TestNewImportCommandInvalidFile(t *testing.T) {
cmd := NewImportCommand(test.NewFakeCli(&fakeClient{})) cmd := NewImportCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"testdata/import-command-success.unexistent-file"}) cmd.SetArgs([]string{"testdata/import-command-success.unexistent-file"})
assert.ErrorContains(t, cmd.Execute(), "testdata/import-command-success.unexistent-file") assert.ErrorContains(t, cmd.Execute(), "testdata/import-command-success.unexistent-file")
} }
@ -68,7 +67,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
args: []string{"-", "image:local"}, args: []string{"-", "image:local"},
imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) { imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
assert.Check(t, is.Equal("image:local", ref)) assert.Check(t, is.Equal("image:local", ref))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
{ {
@ -76,7 +75,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
args: []string{"--message", "test message", "-"}, args: []string{"--message", "test message", "-"},
imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) { imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
assert.Check(t, is.Equal("test message", options.Message)) assert.Check(t, is.Equal("test message", options.Message))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
{ {
@ -84,7 +83,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
args: []string{"--change", "ENV DEBUG=true", "-"}, args: []string{"--change", "ENV DEBUG=true", "-"},
imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) { imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
assert.Check(t, is.Equal("ENV DEBUG=true", options.Changes[0])) assert.Check(t, is.Equal("ENV DEBUG=true", options.Changes[0]))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
{ {
@ -92,13 +91,13 @@ func TestNewImportCommandSuccess(t *testing.T) {
args: []string{"--change", "ENV DEBUG true", "-"}, args: []string{"--change", "ENV DEBUG true", "-"},
imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) { imageImportFunc: func(source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
assert.Check(t, is.Equal("ENV DEBUG true", options.Changes[0])) assert.Check(t, is.Equal("ENV DEBUG true", options.Changes[0]))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc})) cmd := NewImportCommand(test.NewFakeCli(&fakeClient{imageImportFunc: tc.imageImportFunc}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
} }

View File

@ -2,7 +2,7 @@ package image
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -26,7 +26,7 @@ func TestNewInspectCommandErrors(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := newInspectCommand(test.NewFakeCli(&fakeClient{})) cmd := newInspectCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -78,7 +78,7 @@ func TestNewInspectCommandSuccess(t *testing.T) {
imageInspectInvocationCount = 0 imageInspectInvocationCount = 0
cli := test.NewFakeCli(&fakeClient{imageInspectFunc: tc.imageInspectFunc}) cli := test.NewFakeCli(&fakeClient{imageInspectFunc: tc.imageInspectFunc})
cmd := newInspectCommand(cli) cmd := newInspectCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -2,7 +2,7 @@ package image
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
@ -36,7 +36,7 @@ func TestNewImagesCommandErrors(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewImagesCommand(test.NewFakeCli(&fakeClient{imageListFunc: tc.imageListFunc})) cmd := NewImagesCommand(test.NewFakeCli(&fakeClient{imageListFunc: tc.imageListFunc}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -82,7 +82,7 @@ func TestNewImagesCommandSuccess(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{imageListFunc: tc.imageListFunc}) cli := test.NewFakeCli(&fakeClient{imageListFunc: tc.imageListFunc})
cli.SetConfigFile(&configfile.ConfigFile{ImagesFormat: tc.imageFormat}) cli.SetConfigFile(&configfile.ConfigFile{ImagesFormat: tc.imageFormat})
cmd := NewImagesCommand(cli) cmd := NewImagesCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -3,7 +3,6 @@ package image
import ( import (
"fmt" "fmt"
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -44,7 +43,7 @@ func TestNewLoadCommandErrors(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}) cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc})
cli.In().SetIsTerminal(tc.isTerminalIn) cli.In().SetIsTerminal(tc.isTerminalIn)
cmd := NewLoadCommand(cli) cmd := NewLoadCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -53,7 +52,7 @@ func TestNewLoadCommandErrors(t *testing.T) {
func TestNewLoadCommandInvalidInput(t *testing.T) { func TestNewLoadCommandInvalidInput(t *testing.T) {
expectedError := "open *" expectedError := "open *"
cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{})) cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"--input", "*"}) cmd.SetArgs([]string{"--input", "*"})
err := cmd.Execute() err := cmd.Execute()
assert.ErrorContains(t, err, expectedError) assert.ErrorContains(t, err, expectedError)
@ -68,7 +67,7 @@ func TestNewLoadCommandSuccess(t *testing.T) {
{ {
name: "simple", name: "simple",
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
}, },
}, },
{ {
@ -76,7 +75,7 @@ func TestNewLoadCommandSuccess(t *testing.T) {
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
json := "{\"ID\": \"1\"}" json := "{\"ID\": \"1\"}"
return types.ImageLoadResponse{ return types.ImageLoadResponse{
Body: ioutil.NopCloser(strings.NewReader(json)), Body: io.NopCloser(strings.NewReader(json)),
JSON: true, JSON: true,
}, nil }, nil
}, },
@ -85,14 +84,14 @@ func TestNewLoadCommandSuccess(t *testing.T) {
name: "input-file", name: "input-file",
args: []string{"--input", "testdata/load-command-success.input.txt"}, args: []string{"--input", "testdata/load-command-success.input.txt"},
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
}, },
}, },
} }
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}) cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc})
cmd := NewLoadCommand(cli) cmd := NewLoadCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -2,7 +2,7 @@ package image
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -39,7 +39,7 @@ func TestNewPruneCommandErrors(t *testing.T) {
cmd := NewPruneCommand(test.NewFakeCli(&fakeClient{ cmd := NewPruneCommand(test.NewFakeCli(&fakeClient{
imagesPruneFunc: tc.imagesPruneFunc, imagesPruneFunc: tc.imagesPruneFunc,
})) }))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -93,7 +93,7 @@ func TestNewPruneCommandSuccess(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc}) cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc})
cmd := NewPruneCommand(cli) cmd := NewPruneCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)

View File

@ -3,7 +3,6 @@ package image
import ( import (
"fmt" "fmt"
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -40,7 +39,7 @@ func TestNewPullCommandErrors(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{}) cli := test.NewFakeCli(&fakeClient{})
cmd := NewPullCommand(cli) cmd := NewPullCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -72,11 +71,11 @@ func TestNewPullCommandSuccess(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{ cli := test.NewFakeCli(&fakeClient{
imagePullFunc: func(ref string, options types.ImagePullOptions) (io.ReadCloser, error) { imagePullFunc: func(ref string, options types.ImagePullOptions) (io.ReadCloser, error) {
assert.Check(t, is.Equal(tc.expectedTag, ref), tc.name) assert.Check(t, is.Equal(tc.expectedTag, ref), tc.name)
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}) })
cmd := NewPullCommand(cli) cmd := NewPullCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)
@ -113,12 +112,12 @@ func TestNewPullCommandWithContentTrustErrors(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{ cli := test.NewFakeCli(&fakeClient{
imagePullFunc: func(ref string, options types.ImagePullOptions) (io.ReadCloser, error) { imagePullFunc: func(ref string, options types.ImagePullOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), fmt.Errorf("shouldn't try to pull image") return io.NopCloser(strings.NewReader("")), fmt.Errorf("shouldn't try to pull image")
}, },
}, test.EnableContentTrust) }, test.EnableContentTrust)
cli.SetNotaryClient(tc.notaryFunc) cli.SetNotaryClient(tc.notaryFunc)
cmd := NewPullCommand(cli) cmd := NewPullCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()
assert.ErrorContains(t, err, tc.expectedError) assert.ErrorContains(t, err, tc.expectedError)

View File

@ -3,7 +3,7 @@ package image
import ( import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -93,7 +93,7 @@ func RunPush(dockerCli command.Cli, opts pushOptions) error {
} }
if opts.quiet { if opts.quiet {
err = jsonmessage.DisplayJSONMessagesToStream(responseBody, streams.NewOut(ioutil.Discard), nil) err = jsonmessage.DisplayJSONMessagesToStream(responseBody, streams.NewOut(io.Discard), nil)
if err == nil { if err == nil {
fmt.Fprintln(dockerCli.Out(), ref.String()) fmt.Fprintln(dockerCli.Out(), ref.String())
} }

View File

@ -2,7 +2,6 @@ package image
import ( import (
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -34,14 +33,14 @@ func TestNewPushCommandErrors(t *testing.T) {
args: []string{"image:repo"}, args: []string{"image:repo"},
expectedError: "Failed to push", expectedError: "Failed to push",
imagePushFunc: func(ref string, options types.ImagePushOptions) (io.ReadCloser, error) { imagePushFunc: func(ref string, options types.ImagePushOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), errors.Errorf("Failed to push") return io.NopCloser(strings.NewReader("")), errors.Errorf("Failed to push")
}, },
}, },
} }
for _, tc := range testCases { for _, tc := range testCases {
cli := test.NewFakeCli(&fakeClient{imagePushFunc: tc.imagePushFunc}) cli := test.NewFakeCli(&fakeClient{imagePushFunc: tc.imagePushFunc})
cmd := NewPushCommand(cli) cmd := NewPushCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -69,7 +68,7 @@ func TestNewPushCommandSuccess(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{ cli := test.NewFakeCli(&fakeClient{
imagePushFunc: func(ref string, options types.ImagePushOptions) (io.ReadCloser, error) { imagePushFunc: func(ref string, options types.ImagePushOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}) })
cmd := NewPushCommand(cli) cmd := NewPushCommand(cli)

View File

@ -2,7 +2,7 @@ package image
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -68,7 +68,7 @@ func TestNewRemoveCommandErrors(t *testing.T) {
cmd := NewRemoveCommand(test.NewFakeCli(&fakeClient{ cmd := NewRemoveCommand(test.NewFakeCli(&fakeClient{
imageRemoveFunc: tc.imageRemoveFunc, imageRemoveFunc: tc.imageRemoveFunc,
})) }))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
}) })
@ -124,7 +124,7 @@ func TestNewRemoveCommandSuccess(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{imageRemoveFunc: tc.imageRemoveFunc}) cli := test.NewFakeCli(&fakeClient{imageRemoveFunc: tc.imageRemoveFunc})
cmd := NewRemoveCommand(cli) cmd := NewRemoveCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
assert.Check(t, is.Equal(tc.expectedStderr, cli.ErrBuffer().String())) assert.Check(t, is.Equal(tc.expectedStderr, cli.ErrBuffer().String()))

View File

@ -2,7 +2,6 @@ package image
import ( import (
"io" "io"
"io/ioutil"
"os" "os"
"strings" "strings"
"testing" "testing"
@ -38,7 +37,7 @@ func TestNewSaveCommandErrors(t *testing.T) {
isTerminal: false, isTerminal: false,
expectedError: "error saving image", expectedError: "error saving image",
imageSaveFunc: func(images []string) (io.ReadCloser, error) { imageSaveFunc: func(images []string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), errors.Errorf("error saving image") return io.NopCloser(strings.NewReader("")), errors.Errorf("error saving image")
}, },
}, },
{ {
@ -56,7 +55,7 @@ func TestNewSaveCommandErrors(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{imageSaveFunc: tc.imageSaveFunc}) cli := test.NewFakeCli(&fakeClient{imageSaveFunc: tc.imageSaveFunc})
cli.Out().SetIsTerminal(tc.isTerminal) cli.Out().SetIsTerminal(tc.isTerminal)
cmd := NewSaveCommand(cli) cmd := NewSaveCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
@ -75,7 +74,7 @@ func TestNewSaveCommandSuccess(t *testing.T) {
imageSaveFunc: func(images []string) (io.ReadCloser, error) { imageSaveFunc: func(images []string) (io.ReadCloser, error) {
assert.Assert(t, is.Len(images, 1)) assert.Assert(t, is.Len(images, 1))
assert.Check(t, is.Equal("arg1", images[0])) assert.Check(t, is.Equal("arg1", images[0]))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
deferredFunc: func() { deferredFunc: func() {
os.Remove("save_tmp_file") os.Remove("save_tmp_file")
@ -88,17 +87,17 @@ func TestNewSaveCommandSuccess(t *testing.T) {
assert.Assert(t, is.Len(images, 2)) assert.Assert(t, is.Len(images, 2))
assert.Check(t, is.Equal("arg1", images[0])) assert.Check(t, is.Equal("arg1", images[0]))
assert.Check(t, is.Equal("arg2", images[1])) assert.Check(t, is.Equal("arg2", images[1]))
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
} }
for _, tc := range testCases { for _, tc := range testCases {
cmd := NewSaveCommand(test.NewFakeCli(&fakeClient{ cmd := NewSaveCommand(test.NewFakeCli(&fakeClient{
imageSaveFunc: func(images []string) (io.ReadCloser, error) { imageSaveFunc: func(images []string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
})) }))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
if tc.deferredFunc != nil { if tc.deferredFunc != nil {

View File

@ -1,7 +1,7 @@
package image package image
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -19,7 +19,7 @@ func TestCliNewTagCommandErrors(t *testing.T) {
for _, args := range testCases { for _, args := range testCases {
cmd := NewTagCommand(test.NewFakeCli(&fakeClient{})) cmd := NewTagCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetArgs(args) cmd.SetArgs(args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), expectedError) assert.ErrorContains(t, cmd.Execute(), expectedError)
} }
} }
@ -34,7 +34,7 @@ func TestCliNewTagCommand(t *testing.T) {
}, },
})) }))
cmd.SetArgs([]string{"image1", "image2"}) cmd.SetArgs([]string{"image1", "image2"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
value, _ := cmd.Flags().GetBool("interspersed") value, _ := cmd.Flags().GetBool("interspersed")
assert.Check(t, !value) assert.Check(t, !value)

View File

@ -6,7 +6,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"sort" "sort"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -283,7 +282,7 @@ func imagePullPrivileged(ctx context.Context, cli command.Cli, imgRefAndAuth tru
out := cli.Out() out := cli.Out()
if opts.quiet { if opts.quiet {
out = streams.NewOut(ioutil.Discard) out = streams.NewOut(io.Discard)
} }
return jsonmessage.DisplayJSONMessagesToStream(responseBody, out, nil) return jsonmessage.DisplayJSONMessagesToStream(responseBody, out, nil)
} }

View File

@ -1,8 +1,6 @@
package image package image
import ( import (
"io/ioutil"
"os"
"testing" "testing"
"github.com/docker/cli/cli/trust" "github.com/docker/cli/cli/trust"
@ -51,11 +49,7 @@ func TestNonOfficialTrustServer(t *testing.T) {
} }
func TestAddTargetToAllSignableRolesError(t *testing.T) { func TestAddTargetToAllSignableRolesError(t *testing.T) {
tmpDir, err := ioutil.TempDir("", "notary-test-") notaryRepo, err := client.NewFileCachedRepository(t.TempDir(), "gun", "https://localhost", nil, passphrase.ConstantRetriever("password"), trustpinning.TrustPinConfig{})
assert.NilError(t, err)
defer os.RemoveAll(tmpDir)
notaryRepo, err := client.NewFileCachedRepository(tmpDir, "gun", "https://localhost", nil, passphrase.ConstantRetriever("password"), trustpinning.TrustPinConfig{})
assert.NilError(t, err) assert.NilError(t, err)
target := client.Target{} target := client.Target{}
err = AddTargetToAllSignableRoles(notaryRepo, &target) err = AddTargetToAllSignableRoles(notaryRepo, &target)

View File

@ -1,9 +1,10 @@
package manifest package manifest
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/manifest/store"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
"gotest.tools/v3/assert" "gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp" is "gotest.tools/v3/assert/cmp"
@ -33,14 +34,13 @@ func TestManifestAnnotateError(t *testing.T) {
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cmd := newAnnotateCommand(cli) cmd := newAnnotateCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
func TestManifestAnnotate(t *testing.T) { func TestManifestAnnotate(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -51,7 +51,7 @@ func TestManifestAnnotate(t *testing.T) {
cmd := newAnnotateCommand(cli) cmd := newAnnotateCommand(cli)
cmd.SetArgs([]string{"example.com/list:v1", "example.com/fake:0.0"}) cmd.SetArgs([]string{"example.com/list:v1", "example.com/fake:0.0"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
expectedError := "manifest for image example.com/fake:0.0 does not exist" expectedError := "manifest for image example.com/fake:0.0 does not exist"
assert.ErrorContains(t, cmd.Execute(), expectedError) assert.ErrorContains(t, cmd.Execute(), expectedError)

View File

@ -2,9 +2,10 @@ package manifest
import ( import (
"context" "context"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/manifest/store"
manifesttypes "github.com/docker/cli/cli/manifest/types" manifesttypes "github.com/docker/cli/cli/manifest/types"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
@ -33,15 +34,14 @@ func TestManifestCreateErrors(t *testing.T) {
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cmd := newCreateListCommand(cli) cmd := newCreateListCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
// create a manifest list, then overwrite it, and inspect to see if the old one is still there // create a manifest list, then overwrite it, and inspect to see if the old one is still there
func TestManifestCreateAmend(t *testing.T) { func TestManifestCreateAmend(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -58,7 +58,7 @@ func TestManifestCreateAmend(t *testing.T) {
cmd := newCreateListCommand(cli) cmd := newCreateListCommand(cli)
cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.1"}) cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.1"})
cmd.Flags().Set("amend", "true") cmd.Flags().Set("amend", "true")
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err = cmd.Execute() err = cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)
@ -75,8 +75,7 @@ func TestManifestCreateAmend(t *testing.T) {
// attempt to overwrite a saved manifest and get refused // attempt to overwrite a saved manifest and get refused
func TestManifestCreateRefuseAmend(t *testing.T) { func TestManifestCreateRefuseAmend(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -87,15 +86,14 @@ func TestManifestCreateRefuseAmend(t *testing.T) {
cmd := newCreateListCommand(cli) cmd := newCreateListCommand(cli)
cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"}) cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err = cmd.Execute() err = cmd.Execute()
assert.Error(t, err, "refusing to amend an existing manifest list with no --amend flag") assert.Error(t, err, "refusing to amend an existing manifest list with no --amend flag")
} }
// attempt to make a manifest list without valid images // attempt to make a manifest list without valid images
func TestManifestCreateNoManifest(t *testing.T) { func TestManifestCreateNoManifest(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -110,7 +108,7 @@ func TestManifestCreateNoManifest(t *testing.T) {
cmd := newCreateListCommand(cli) cmd := newCreateListCommand(cli)
cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"}) cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err := cmd.Execute() err := cmd.Execute()
assert.Error(t, err, "No such image: example.com/alpine:3.0") assert.Error(t, err, "No such image: example.com/alpine:3.0")
} }

View File

@ -2,8 +2,7 @@ package manifest
import ( import (
"context" "context"
"io/ioutil" "io"
"os"
"testing" "testing"
"github.com/docker/cli/cli/manifest/store" "github.com/docker/cli/cli/manifest/store"
@ -21,13 +20,6 @@ import (
"gotest.tools/v3/golden" "gotest.tools/v3/golden"
) )
func newTempManifestStore(t *testing.T) (store.Store, func()) {
tmpdir, err := ioutil.TempDir("", "test-manifest-storage")
assert.NilError(t, err)
return store.NewStore(tmpdir), func() { os.RemoveAll(tmpdir) }
}
func ref(t *testing.T, name string) reference.Named { func ref(t *testing.T, name string) reference.Named {
named, err := reference.ParseNamed("example.com/" + name) named, err := reference.ParseNamed("example.com/" + name)
assert.NilError(t, err) assert.NilError(t, err)
@ -70,22 +62,20 @@ func fullImageManifest(t *testing.T, ref reference.Named) types.ImageManifest {
} }
func TestInspectCommandLocalManifestNotFound(t *testing.T) { func TestInspectCommandLocalManifestNotFound(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
cmd := newInspectCommand(cli) cmd := newInspectCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"}) cmd.SetArgs([]string{"example.com/list:v1", "example.com/alpine:3.0"})
err := cmd.Execute() err := cmd.Execute()
assert.Error(t, err, "No such manifest: example.com/alpine:3.0") assert.Error(t, err, "No such manifest: example.com/alpine:3.0")
} }
func TestInspectCommandNotFound(t *testing.T) { func TestInspectCommandNotFound(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -99,15 +89,14 @@ func TestInspectCommandNotFound(t *testing.T) {
}) })
cmd := newInspectCommand(cli) cmd := newInspectCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"example.com/alpine:3.0"}) cmd.SetArgs([]string{"example.com/alpine:3.0"})
err := cmd.Execute() err := cmd.Execute()
assert.Error(t, err, "No such manifest: example.com/alpine:3.0") assert.Error(t, err, "No such manifest: example.com/alpine:3.0")
} }
func TestInspectCommandLocalManifest(t *testing.T) { func TestInspectCommandLocalManifest(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -125,8 +114,7 @@ func TestInspectCommandLocalManifest(t *testing.T) {
} }
func TestInspectcommandRemoteManifest(t *testing.T) { func TestInspectcommandRemoteManifest(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -137,7 +125,7 @@ func TestInspectcommandRemoteManifest(t *testing.T) {
}) })
cmd := newInspectCommand(cli) cmd := newInspectCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"example.com/alpine:3.0"}) cmd.SetArgs([]string{"example.com/alpine:3.0"})
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
actual := cli.OutBuffer() actual := cli.OutBuffer()

View File

@ -2,9 +2,10 @@ package manifest
import ( import (
"context" "context"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/manifest/store"
manifesttypes "github.com/docker/cli/cli/manifest/types" manifesttypes "github.com/docker/cli/cli/manifest/types"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
@ -42,14 +43,13 @@ func TestManifestPushErrors(t *testing.T) {
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cmd := newPushListCommand(cli) cmd := newPushListCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
func TestManifestPush(t *testing.T) { func TestManifestPush(t *testing.T) {
store, sCleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer sCleanup()
registry := newFakeRegistryClient() registry := newFakeRegistryClient()

View File

@ -1,17 +1,17 @@
package manifest package manifest
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/manifest/store"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
"gotest.tools/v3/assert" "gotest.tools/v3/assert"
) )
// create two manifest lists and remove them both // create two manifest lists and remove them both
func TestRmSeveralManifests(t *testing.T) { func TestRmSeveralManifests(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -31,7 +31,7 @@ func TestRmSeveralManifests(t *testing.T) {
cmd := newRmManifestListCommand(cli) cmd := newRmManifestListCommand(cli)
cmd.SetArgs([]string{"example.com/first:1", "example.com/second:2"}) cmd.SetArgs([]string{"example.com/first:1", "example.com/second:2"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err = cmd.Execute() err = cmd.Execute()
assert.NilError(t, err) assert.NilError(t, err)
@ -43,8 +43,7 @@ func TestRmSeveralManifests(t *testing.T) {
// attempt to remove a manifest list which was never created // attempt to remove a manifest list which was never created
func TestRmManifestNotCreated(t *testing.T) { func TestRmManifestNotCreated(t *testing.T) {
store, cleanup := newTempManifestStore(t) store := store.NewStore(t.TempDir())
defer cleanup()
cli := test.NewFakeCli(nil) cli := test.NewFakeCli(nil)
cli.SetManifestStore(store) cli.SetManifestStore(store)
@ -56,7 +55,7 @@ func TestRmManifestNotCreated(t *testing.T) {
cmd := newRmManifestListCommand(cli) cmd := newRmManifestListCommand(cli)
cmd.SetArgs([]string{"example.com/first:1", "example.com/second:2"}) cmd.SetArgs([]string{"example.com/first:1", "example.com/second:2"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
err = cmd.Execute() err = cmd.Execute()
assert.Error(t, err, "No such manifest: example.com/first:1") assert.Error(t, err, "No such manifest: example.com/first:1")

View File

@ -2,7 +2,7 @@ package network
import ( import (
"context" "context"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -37,7 +37,7 @@ func TestNetworkConnectErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }

View File

@ -2,7 +2,7 @@ package network
import ( import (
"context" "context"
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -137,7 +137,7 @@ func TestNetworkCreateErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
assert.NilError(t, cmd.Flags().Set(key, value)) assert.NilError(t, cmd.Flags().Set(key, value))
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }

View File

@ -2,7 +2,7 @@ package network
import ( import (
"context" "context"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -35,7 +35,7 @@ func TestNetworkDisconnectErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package network
import ( import (
"context" "context"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -35,7 +35,7 @@ func TestNetworkListErrors(t *testing.T) {
networkListFunc: tc.networkListFunc, networkListFunc: tc.networkListFunc,
}), }),
) )
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package node package node
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -43,7 +43,7 @@ func TestNodeDemoteErrors(t *testing.T) {
nodeUpdateFunc: tc.nodeUpdateFunc, nodeUpdateFunc: tc.nodeUpdateFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package node
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -73,7 +73,7 @@ func TestNodeInspectErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package node package node
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
@ -47,7 +47,7 @@ func TestNodeListErrorOnAPIFailure(t *testing.T) {
infoFunc: tc.infoFunc, infoFunc: tc.infoFunc,
}) })
cmd := newListCommand(cli) cmd := newListCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.Error(t, cmd.Execute(), tc.expectedError) assert.Error(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package node package node
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -43,7 +43,7 @@ func TestNodePromoteErrors(t *testing.T) {
nodeUpdateFunc: tc.nodeUpdateFunc, nodeUpdateFunc: tc.nodeUpdateFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -3,7 +3,7 @@ package node
import ( import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -59,7 +59,7 @@ func TestNodePsErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.Error(t, cmd.Execute(), tc.expectedError) assert.Error(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package node package node
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -32,7 +32,7 @@ func TestNodeRemoveErrors(t *testing.T) {
nodeRemoveFunc: tc.nodeRemoveFunc, nodeRemoveFunc: tc.nodeRemoveFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package node package node
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -63,7 +63,7 @@ func TestNodeUpdateErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -3,7 +3,6 @@ package plugin
import ( import (
"fmt" "fmt"
"io" "io"
"io/ioutil"
"runtime" "runtime"
"testing" "testing"
@ -41,7 +40,7 @@ func TestCreateErrors(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{}) cli := test.NewFakeCli(&fakeClient{})
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -53,7 +52,7 @@ func TestCreateErrorOnFileAsContextDir(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{}) cli := test.NewFakeCli(&fakeClient{})
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs([]string{"plugin-foo", tmpFile.Path()}) cmd.SetArgs([]string{"plugin-foo", tmpFile.Path()})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), "context must be a directory") assert.ErrorContains(t, cmd.Execute(), "context must be a directory")
} }
@ -64,7 +63,7 @@ func TestCreateErrorOnContextDirWithoutConfig(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{}) cli := test.NewFakeCli(&fakeClient{})
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()}) cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
expectedErr := "config.json: no such file or directory" expectedErr := "config.json: no such file or directory"
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
@ -82,7 +81,7 @@ func TestCreateErrorOnInvalidConfig(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{}) cli := test.NewFakeCli(&fakeClient{})
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()}) cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), "invalid") assert.ErrorContains(t, cmd.Execute(), "invalid")
} }
@ -100,7 +99,7 @@ func TestCreateErrorFromDaemon(t *testing.T) {
cmd := newCreateCommand(cli) cmd := newCreateCommand(cli)
cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()}) cmd.SetArgs([]string{"plugin-foo", tmpDir.Path()})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), "Error creating plugin") assert.ErrorContains(t, cmd.Execute(), "Error creating plugin")
} }

View File

@ -2,7 +2,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -40,7 +40,7 @@ func TestPluginDisableErrors(t *testing.T) {
pluginDisableFunc: tc.pluginDisableFunc, pluginDisableFunc: tc.pluginDisableFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -51,7 +51,7 @@ func TestPluginEnableErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -73,7 +73,7 @@ func TestInspectErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
}) })
} }

View File

@ -3,7 +3,6 @@ package plugin
import ( import (
"fmt" "fmt"
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@ -58,7 +57,7 @@ func TestInstallErrors(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{pluginInstallFunc: tc.installFunc}) cli := test.NewFakeCli(&fakeClient{pluginInstallFunc: tc.installFunc})
cmd := newInstallCommand(cli) cmd := newInstallCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -100,7 +99,7 @@ func TestInstallContentTrustErrors(t *testing.T) {
cli.SetNotaryClient(tc.notaryFunc) cli.SetNotaryClient(tc.notaryFunc)
cmd := newInstallCommand(cli) cmd := newInstallCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -117,7 +116,7 @@ func TestInstall(t *testing.T) {
args: []string{"foo"}, args: []string{"foo"},
expectedOutput: "Installed plugin foo\n", expectedOutput: "Installed plugin foo\n",
installFunc: func(name string, options types.PluginInstallOptions) (io.ReadCloser, error) { installFunc: func(name string, options types.PluginInstallOptions) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
{ {
@ -126,7 +125,7 @@ func TestInstall(t *testing.T) {
expectedOutput: "Installed plugin foo\n", expectedOutput: "Installed plugin foo\n",
installFunc: func(name string, options types.PluginInstallOptions) (io.ReadCloser, error) { installFunc: func(name string, options types.PluginInstallOptions) (io.ReadCloser, error) {
assert.Check(t, options.Disabled) assert.Check(t, options.Disabled)
return ioutil.NopCloser(strings.NewReader("")), nil return io.NopCloser(strings.NewReader("")), nil
}, },
}, },
} }

View File

@ -2,7 +2,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -52,7 +52,7 @@ func TestListErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -37,7 +37,7 @@ func TestRemoveErrors(t *testing.T) {
}) })
cmd := newRemoveCommand(cli) cmd := newRemoveCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -3,7 +3,7 @@ package registry
import ( import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"strings" "strings"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
@ -84,7 +84,7 @@ func verifyloginOptions(dockerCli command.Cli, opts *loginOptions) error {
return errors.New("Must provide --username with --password-stdin") return errors.New("Must provide --username with --password-stdin")
} }
contents, err := ioutil.ReadAll(dockerCli.In()) contents, err := io.ReadAll(dockerCli.In())
if err != nil { if err != nil {
return err return err
} }

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
@ -101,7 +100,7 @@ func readSecretData(in io.ReadCloser, file string) ([]byte, error) {
} }
defer in.Close() defer in.Close()
} }
data, err := ioutil.ReadAll(in) data, err := io.ReadAll(in)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,7 +1,8 @@
package secret package secret
import ( import (
"io/ioutil" "io"
"os"
"path/filepath" "path/filepath"
"reflect" "reflect"
"strings" "strings"
@ -44,14 +45,14 @@ func TestSecretCreateErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
func TestSecretCreateWithName(t *testing.T) { func TestSecretCreateWithName(t *testing.T) {
name := "foo" name := "foo"
data, err := ioutil.ReadFile(filepath.Join("testdata", secretDataFile)) data, err := os.ReadFile(filepath.Join("testdata", secretDataFile))
assert.NilError(t, err) assert.NilError(t, err)
expected := swarm.SecretSpec{ expected := swarm.SecretSpec{

View File

@ -2,7 +2,7 @@ package secret
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -59,7 +59,7 @@ func TestSecretInspectErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package secret package secret
import ( import (
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -40,7 +40,7 @@ func TestSecretListErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package secret package secret
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -36,7 +36,7 @@ func TestSecretRemoveErrors(t *testing.T) {
}), }),
) )
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -72,7 +72,7 @@ func TestSecretRemoveContinueAfterError(t *testing.T) {
}) })
cmd := newSecretRemoveCommand(cli) cmd := newSecretRemoveCommand(cli)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(names) cmd.SetArgs(names)
assert.Error(t, cmd.Execute(), "error removing secret: foo") assert.Error(t, cmd.Execute(), "error removing secret: foo")
assert.Check(t, is.DeepEqual(names, removedSecrets)) assert.Check(t, is.DeepEqual(names, removedSecrets))

View File

@ -3,7 +3,6 @@ package service
import ( import (
"context" "context"
"io" "io"
"io/ioutil"
"github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command"
"github.com/docker/cli/cli/command/service/progress" "github.com/docker/cli/cli/command/service/progress"
@ -21,7 +20,7 @@ func waitOnService(ctx context.Context, dockerCli command.Cli, serviceID string,
}() }()
if quiet { if quiet {
go io.Copy(ioutil.Discard, pipeReader) go io.Copy(io.Discard, pipeReader)
return <-errChan return <-errChan
} }

View File

@ -3,7 +3,7 @@ package service
import ( import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -49,7 +49,7 @@ func TestRollback(t *testing.T) {
cmd := newRollbackCommand(cli) cmd := newRollbackCommand(cli)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.Flags().Set("quiet", "true") cmd.Flags().Set("quiet", "true")
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
assert.Check(t, is.Equal(strings.TrimSpace(cli.ErrBuffer().String()), tc.expectedDockerCliErr)) assert.Check(t, is.Equal(strings.TrimSpace(cli.ErrBuffer().String()), tc.expectedDockerCliErr))
} }
@ -98,7 +98,7 @@ func TestRollbackWithErrors(t *testing.T) {
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.Flags().Set("quiet", "true") cmd.Flags().Set("quiet", "true")
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package stack package stack
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -11,7 +11,7 @@ import (
func TestDeployWithEmptyName(t *testing.T) { func TestDeployWithEmptyName(t *testing.T) {
cmd := newDeployCommand(test.NewFakeCli(&fakeClient{})) cmd := newDeployCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetArgs([]string{"' '"}) cmd.SetArgs([]string{"' '"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`) assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`)
} }

View File

@ -1,7 +1,7 @@
package stack package stack
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -49,7 +49,7 @@ func TestListErrors(t *testing.T) {
serviceListFunc: tc.serviceListFunc, serviceListFunc: tc.serviceListFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }

View File

@ -3,7 +3,6 @@ package loader
import ( import (
"fmt" "fmt"
"io" "io"
"io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -132,9 +131,9 @@ func loadConfigFile(filename string, stdin io.Reader) (*composetypes.ConfigFile,
var err error var err error
if filename == "-" { if filename == "-" {
bytes, err = ioutil.ReadAll(stdin) bytes, err = io.ReadAll(stdin)
} else { } else {
bytes, err = ioutil.ReadFile(filename) bytes, err = os.ReadFile(filename)
} }
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -1,7 +1,7 @@
package stack package stack
import ( import (
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -45,7 +45,7 @@ func TestStackPsErrors(t *testing.T) {
taskListFunc: tc.taskListFunc, taskListFunc: tc.taskListFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -169,7 +169,7 @@ func TestStackPs(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
if tc.expectedErr != "" { if tc.expectedErr != "" {
assert.Error(t, cmd.Execute(), tc.expectedErr) assert.Error(t, cmd.Execute(), tc.expectedErr)

View File

@ -2,7 +2,7 @@ package stack
import ( import (
"errors" "errors"
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -44,7 +44,7 @@ func fakeClientForRemoveStackTest(version string) *fakeClient {
func TestRemoveWithEmptyName(t *testing.T) { func TestRemoveWithEmptyName(t *testing.T) {
cmd := newRemoveCommand(test.NewFakeCli(&fakeClient{})) cmd := newRemoveCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetArgs([]string{"good", "' '", "alsogood"}) cmd.SetArgs([]string{"good", "' '", "alsogood"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`) assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`)
} }
@ -155,7 +155,7 @@ func TestRemoveContinueAfterError(t *testing.T) {
}, },
} }
cmd := newRemoveCommand(test.NewFakeCli(cli)) cmd := newRemoveCommand(test.NewFakeCli(cli))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs([]string{"foo", "bar"}) cmd.SetArgs([]string{"foo", "bar"})
assert.Error(t, cmd.Execute(), "Failed to remove some resources from stack: foo") assert.Error(t, cmd.Execute(), "Failed to remove some resources from stack: foo")

View File

@ -1,7 +1,7 @@
package stack package stack
import ( import (
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/cli/config/configfile"
@ -79,7 +79,7 @@ func TestStackServicesErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
}) })
} }
@ -88,7 +88,7 @@ func TestStackServicesErrors(t *testing.T) {
func TestRunServicesWithEmptyName(t *testing.T) { func TestRunServicesWithEmptyName(t *testing.T) {
cmd := newServicesCommand(test.NewFakeCli(&fakeClient{})) cmd := newServicesCommand(test.NewFakeCli(&fakeClient{}))
cmd.SetArgs([]string{"' '"}) cmd.SetArgs([]string{"' '"})
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`) assert.ErrorContains(t, cmd.Execute(), `invalid stack name: "' '"`)
} }

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"strings" "strings"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
@ -113,7 +112,7 @@ func attach(ctx context.Context, dockerCli command.Cli, opts caOptions) error {
}() }()
if opts.quiet { if opts.quiet {
go io.Copy(ioutil.Discard, pipeReader) go io.Copy(io.Discard, pipeReader)
return <-errChan return <-errChan
} }

View File

@ -2,7 +2,7 @@ package swarm
import ( import (
"bytes" "bytes"
"io/ioutil" "io"
"os" "os"
"testing" "testing"
"time" "time"
@ -65,7 +65,7 @@ type invalidCATestCases struct {
} }
func writeFile(data string) (string, error) { func writeFile(data string) (string, error) {
tmpfile, err := ioutil.TempFile("", "testfile") tmpfile, err := os.CreateTemp("", "testfile")
if err != nil { if err != nil {
return "", err return "", err
} }
@ -73,15 +73,14 @@ func writeFile(data string) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
tmpfile.Close() return tmpfile.Name(), tmpfile.Close()
return tmpfile.Name(), nil
} }
func TestDisplayTrustRootInvalidFlags(t *testing.T) { func TestDisplayTrustRootInvalidFlags(t *testing.T) {
// we need an actual PEMfile to test // we need an actual PEMfile to test
tmpfile, err := writeFile(cert) tmpfile, err := writeFile(cert)
assert.NilError(t, err) assert.NilError(t, err)
defer os.Remove(tmpfile) t.Cleanup(func() { _ = os.Remove(tmpfile) })
errorTestCases := []invalidCATestCases{ errorTestCases := []invalidCATestCases{
{ {
@ -145,7 +144,7 @@ func TestDisplayTrustRootInvalidFlags(t *testing.T) {
}, },
})) }))
assert.Check(t, cmd.Flags().Parse(testCase.args)) assert.Check(t, cmd.Flags().Parse(testCase.args))
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), testCase.errorMsg) assert.ErrorContains(t, cmd.Execute(), testCase.errorMsg)
} }
} }

View File

@ -2,7 +2,7 @@ package swarm
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -73,7 +73,7 @@ func TestSwarmInitErrorOnAPIFailure(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.Error(t, cmd.Execute(), tc.expectedError) assert.Error(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package swarm package swarm
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -54,7 +54,7 @@ func TestSwarmJoinErrors(t *testing.T) {
infoFunc: tc.infoFunc, infoFunc: tc.infoFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -2,7 +2,7 @@ package swarm
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -98,7 +98,7 @@ func TestSwarmJoinTokenErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package swarm package swarm
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -37,7 +37,7 @@ func TestSwarmLeaveErrors(t *testing.T) {
swarmLeaveFunc: tc.swarmLeaveFunc, swarmLeaveFunc: tc.swarmLeaveFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -4,7 +4,7 @@ import (
"encoding/csv" "encoding/csv"
"encoding/pem" "encoding/pem"
"fmt" "fmt"
"io/ioutil" "os"
"strings" "strings"
"time" "time"
@ -140,7 +140,7 @@ func (p *PEMFile) String() string {
// Set parses a root rotation option // Set parses a root rotation option
func (p *PEMFile) Set(value string) error { func (p *PEMFile) Set(value string) error {
contents, err := ioutil.ReadFile(value) contents, err := os.ReadFile(value)
if err != nil { if err != nil {
return err return err
} }
@ -195,7 +195,7 @@ func parseExternalCA(caSpec string) (*swarm.ExternalCA, error) {
hasURL = true hasURL = true
externalCA.URL = value externalCA.URL = value
case "cacert": case "cacert":
cacontents, err := ioutil.ReadFile(value) cacontents, err := os.ReadFile(value)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "unable to read CA cert for external CA") return nil, errors.Wrap(err, "unable to read CA cert for external CA")
} }

View File

@ -2,7 +2,7 @@ package swarm
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test"
@ -90,7 +90,7 @@ func TestSwarmUnlockKeyErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -1,7 +1,7 @@
package swarm package swarm
import ( import (
"io/ioutil" "io"
"strings" "strings"
"testing" "testing"
@ -70,7 +70,7 @@ func TestSwarmUnlockErrors(t *testing.T) {
swarmUnlockFunc: tc.swarmUnlockFunc, swarmUnlockFunc: tc.swarmUnlockFunc,
})) }))
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }
@ -92,7 +92,7 @@ func TestSwarmUnlock(t *testing.T) {
return nil return nil
}, },
}) })
dockerCli.SetIn(streams.NewIn(ioutil.NopCloser(strings.NewReader(input)))) dockerCli.SetIn(streams.NewIn(io.NopCloser(strings.NewReader(input))))
cmd := newUnlockCommand(dockerCli) cmd := newUnlockCommand(dockerCli)
assert.NilError(t, cmd.Execute()) assert.NilError(t, cmd.Execute())
} }

View File

@ -2,7 +2,7 @@ package swarm
import ( import (
"fmt" "fmt"
"io/ioutil" "io"
"testing" "testing"
"time" "time"
@ -75,7 +75,7 @@ func TestSwarmUpdateErrors(t *testing.T) {
for key, value := range tc.flags { for key, value := range tc.flags {
cmd.Flags().Set(key, value) cmd.Flags().Set(key, value)
} }
cmd.SetOut(ioutil.Discard) cmd.SetOut(io.Discard)
assert.ErrorContains(t, cmd.Execute(), tc.expectedError) assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
} }
} }

View File

@ -4,7 +4,6 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"sort" "sort"
"strings" "strings"
"text/template" "text/template"
@ -100,7 +99,7 @@ func makeTemplate(format string) (*template.Template, error) {
} }
// we execute the template for an empty message, so as to validate // we execute the template for an empty message, so as to validate
// a bad template like "{{.badFieldString}}" // a bad template like "{{.badFieldString}}"
return tmpl, tmpl.Execute(ioutil.Discard, &eventtypes.Message{}) return tmpl, tmpl.Execute(io.Discard, &eventtypes.Message{})
} }
// rfc3339NanoFixed is similar to time.RFC3339Nano, except it pads nanoseconds // rfc3339NanoFixed is similar to time.RFC3339Nano, except it pads nanoseconds

Some files were not shown because too many files have changed in this diff Show More