github.com/uriddle/docker@v0.0.0-20210926094723-4072e6aeb013/opts/hosts_test.go (about)

     1  package opts
     2  
     3  import (
     4  	"runtime"
     5  	"testing"
     6  )
     7  
     8  func TestParseHost(t *testing.T) {
     9  	invalid := map[string]string{
    10  		"anything":              "Invalid bind address format: anything",
    11  		"something with spaces": "Invalid bind address format: something with spaces",
    12  		"://":                "Invalid bind address format: ://",
    13  		"unknown://":         "Invalid bind address format: unknown://",
    14  		"tcp://:port":        "Invalid bind address format: :port",
    15  		"tcp://invalid":      "Invalid bind address format: invalid",
    16  		"tcp://invalid:port": "Invalid bind address format: invalid:port",
    17  	}
    18  	const defaultHTTPHost = "tcp://127.0.0.1:2375"
    19  	var defaultHOST = "unix:///var/run/docker.sock"
    20  
    21  	if runtime.GOOS == "windows" {
    22  		defaultHOST = defaultHTTPHost
    23  	}
    24  	valid := map[string]string{
    25  		"":                         defaultHOST,
    26  		"fd://":                    "fd://",
    27  		"fd://something":           "fd://something",
    28  		"tcp://host:":              "tcp://host:2375",
    29  		"tcp://":                   "tcp://localhost:2375",
    30  		"tcp://:2375":              "tcp://localhost:2375", // default ip address
    31  		"tcp://:2376":              "tcp://localhost:2376", // default ip address
    32  		"tcp://0.0.0.0:8080":       "tcp://0.0.0.0:8080",
    33  		"tcp://192.168.0.0:12000":  "tcp://192.168.0.0:12000",
    34  		"tcp://192.168:8080":       "tcp://192.168:8080",
    35  		"tcp://0.0.0.0:1234567890": "tcp://0.0.0.0:1234567890", // yeah it's valid :P
    36  		"tcp://docker.com:2375":    "tcp://docker.com:2375",
    37  		"unix://":                  "unix:///var/run/docker.sock", // default unix:// value
    38  		"unix://path/to/socket":    "unix://path/to/socket",
    39  	}
    40  
    41  	for value, errorMessage := range invalid {
    42  		if _, err := ParseHost(defaultHTTPHost, value); err == nil || err.Error() != errorMessage {
    43  			t.Fatalf("Expected an error for %v with [%v], got [%v]", value, errorMessage, err)
    44  		}
    45  	}
    46  	for value, expected := range valid {
    47  		if actual, err := ParseHost(defaultHTTPHost, value); err != nil || actual != expected {
    48  			t.Fatalf("Expected for %v [%v], got [%v, %v]", value, expected, actual, err)
    49  		}
    50  	}
    51  }
    52  
    53  func TestParseDockerDaemonHost(t *testing.T) {
    54  	var (
    55  		defaultHTTPHost  = "tcp://localhost:2375"
    56  		defaultHTTPSHost = "tcp://localhost:2376"
    57  		defaultUnix      = "/var/run/docker.sock"
    58  		defaultHOST      = "unix:///var/run/docker.sock"
    59  	)
    60  	if runtime.GOOS == "windows" {
    61  		defaultHOST = defaultHTTPHost
    62  	}
    63  	invalids := map[string]string{
    64  		"0.0.0.0":                       "Invalid bind address format: 0.0.0.0",
    65  		"tcp:a.b.c.d":                   "Invalid bind address format: tcp:a.b.c.d",
    66  		"tcp:a.b.c.d/path":              "Invalid bind address format: tcp:a.b.c.d/path",
    67  		"udp://127.0.0.1":               "Invalid bind address format: udp://127.0.0.1",
    68  		"udp://127.0.0.1:2375":          "Invalid bind address format: udp://127.0.0.1:2375",
    69  		"tcp://unix:///run/docker.sock": "Invalid bind address format: unix",
    70  		"tcp":  "Invalid bind address format: tcp",
    71  		"unix": "Invalid bind address format: unix",
    72  		"fd":   "Invalid bind address format: fd",
    73  	}
    74  	valids := map[string]string{
    75  		"0.0.0.1:":                    "tcp://0.0.0.1:2375",
    76  		"0.0.0.1:5555":                "tcp://0.0.0.1:5555",
    77  		"0.0.0.1:5555/path":           "tcp://0.0.0.1:5555/path",
    78  		"[::1]:":                      "tcp://[::1]:2375",
    79  		"[::1]:5555/path":             "tcp://[::1]:5555/path",
    80  		"[0:0:0:0:0:0:0:1]:":          "tcp://[0:0:0:0:0:0:0:1]:2375",
    81  		"[0:0:0:0:0:0:0:1]:5555/path": "tcp://[0:0:0:0:0:0:0:1]:5555/path",
    82  		":6666":                   "tcp://localhost:6666",
    83  		":6666/path":              "tcp://localhost:6666/path",
    84  		"":                        defaultHOST,
    85  		" ":                       defaultHOST,
    86  		"  ":                      defaultHOST,
    87  		"tcp://":                  defaultHTTPHost,
    88  		"tcp://:7777":             "tcp://localhost:7777",
    89  		"tcp://:7777/path":        "tcp://localhost:7777/path",
    90  		" tcp://:7777/path ":      "tcp://localhost:7777/path",
    91  		"unix:///run/docker.sock": "unix:///run/docker.sock",
    92  		"unix://":                 "unix:///var/run/docker.sock",
    93  		"fd://":                   "fd://",
    94  		"fd://something":          "fd://something",
    95  		"localhost:":              "tcp://localhost:2375",
    96  		"localhost:5555":          "tcp://localhost:5555",
    97  		"localhost:5555/path":     "tcp://localhost:5555/path",
    98  	}
    99  	for invalidAddr, expectedError := range invalids {
   100  		if addr, err := parseDockerDaemonHost(defaultHTTPHost, defaultHTTPSHost, defaultUnix, "", invalidAddr); err == nil || err.Error() != expectedError {
   101  			t.Errorf("tcp %v address expected error %v return, got %s and addr %v", invalidAddr, expectedError, err, addr)
   102  		}
   103  	}
   104  	for validAddr, expectedAddr := range valids {
   105  		if addr, err := parseDockerDaemonHost(defaultHTTPHost, defaultHTTPSHost, defaultUnix, "", validAddr); err != nil || addr != expectedAddr {
   106  			t.Errorf("%v -> expected %v, got (%v) addr (%v)", validAddr, expectedAddr, err, addr)
   107  		}
   108  	}
   109  }
   110  
   111  func TestParseTCP(t *testing.T) {
   112  	var (
   113  		defaultHTTPHost = "tcp://127.0.0.1:2376"
   114  	)
   115  	invalids := map[string]string{
   116  		"0.0.0.0":              "Invalid bind address format: 0.0.0.0",
   117  		"tcp:a.b.c.d":          "Invalid bind address format: tcp:a.b.c.d",
   118  		"tcp:a.b.c.d/path":     "Invalid bind address format: tcp:a.b.c.d/path",
   119  		"udp://127.0.0.1":      "Invalid proto, expected tcp: udp://127.0.0.1",
   120  		"udp://127.0.0.1:2375": "Invalid proto, expected tcp: udp://127.0.0.1:2375",
   121  	}
   122  	valids := map[string]string{
   123  		"":                            defaultHTTPHost,
   124  		"tcp://":                      defaultHTTPHost,
   125  		"0.0.0.1:":                    "tcp://0.0.0.1:2376",
   126  		"0.0.0.1:5555":                "tcp://0.0.0.1:5555",
   127  		"0.0.0.1:5555/path":           "tcp://0.0.0.1:5555/path",
   128  		":6666":                       "tcp://127.0.0.1:6666",
   129  		":6666/path":                  "tcp://127.0.0.1:6666/path",
   130  		"tcp://:7777":                 "tcp://127.0.0.1:7777",
   131  		"tcp://:7777/path":            "tcp://127.0.0.1:7777/path",
   132  		"[::1]:":                      "tcp://[::1]:2376",
   133  		"[::1]:5555":                  "tcp://[::1]:5555",
   134  		"[::1]:5555/path":             "tcp://[::1]:5555/path",
   135  		"[0:0:0:0:0:0:0:1]:":          "tcp://[0:0:0:0:0:0:0:1]:2376",
   136  		"[0:0:0:0:0:0:0:1]:5555":      "tcp://[0:0:0:0:0:0:0:1]:5555",
   137  		"[0:0:0:0:0:0:0:1]:5555/path": "tcp://[0:0:0:0:0:0:0:1]:5555/path",
   138  		"localhost:":                  "tcp://localhost:2376",
   139  		"localhost:5555":              "tcp://localhost:5555",
   140  		"localhost:5555/path":         "tcp://localhost:5555/path",
   141  	}
   142  	for invalidAddr, expectedError := range invalids {
   143  		if addr, err := parseTCPAddr(invalidAddr, defaultHTTPHost); err == nil || err.Error() != expectedError {
   144  			t.Errorf("tcp %v address expected error %v return, got %s and addr %v", invalidAddr, expectedError, err, addr)
   145  		}
   146  	}
   147  	for validAddr, expectedAddr := range valids {
   148  		if addr, err := parseTCPAddr(validAddr, defaultHTTPHost); err != nil || addr != expectedAddr {
   149  			t.Errorf("%v -> expected %v, got %v and addr %v", validAddr, expectedAddr, err, addr)
   150  		}
   151  	}
   152  }
   153  
   154  func TestParseInvalidUnixAddrInvalid(t *testing.T) {
   155  	if _, err := parseUnixAddr("tcp://127.0.0.1", "unix:///var/run/docker.sock"); err == nil || err.Error() != "Invalid proto, expected unix: tcp://127.0.0.1" {
   156  		t.Fatalf("Expected an error, got %v", err)
   157  	}
   158  	if _, err := parseUnixAddr("unix://tcp://127.0.0.1", "/var/run/docker.sock"); err == nil || err.Error() != "Invalid proto, expected unix: tcp://127.0.0.1" {
   159  		t.Fatalf("Expected an error, got %v", err)
   160  	}
   161  	if v, err := parseUnixAddr("", "/var/run/docker.sock"); err != nil || v != "unix:///var/run/docker.sock" {
   162  		t.Fatalf("Expected an %v, got %v", v, "unix:///var/run/docker.sock")
   163  	}
   164  }