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:
Vincent Demeester 2017-02-06 14:16:03 +01:00
parent 629abab4c0
commit 7fa9161585
2 changed files with 48 additions and 3 deletions

View File

@ -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
} }

View File

@ -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 {