From ac6cb41d52ca229d2b628ab0bb5ef6103bd86ce1 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Thu, 12 Feb 2015 11:51:28 -0800 Subject: [PATCH] docker_api_attach_test: fix WS test to use DOCKER_TEST_HOST if specified TestGetContainersAttachWebsocket is currently broken on Windows CI tests b/c it has hardcoded unix://var/run/docker.sock. This change makes use of @icecrime's code in docker_utils and generalizes it with sockConn() to provide a net.Conn by making use of DOCKER_TEST_HOST. Also fixes the test. Signed-off-by: Ahmet Alp Balkan --- integration-cli/docker_api_attach_test.go | 4 +-- integration-cli/docker_utils.go | 36 +++++++++++++---------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/integration-cli/docker_api_attach_test.go b/integration-cli/docker_api_attach_test.go index 191060dded..b16a7bb2f0 100644 --- a/integration-cli/docker_api_attach_test.go +++ b/integration-cli/docker_api_attach_test.go @@ -2,9 +2,9 @@ package main import ( "bytes" - "net" "os/exec" "testing" + "time" "code.google.com/p/go.net/websocket" ) @@ -17,7 +17,7 @@ func TestGetContainersAttachWebsocket(t *testing.T) { } defer deleteAllContainers() - rwc, err := net.Dial("unix", "/var/run/docker.sock") + rwc, err := sockConn(time.Duration(10 * time.Second)) if err != nil { t.Fatal(err) } diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 35a97feca7..7aaee3d8b2 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -273,6 +273,24 @@ func daemonHost() string { return daemonUrlStr } +func sockConn(timeout time.Duration) (net.Conn, error) { + daemon := daemonHost() + daemonUrl, err := url.Parse(daemon) + if err != nil { + return nil, fmt.Errorf("could not parse url %q: %v", daemon, err) + } + + var c net.Conn + switch daemonUrl.Scheme { + case "unix": + return net.DialTimeout(daemonUrl.Scheme, daemonUrl.Path, timeout) + case "tcp": + return net.DialTimeout(daemonUrl.Scheme, daemonUrl.Host, timeout) + default: + return c, fmt.Errorf("unknown scheme %v (%s)", daemonUrl.Scheme, daemon) + } +} + func sockRequest(method, endpoint string, data interface{}) ([]byte, error) { jsonData := bytes.NewBuffer(nil) if err := json.NewEncoder(jsonData).Encode(data); err != nil { @@ -283,23 +301,9 @@ func sockRequest(method, endpoint string, data interface{}) ([]byte, error) { } func sockRequestRaw(method, endpoint string, data io.Reader, ct string) ([]byte, error) { - daemon := daemonHost() - daemonUrl, err := url.Parse(daemon) + c, err := sockConn(time.Duration(10 * time.Second)) if err != nil { - return nil, fmt.Errorf("could not parse url %q: %v", daemon, err) - } - - var c net.Conn - switch daemonUrl.Scheme { - case "unix": - c, err = net.DialTimeout(daemonUrl.Scheme, daemonUrl.Path, time.Duration(10*time.Second)) - case "tcp": - c, err = net.DialTimeout(daemonUrl.Scheme, daemonUrl.Host, time.Duration(10*time.Second)) - default: - err = fmt.Errorf("unknown scheme %v", daemonUrl.Scheme) - } - if err != nil { - return nil, fmt.Errorf("could not dial docker daemon at %s: %v", daemon, err) + return nil, fmt.Errorf("could not dial docker daemon: %v", err) } client := httputil.NewClientConn(c, nil)