b9c94b70bf
Using new methods from engine-api, that make it clearer which element is required when consuming the API. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
122 lines
2.9 KiB
Go
122 lines
2.9 KiB
Go
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"testing"
|
|
|
|
flag "github.com/docker/docker/pkg/mflag"
|
|
"github.com/docker/engine-api/types"
|
|
)
|
|
|
|
type arguments struct {
|
|
args []string
|
|
}
|
|
|
|
func TestParseExec(t *testing.T) {
|
|
invalids := map[*arguments]error{
|
|
&arguments{[]string{"-unknown"}}: fmt.Errorf("flag provided but not defined: -unknown"),
|
|
&arguments{[]string{"-u"}}: fmt.Errorf("flag needs an argument: -u"),
|
|
&arguments{[]string{"--user"}}: fmt.Errorf("flag needs an argument: --user"),
|
|
}
|
|
valids := map[*arguments]*types.ExecConfig{
|
|
&arguments{
|
|
[]string{"container", "command"},
|
|
}: {
|
|
Cmd: []string{"command"},
|
|
AttachStdout: true,
|
|
AttachStderr: true,
|
|
},
|
|
&arguments{
|
|
[]string{"container", "command1", "command2"},
|
|
}: {
|
|
Cmd: []string{"command1", "command2"},
|
|
AttachStdout: true,
|
|
AttachStderr: true,
|
|
},
|
|
&arguments{
|
|
[]string{"-i", "-t", "-u", "uid", "container", "command"},
|
|
}: {
|
|
User: "uid",
|
|
AttachStdin: true,
|
|
AttachStdout: true,
|
|
AttachStderr: true,
|
|
Tty: true,
|
|
Cmd: []string{"command"},
|
|
},
|
|
&arguments{
|
|
[]string{"-d", "container", "command"},
|
|
}: {
|
|
AttachStdin: false,
|
|
AttachStdout: false,
|
|
AttachStderr: false,
|
|
Detach: true,
|
|
Cmd: []string{"command"},
|
|
},
|
|
&arguments{
|
|
[]string{"-t", "-i", "-d", "container", "command"},
|
|
}: {
|
|
AttachStdin: false,
|
|
AttachStdout: false,
|
|
AttachStderr: false,
|
|
Detach: true,
|
|
Tty: true,
|
|
Cmd: []string{"command"},
|
|
},
|
|
}
|
|
for invalid, expectedError := range invalids {
|
|
cmd := flag.NewFlagSet("exec", flag.ContinueOnError)
|
|
cmd.ShortUsage = func() {}
|
|
cmd.SetOutput(ioutil.Discard)
|
|
_, err := ParseExec(cmd, invalid.args)
|
|
if err == nil || err.Error() != expectedError.Error() {
|
|
t.Fatalf("Expected an error [%v] for %v, got %v", expectedError, invalid, err)
|
|
}
|
|
|
|
}
|
|
for valid, expectedExecConfig := range valids {
|
|
cmd := flag.NewFlagSet("exec", flag.ContinueOnError)
|
|
cmd.ShortUsage = func() {}
|
|
cmd.SetOutput(ioutil.Discard)
|
|
execConfig, err := ParseExec(cmd, valid.args)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !compareExecConfig(expectedExecConfig, execConfig) {
|
|
t.Fatalf("Expected [%v] for %v, got [%v]", expectedExecConfig, valid, execConfig)
|
|
}
|
|
}
|
|
}
|
|
|
|
func compareExecConfig(config1 *types.ExecConfig, config2 *types.ExecConfig) bool {
|
|
if config1.AttachStderr != config2.AttachStderr {
|
|
return false
|
|
}
|
|
if config1.AttachStdin != config2.AttachStdin {
|
|
return false
|
|
}
|
|
if config1.AttachStdout != config2.AttachStdout {
|
|
return false
|
|
}
|
|
if config1.Detach != config2.Detach {
|
|
return false
|
|
}
|
|
if config1.Privileged != config2.Privileged {
|
|
return false
|
|
}
|
|
if config1.Tty != config2.Tty {
|
|
return false
|
|
}
|
|
if config1.User != config2.User {
|
|
return false
|
|
}
|
|
if len(config1.Cmd) != len(config2.Cmd) {
|
|
return false
|
|
}
|
|
for index, value := range config1.Cmd {
|
|
if value != config2.Cmd[index] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|