github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/cli/command/image/load_test.go (about) 1 package image 2 3 import ( 4 "fmt" 5 "io" 6 "strings" 7 "testing" 8 9 "github.com/docker/docker/api/types" 10 "github.com/khulnasoft/cli/internal/test" 11 "github.com/pkg/errors" 12 "gotest.tools/v3/assert" 13 "gotest.tools/v3/golden" 14 ) 15 16 func TestNewLoadCommandErrors(t *testing.T) { 17 testCases := []struct { 18 name string 19 args []string 20 isTerminalIn bool 21 expectedError string 22 imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) 23 }{ 24 { 25 name: "wrong-args", 26 args: []string{"arg"}, 27 expectedError: "accepts no arguments.", 28 }, 29 { 30 name: "input-to-terminal", 31 isTerminalIn: true, 32 expectedError: "requested load from stdin, but stdin is empty", 33 }, 34 { 35 name: "pull-error", 36 expectedError: "something went wrong", 37 imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { 38 return types.ImageLoadResponse{}, errors.Errorf("something went wrong") 39 }, 40 }, 41 } 42 for _, tc := range testCases { 43 cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}) 44 cli.In().SetIsTerminal(tc.isTerminalIn) 45 cmd := NewLoadCommand(cli) 46 cmd.SetOut(io.Discard) 47 cmd.SetArgs(tc.args) 48 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 49 } 50 } 51 52 func TestNewLoadCommandInvalidInput(t *testing.T) { 53 expectedError := "open *" 54 cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{})) 55 cmd.SetOut(io.Discard) 56 cmd.SetArgs([]string{"--input", "*"}) 57 err := cmd.Execute() 58 assert.ErrorContains(t, err, expectedError) 59 } 60 61 func TestNewLoadCommandSuccess(t *testing.T) { 62 testCases := []struct { 63 name string 64 args []string 65 imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) 66 }{ 67 { 68 name: "simple", 69 imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { 70 return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil 71 }, 72 }, 73 { 74 name: "json", 75 imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { 76 json := "{\"ID\": \"1\"}" 77 return types.ImageLoadResponse{ 78 Body: io.NopCloser(strings.NewReader(json)), 79 JSON: true, 80 }, nil 81 }, 82 }, 83 { 84 name: "input-file", 85 args: []string{"--input", "testdata/load-command-success.input.txt"}, 86 imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) { 87 return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil 88 }, 89 }, 90 } 91 for _, tc := range testCases { 92 cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}) 93 cmd := NewLoadCommand(cli) 94 cmd.SetOut(io.Discard) 95 cmd.SetArgs(tc.args) 96 err := cmd.Execute() 97 assert.NilError(t, err) 98 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("load-command-success.%s.golden", tc.name)) 99 } 100 }