1// +build !windows 2// Copyright 2016 go-dockerclient authors. All rights reserved. 3// Use of this source code is governed by a BSD-style 4// license that can be found in the LICENSE file. 5 6package docker 7 8import ( 9 "io/ioutil" 10 "net" 11 "net/http" 12 "net/http/httptest" 13 "os" 14 "path/filepath" 15 "testing" 16) 17 18const ( 19 nativeProtocol = unixProtocol 20 nativeRealEndpoint = "unix:///var/run/docker.sock" 21 nativeBadEndpoint = "unix:///tmp/echo.sock" 22) 23 24func TestNewTSLAPIClientUnixEndpoint(t *testing.T) { 25 t.Parallel() 26 srv, cleanup, err := newNativeServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 27 w.Write([]byte("ok")) 28 })) 29 if err != nil { 30 t.Fatal(err) 31 } 32 defer cleanup() 33 srv.Start() 34 defer srv.Close() 35 endpoint := nativeProtocol + "://" + srv.Listener.Addr().String() 36 client, err := newTLSClient(endpoint) 37 if err != nil { 38 t.Fatal(err) 39 } 40 if client.endpoint != endpoint { 41 t.Errorf("Expected endpoint %s. Got %s.", endpoint, client.endpoint) 42 } 43 rsp, err := client.do("GET", "/", doOptions{}) 44 if err != nil { 45 t.Fatal(err) 46 } 47 data, err := ioutil.ReadAll(rsp.Body) 48 if err != nil { 49 t.Fatal(err) 50 } 51 if string(data) != "ok" { 52 t.Fatalf("Expected response to be %q, got: %q", "ok", string(data)) 53 } 54} 55 56func newNativeServer(handler http.Handler) (*httptest.Server, func(), error) { 57 tmpdir, err := ioutil.TempDir("", "socket") 58 if err != nil { 59 return nil, nil, err 60 } 61 socketPath := filepath.Join(tmpdir, "docker_test_stress.sock") 62 l, err := net.Listen("unix", socketPath) 63 if err != nil { 64 return nil, nil, err 65 } 66 srv := httptest.NewUnstartedServer(handler) 67 srv.Listener = l 68 return srv, func() { os.RemoveAll(tmpdir) }, nil 69} 70