github.com/portworx/docker@v1.12.1/api/client/exec_test.go (about) 1 package client 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "testing" 7 8 flag "github.com/docker/docker/pkg/mflag" 9 "github.com/docker/engine-api/types" 10 ) 11 12 type arguments struct { 13 args []string 14 } 15 16 func TestParseExec(t *testing.T) { 17 invalids := map[*arguments]error{ 18 &arguments{[]string{"-unknown"}}: fmt.Errorf("flag provided but not defined: -unknown"), 19 &arguments{[]string{"-u"}}: fmt.Errorf("flag needs an argument: -u"), 20 &arguments{[]string{"--user"}}: fmt.Errorf("flag needs an argument: --user"), 21 } 22 valids := map[*arguments]*types.ExecConfig{ 23 &arguments{ 24 []string{"container", "command"}, 25 }: { 26 Cmd: []string{"command"}, 27 AttachStdout: true, 28 AttachStderr: true, 29 }, 30 &arguments{ 31 []string{"container", "command1", "command2"}, 32 }: { 33 Cmd: []string{"command1", "command2"}, 34 AttachStdout: true, 35 AttachStderr: true, 36 }, 37 &arguments{ 38 []string{"-i", "-t", "-u", "uid", "container", "command"}, 39 }: { 40 User: "uid", 41 AttachStdin: true, 42 AttachStdout: true, 43 AttachStderr: true, 44 Tty: true, 45 Cmd: []string{"command"}, 46 }, 47 &arguments{ 48 []string{"-d", "container", "command"}, 49 }: { 50 AttachStdin: false, 51 AttachStdout: false, 52 AttachStderr: false, 53 Detach: true, 54 Cmd: []string{"command"}, 55 }, 56 &arguments{ 57 []string{"-t", "-i", "-d", "container", "command"}, 58 }: { 59 AttachStdin: false, 60 AttachStdout: false, 61 AttachStderr: false, 62 Detach: true, 63 Tty: true, 64 Cmd: []string{"command"}, 65 }, 66 } 67 for invalid, expectedError := range invalids { 68 cmd := flag.NewFlagSet("exec", flag.ContinueOnError) 69 cmd.ShortUsage = func() {} 70 cmd.SetOutput(ioutil.Discard) 71 _, err := ParseExec(cmd, invalid.args) 72 if err == nil || err.Error() != expectedError.Error() { 73 t.Fatalf("Expected an error [%v] for %v, got %v", expectedError, invalid, err) 74 } 75 76 } 77 for valid, expectedExecConfig := range valids { 78 cmd := flag.NewFlagSet("exec", flag.ContinueOnError) 79 cmd.ShortUsage = func() {} 80 cmd.SetOutput(ioutil.Discard) 81 execConfig, err := ParseExec(cmd, valid.args) 82 if err != nil { 83 t.Fatal(err) 84 } 85 if !compareExecConfig(expectedExecConfig, execConfig) { 86 t.Fatalf("Expected [%v] for %v, got [%v]", expectedExecConfig, valid, execConfig) 87 } 88 } 89 } 90 91 func compareExecConfig(config1 *types.ExecConfig, config2 *types.ExecConfig) bool { 92 if config1.AttachStderr != config2.AttachStderr { 93 return false 94 } 95 if config1.AttachStdin != config2.AttachStdin { 96 return false 97 } 98 if config1.AttachStdout != config2.AttachStdout { 99 return false 100 } 101 if config1.Detach != config2.Detach { 102 return false 103 } 104 if config1.Privileged != config2.Privileged { 105 return false 106 } 107 if config1.Tty != config2.Tty { 108 return false 109 } 110 if config1.User != config2.User { 111 return false 112 } 113 if len(config1.Cmd) != len(config2.Cmd) { 114 return false 115 } 116 for index, value := range config1.Cmd { 117 if value != config2.Cmd[index] { 118 return false 119 } 120 } 121 return true 122 }