9a072adff3
This package doesn't really seem to do anything of real interest. Removing it and replacing with a few helper functions. Most of this was maintaining a fork of ctxhttp to support a mock that was unnecessary. We could probably do with a further refactor of the client interface. There is a lot of confusion of between transport, http layer and application layer that makes for some awkward code. This change improves the situation to the point where no breaking changes are introduced. Signed-off-by: Stephen J Day <stephen.day@docker.com>
92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package client
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
// TestSetHostHeader should set fake host for local communications, set real host
|
|
// for normal communications.
|
|
func TestSetHostHeader(t *testing.T) {
|
|
testURL := "/test"
|
|
testCases := []struct {
|
|
host string
|
|
expectedHost string
|
|
expectedURLHost string
|
|
}{
|
|
{
|
|
"unix:///var/run/docker.sock",
|
|
"docker",
|
|
"/var/run/docker.sock",
|
|
},
|
|
{
|
|
"npipe:////./pipe/docker_engine",
|
|
"docker",
|
|
"//./pipe/docker_engine",
|
|
},
|
|
{
|
|
"tcp://0.0.0.0:4243",
|
|
"",
|
|
"0.0.0.0:4243",
|
|
},
|
|
{
|
|
"tcp://localhost:4243",
|
|
"",
|
|
"localhost:4243",
|
|
},
|
|
}
|
|
|
|
for c, test := range testCases {
|
|
proto, addr, basePath, err := ParseHost(test.host)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
client := &Client{
|
|
client: newMockClient(func(req *http.Request) (*http.Response, error) {
|
|
if !strings.HasPrefix(req.URL.Path, testURL) {
|
|
return nil, fmt.Errorf("Test Case #%d: Expected URL %q, got %q", c, testURL, req.URL)
|
|
}
|
|
if req.Host != test.expectedHost {
|
|
return nil, fmt.Errorf("Test Case #%d: Expected host %q, got %q", c, test.expectedHost, req.Host)
|
|
}
|
|
if req.URL.Host != test.expectedURLHost {
|
|
return nil, fmt.Errorf("Test Case #%d: Expected URL host %q, got %q", c, test.expectedURLHost, req.URL.Host)
|
|
}
|
|
return &http.Response{
|
|
StatusCode: http.StatusOK,
|
|
Body: ioutil.NopCloser(bytes.NewReader(([]byte("")))),
|
|
}, nil
|
|
}),
|
|
|
|
proto: proto,
|
|
addr: addr,
|
|
basePath: basePath,
|
|
}
|
|
|
|
_, err = client.sendRequest(context.Background(), "GET", testURL, nil, nil, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestPlainTextError tests the server returning an error in plain text for
|
|
// backwards compatibility with API versions <1.24. All other tests use
|
|
// errors returned as JSON
|
|
func TestPlainTextError(t *testing.T) {
|
|
client := &Client{
|
|
client: newMockClient(plainTextErrorMock(http.StatusInternalServerError, "Server error")),
|
|
}
|
|
_, err := client.ContainerList(context.Background(), types.ContainerListOptions{})
|
|
if err == nil || err.Error() != "Error response from daemon: Server error" {
|
|
t.Fatalf("expected a Server Error, got %v", err)
|
|
}
|
|
}
|