github.com/panekj/cli@v0.0.0-20230304125325-467dd2f3797e/cli/command/checkpoint/create_test.go (about) 1 package checkpoint 2 3 import ( 4 "io" 5 "strings" 6 "testing" 7 8 "github.com/docker/cli/internal/test" 9 "github.com/docker/docker/api/types" 10 "github.com/pkg/errors" 11 "gotest.tools/v3/assert" 12 is "gotest.tools/v3/assert/cmp" 13 ) 14 15 func TestCheckpointCreateErrors(t *testing.T) { 16 testCases := []struct { 17 args []string 18 checkpointCreateFunc func(container string, options types.CheckpointCreateOptions) error 19 expectedError string 20 }{ 21 { 22 args: []string{"too-few-arguments"}, 23 expectedError: "requires exactly 2 arguments", 24 }, 25 { 26 args: []string{"too", "many", "arguments"}, 27 expectedError: "requires exactly 2 arguments", 28 }, 29 { 30 args: []string{"foo", "bar"}, 31 checkpointCreateFunc: func(container string, options types.CheckpointCreateOptions) error { 32 return errors.Errorf("error creating checkpoint for container foo") 33 }, 34 expectedError: "error creating checkpoint for container foo", 35 }, 36 } 37 38 for _, tc := range testCases { 39 cli := test.NewFakeCli(&fakeClient{ 40 checkpointCreateFunc: tc.checkpointCreateFunc, 41 }) 42 cmd := newCreateCommand(cli) 43 cmd.SetArgs(tc.args) 44 cmd.SetOut(io.Discard) 45 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 46 } 47 } 48 49 func TestCheckpointCreateWithOptions(t *testing.T) { 50 var containerID, checkpointID, checkpointDir string 51 var exit bool 52 cli := test.NewFakeCli(&fakeClient{ 53 checkpointCreateFunc: func(container string, options types.CheckpointCreateOptions) error { 54 containerID = container 55 checkpointID = options.CheckpointID 56 checkpointDir = options.CheckpointDir 57 exit = options.Exit 58 return nil 59 }, 60 }) 61 cmd := newCreateCommand(cli) 62 checkpoint := "checkpoint-bar" 63 cmd.SetArgs([]string{"container-foo", checkpoint}) 64 cmd.Flags().Set("leave-running", "true") 65 cmd.Flags().Set("checkpoint-dir", "/dir/foo") 66 assert.NilError(t, cmd.Execute()) 67 assert.Check(t, is.Equal("container-foo", containerID)) 68 assert.Check(t, is.Equal(checkpoint, checkpointID)) 69 assert.Check(t, is.Equal("/dir/foo", checkpointDir)) 70 assert.Check(t, is.Equal(false, exit)) 71 assert.Check(t, is.Equal(checkpoint, strings.TrimSpace(cli.OutBuffer().String()))) 72 }