Browse code

let utils.ParseHost return err when errors happen

Yang Bai authored on 2013/10/24 14:23:02
Showing 3 changed files
... ...
@@ -46,7 +46,12 @@ func main() {
46 46
 		flHosts = flHosts[1:] //trick to display a nice default value in the usage
47 47
 	}
48 48
 	for i, flHost := range flHosts {
49
-		flHosts[i] = utils.ParseHost(docker.DEFAULTHTTPHOST, docker.DEFAULTHTTPPORT, flHost)
49
+		host, err := utils.ParseHost(docker.DEFAULTHTTPHOST, docker.DEFAULTHTTPPORT, flHost)
50
+		if err == nil {
51
+			flHosts[i] = host
52
+		} else {
53
+			log.Fatal(err)
54
+		}
50 55
 	}
51 56
 
52 57
 	if *bridgeName != "" {
... ...
@@ -10,7 +10,6 @@ import (
10 10
 	"index/suffixarray"
11 11
 	"io"
12 12
 	"io/ioutil"
13
-	"log"
14 13
 	"net/http"
15 14
 	"os"
16 15
 	"os/exec"
... ...
@@ -818,17 +817,17 @@ func StripComments(input []byte, commentMarker []byte) []byte {
818 818
 	return output
819 819
 }
820 820
 
821
-func ParseHost(host string, port int, addr string) string {
821
+func ParseHost(host string, port int, addr string) (string, error) {
822 822
 	var proto string
823 823
 	switch {
824 824
 	case strings.HasPrefix(addr, "unix://"):
825
-		return addr
825
+		return addr, nil
826 826
 	case strings.HasPrefix(addr, "tcp://"):
827 827
 		proto = "tcp"
828 828
 		addr = strings.TrimPrefix(addr, "tcp://")
829 829
 	default:
830 830
 		if strings.Contains(addr, "://") {
831
-			log.Fatal("Invalid bind address proto")
831
+			return "", fmt.Errorf("Invalid bind address protocol: %s", addr)
832 832
 		}
833 833
 		proto = "tcp"
834 834
 	}
... ...
@@ -836,7 +835,7 @@ func ParseHost(host string, port int, addr string) string {
836 836
 	if strings.Contains(addr, ":") {
837 837
 		hostParts := strings.Split(addr, ":")
838 838
 		if len(hostParts) != 2 {
839
-			log.Fatal("Invalid bind address format.")
839
+			return "", fmt.Errorf("Invalid bind address format: %s", addr)
840 840
 		}
841 841
 		if hostParts[0] != "" {
842 842
 			host = hostParts[0]
... ...
@@ -847,7 +846,7 @@ func ParseHost(host string, port int, addr string) string {
847 847
 	} else {
848 848
 		host = addr
849 849
 	}
850
-	return fmt.Sprintf("%s://%s:%d", proto, host, port)
850
+	return fmt.Sprintf("%s://%s:%d", proto, host, port), nil
851 851
 }
852 852
 
853 853
 func GetReleaseVersion() string {
... ...
@@ -266,21 +266,24 @@ func TestHumanSize(t *testing.T) {
266 266
 }
267 267
 
268 268
 func TestParseHost(t *testing.T) {
269
-	if addr := ParseHost("127.0.0.1", 4243, "0.0.0.0"); addr != "tcp://0.0.0.0:4243" {
269
+	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" {
270 270
 		t.Errorf("0.0.0.0 -> expected tcp://0.0.0.0:4243, got %s", addr)
271 271
 	}
272
-	if addr := ParseHost("127.0.0.1", 4243, "0.0.0.1:5555"); addr != "tcp://0.0.0.1:5555" {
272
+	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" {
273 273
 		t.Errorf("0.0.0.1:5555 -> expected tcp://0.0.0.1:5555, got %s", addr)
274 274
 	}
275
-	if addr := ParseHost("127.0.0.1", 4243, ":6666"); addr != "tcp://127.0.0.1:6666" {
275
+	if addr, err := ParseHost("127.0.0.1", 4243, ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" {
276 276
 		t.Errorf(":6666 -> expected tcp://127.0.0.1:6666, got %s", addr)
277 277
 	}
278
-	if addr := ParseHost("127.0.0.1", 4243, "tcp://:7777"); addr != "tcp://127.0.0.1:7777" {
278
+	if addr, err := ParseHost("127.0.0.1", 4243, "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" {
279 279
 		t.Errorf("tcp://:7777 -> expected tcp://127.0.0.1:7777, got %s", addr)
280 280
 	}
281
-	if addr := ParseHost("127.0.0.1", 4243, "unix:///var/run/docker.sock"); addr != "unix:///var/run/docker.sock" {
281
+	if addr, err := ParseHost("127.0.0.1", 4243, "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" {
282 282
 		t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr)
283 283
 	}
284
+	if addr, err := ParseHost("127.0.0.1", 4243, "udp://127.0.0.1"); err == nil {
285
+		t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr)
286
+	}
284 287
 }
285 288
 
286 289
 func TestParseRepositoryTag(t *testing.T) {