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