Add more helpful error message for -add-host

Fixes: #10655

As noted in the issue, bad format was being returned even if the format
was appropriate, but the IP was invalid.  This adds a better error
message for when the IP address fails validation.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
This commit is contained in:
Phil Estes 2015-02-09 09:59:05 -05:00 committed by Vincent Demeester
parent d656c63b21
commit 196bc32878
2 changed files with 15 additions and 10 deletions

View File

@ -207,10 +207,10 @@ func ValidateExtraHost(val string) (string, error) {
// allow for IPv6 addresses in extra hosts by only splitting on first ":" // allow for IPv6 addresses in extra hosts by only splitting on first ":"
arr := strings.SplitN(val, ":", 2) arr := strings.SplitN(val, ":", 2)
if len(arr) != 2 || len(arr[0]) == 0 { if len(arr) != 2 || len(arr[0]) == 0 {
return "", fmt.Errorf("bad format for add-host: %s", val) return "", fmt.Errorf("bad format for add-host: %q", val)
} }
if _, err := ValidateIPAddress(arr[1]); err != nil { if _, err := ValidateIPAddress(arr[1]); err != nil {
return "", fmt.Errorf("bad format for add-host: %s", val) return "", fmt.Errorf("invalid IP address in add-host: %q", arr[1])
} }
return val, nil return val, nil
} }

View File

@ -1,6 +1,7 @@
package opts package opts
import ( import (
"strings"
"testing" "testing"
) )
@ -113,11 +114,11 @@ func TestValidateExtraHosts(t *testing.T) {
`ipv6local:::1`, `ipv6local:::1`,
} }
invalid := []string{ invalid := map[string]string{
`myhost:192.notanipaddress.1`, `myhost:192.notanipaddress.1`: `invalid IP`,
`thathost-nosemicolon10.0.0.1`, `thathost-nosemicolon10.0.0.1`: `bad format`,
`anipv6host:::::1`, `anipv6host:::::1`: `invalid IP`,
`ipv6local:::0::`, `ipv6local:::0::`: `invalid IP`,
} }
for _, extrahost := range valid { for _, extrahost := range valid {
@ -126,9 +127,13 @@ func TestValidateExtraHosts(t *testing.T) {
} }
} }
for _, extrahost := range invalid { for extraHost, expectedError := range invalid {
if _, err := ValidateExtraHost(extrahost); err == nil { if _, err := ValidateExtraHost(extraHost); err == nil {
t.Fatalf("ValidateExtraHost(`" + extrahost + "`) should have failed validation") t.Fatalf("ValidateExtraHost(`%q`) should have failed validation", extraHost)
} else {
if !strings.Contains(err.Error(), expectedError) {
t.Fatalf("ValidateExtraHost(`%q`) error should contain %q", extraHost, expectedError)
}
} }
} }
} }