mirror of https://github.com/docker/cli.git
118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
|
package container
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/docker/docker/api/types"
|
||
|
)
|
||
|
|
||
|
type arguments struct {
|
||
|
options execOptions
|
||
|
container string
|
||
|
execCmd []string
|
||
|
}
|
||
|
|
||
|
func TestParseExec(t *testing.T) {
|
||
|
valids := map[*arguments]*types.ExecConfig{
|
||
|
&arguments{
|
||
|
execCmd: []string{"command"},
|
||
|
}: {
|
||
|
Cmd: []string{"command"},
|
||
|
AttachStdout: true,
|
||
|
AttachStderr: true,
|
||
|
},
|
||
|
&arguments{
|
||
|
execCmd: []string{"command1", "command2"},
|
||
|
}: {
|
||
|
Cmd: []string{"command1", "command2"},
|
||
|
AttachStdout: true,
|
||
|
AttachStderr: true,
|
||
|
},
|
||
|
&arguments{
|
||
|
options: execOptions{
|
||
|
interactive: true,
|
||
|
tty: true,
|
||
|
user: "uid",
|
||
|
},
|
||
|
execCmd: []string{"command"},
|
||
|
}: {
|
||
|
User: "uid",
|
||
|
AttachStdin: true,
|
||
|
AttachStdout: true,
|
||
|
AttachStderr: true,
|
||
|
Tty: true,
|
||
|
Cmd: []string{"command"},
|
||
|
},
|
||
|
&arguments{
|
||
|
options: execOptions{
|
||
|
detach: true,
|
||
|
},
|
||
|
execCmd: []string{"command"},
|
||
|
}: {
|
||
|
AttachStdin: false,
|
||
|
AttachStdout: false,
|
||
|
AttachStderr: false,
|
||
|
Detach: true,
|
||
|
Cmd: []string{"command"},
|
||
|
},
|
||
|
&arguments{
|
||
|
options: execOptions{
|
||
|
tty: true,
|
||
|
interactive: true,
|
||
|
detach: true,
|
||
|
},
|
||
|
execCmd: []string{"command"},
|
||
|
}: {
|
||
|
AttachStdin: false,
|
||
|
AttachStdout: false,
|
||
|
AttachStderr: false,
|
||
|
Detach: true,
|
||
|
Tty: true,
|
||
|
Cmd: []string{"command"},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for valid, expectedExecConfig := range valids {
|
||
|
execConfig, err := parseExec(&valid.options, valid.container, valid.execCmd)
|
||
|
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
|
||
|
}
|