mirror of https://github.com/docker/cli.git
Make sure we validate simple syntax on service commands
We ignored errors for simple syntax in `PortOpt` (missed that in the previous migration of this code). This make sure we don't ignore `nat.Parse` errors. Test has been migrate too (errors are not exactly the same as before though -_-) Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
parent
629abab4c0
commit
7fa9161585
15
opts/port.go
15
opts/port.go
|
@ -94,11 +94,20 @@ func (p *PortOpt) Set(value string) error {
|
||||||
} else {
|
} else {
|
||||||
// short syntax
|
// short syntax
|
||||||
portConfigs := []swarm.PortConfig{}
|
portConfigs := []swarm.PortConfig{}
|
||||||
// We can ignore errors because the format was already validated by ValidatePort
|
ports, portBindingMap, err := nat.ParsePortSpecs([]string{value})
|
||||||
ports, portBindings, _ := nat.ParsePortSpecs([]string{value})
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, portBindings := range portBindingMap {
|
||||||
|
for _, portBinding := range portBindings {
|
||||||
|
if portBinding.HostIP != "" {
|
||||||
|
return fmt.Errorf("HostIP is not supported.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for port := range ports {
|
for port := range ports {
|
||||||
portConfig, err := ConvertPortToPortConfig(port, portBindings)
|
portConfig, err := ConvertPortToPortConfig(port, portBindingMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,6 +245,42 @@ func TestPortOptInvalidComplexSyntax(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPortOptInvalidSimpleSyntax(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
value string
|
||||||
|
expectedError string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
value: "9999999",
|
||||||
|
expectedError: "Invalid containerPort: 9999999",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "80/xyz",
|
||||||
|
expectedError: "Invalid proto: xyz",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "tcp",
|
||||||
|
expectedError: "Invalid containerPort: tcp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "udp",
|
||||||
|
expectedError: "Invalid containerPort: udp",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "",
|
||||||
|
expectedError: "No port specified",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "1.1.1.1:80:80",
|
||||||
|
expectedError: "HostIP is not supported",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
var port PortOpt
|
||||||
|
assert.Error(t, port.Set(tc.value), tc.expectedError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func assertContains(t *testing.T, portConfigs []swarm.PortConfig, expected swarm.PortConfig) {
|
func assertContains(t *testing.T, portConfigs []swarm.PortConfig, expected swarm.PortConfig) {
|
||||||
var contains = false
|
var contains = false
|
||||||
for _, portConfig := range portConfigs {
|
for _, portConfig := range portConfigs {
|
||||||
|
|
Loading…
Reference in New Issue