Browse code

Allow to use -H unix:// like -H tcp://

Guillaume J. Charmes authored on 2013/12/17 09:30:23
Showing 3 changed files
... ...
@@ -129,7 +129,7 @@ func ValidateEnv(val string) (string, error) {
129 129
 }
130 130
 
131 131
 func ValidateHost(val string) (string, error) {
132
-	host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, val)
132
+	host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, DEFAULTUNIXSOCKET, val)
133 133
 	if err != nil {
134 134
 		return val, err
135 135
 	}
... ...
@@ -776,11 +776,21 @@ func GetNameserversAsCIDR(resolvConf []byte) []string {
776 776
 	return nameservers
777 777
 }
778 778
 
779
-func ParseHost(host string, port int, addr string) (string, error) {
780
-	var proto string
779
+// FIXME: Change this not to receive default value as parameter
780
+func ParseHost(defaultHost string, defaultPort int, defaultUnix, addr string) (string, error) {
781
+	var (
782
+		proto string
783
+		host  string
784
+		port  int
785
+	)
786
+
781 787
 	switch {
782 788
 	case strings.HasPrefix(addr, "unix://"):
783
-		return addr, nil
789
+		proto = "unix"
790
+		addr = strings.TrimPrefix(addr, "unix://")
791
+		if addr == "" {
792
+			addr = defaultUnix
793
+		}
784 794
 	case strings.HasPrefix(addr, "tcp://"):
785 795
 		proto = "tcp"
786 796
 		addr = strings.TrimPrefix(addr, "tcp://")
... ...
@@ -791,19 +801,29 @@ func ParseHost(host string, port int, addr string) (string, error) {
791 791
 		proto = "tcp"
792 792
 	}
793 793
 
794
-	if strings.Contains(addr, ":") {
794
+	if proto != "unix" && strings.Contains(addr, ":") {
795 795
 		hostParts := strings.Split(addr, ":")
796 796
 		if len(hostParts) != 2 {
797 797
 			return "", fmt.Errorf("Invalid bind address format: %s", addr)
798 798
 		}
799 799
 		if hostParts[0] != "" {
800 800
 			host = hostParts[0]
801
+		} else {
802
+			host = defaultHost
801 803
 		}
802
-		if p, err := strconv.Atoi(hostParts[1]); err == nil {
804
+
805
+		if p, err := strconv.Atoi(hostParts[1]); err == nil && p != 0 {
803 806
 			port = p
807
+		} else {
808
+			port = defaultPort
804 809
 		}
810
+
805 811
 	} else {
806 812
 		host = addr
813
+		port = defaultPort
814
+	}
815
+	if proto == "unix" {
816
+		return fmt.Sprintf("%s://%s", proto, host), nil
807 817
 	}
808 818
 	return fmt.Sprintf("%s://%s:%d", proto, host, port), nil
809 819
 }
... ...
@@ -299,22 +299,28 @@ func assertRAMInBytes(t *testing.T, size string, expectError bool, expectedBytes
299 299
 }
300 300
 
301 301
 func TestParseHost(t *testing.T) {
302
-	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" {
302
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" {
303 303
 		t.Errorf("0.0.0.0 -> expected tcp://0.0.0.0:4243, got %s", addr)
304 304
 	}
305
-	if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" {
305
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" {
306 306
 		t.Errorf("0.0.0.1:5555 -> expected tcp://0.0.0.1:5555, got %s", addr)
307 307
 	}
308
-	if addr, err := ParseHost("127.0.0.1", 4243, ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" {
308
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" {
309 309
 		t.Errorf(":6666 -> expected tcp://127.0.0.1:6666, got %s", addr)
310 310
 	}
311
-	if addr, err := ParseHost("127.0.0.1", 4243, "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" {
311
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" {
312 312
 		t.Errorf("tcp://:7777 -> expected tcp://127.0.0.1:7777, got %s", addr)
313 313
 	}
314
-	if addr, err := ParseHost("127.0.0.1", 4243, "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" {
314
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" {
315 315
 		t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr)
316 316
 	}
317
-	if addr, err := ParseHost("127.0.0.1", 4243, "udp://127.0.0.1"); err == nil {
317
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "unix://"); err != nil || addr != "unix:///var/run/docker.sock" {
318
+		t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr)
319
+	}
320
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "udp://127.0.0.1"); err == nil {
321
+		t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr)
322
+	}
323
+	if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "udp://127.0.0.1:4243"); err == nil {
318 324
 		t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr)
319 325
 	}
320 326
 }