Files
fn-serverless/vendor/github.com/fsouza/go-dockerclient/swarm_test.go
2017-06-11 02:05:36 -07:00

201 lines
6.8 KiB
Go

// Copyright 2016 go-dockerclient authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package docker
import (
"net/http"
"net/url"
"reflect"
"testing"
"github.com/docker/docker/api/types/swarm"
)
func TestInitSwarm(t *testing.T) {
fakeRT := &FakeRoundTripper{message: `"body"`, status: http.StatusOK}
client := newTestClient(fakeRT)
response, err := client.InitSwarm(InitSwarmOptions{})
if err != nil {
t.Fatal(err)
}
req := fakeRT.requests[0]
expectedMethod := "POST"
if req.Method != expectedMethod {
t.Errorf("InitSwarm: Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
}
u, _ := url.Parse(client.getURL("/swarm/init"))
if req.URL.Path != u.Path {
t.Errorf("InitSwarm: Wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
}
expected := "body"
if response != expected {
t.Errorf("InitSwarm: Wrong response. Want %q. Got %q.", expected, response)
}
}
func TestInitSwarmAlreadyInSwarm(t *testing.T) {
client := newTestClient(&FakeRoundTripper{message: "", status: http.StatusNotAcceptable})
_, err := client.InitSwarm(InitSwarmOptions{})
if err != ErrNodeAlreadyInSwarm {
t.Errorf("InitSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeAlreadyInSwarm, err)
}
client = newTestClient(&FakeRoundTripper{message: "", status: http.StatusServiceUnavailable})
_, err = client.InitSwarm(InitSwarmOptions{})
if err != ErrNodeAlreadyInSwarm {
t.Errorf("InitSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeAlreadyInSwarm, err)
}
}
func TestJoinSwarm(t *testing.T) {
fakeRT := &FakeRoundTripper{message: "", status: http.StatusOK}
client := newTestClient(fakeRT)
err := client.JoinSwarm(JoinSwarmOptions{})
if err != nil {
t.Fatal(err)
}
req := fakeRT.requests[0]
expectedMethod := "POST"
if req.Method != expectedMethod {
t.Errorf("JoinSwarm: Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
}
u, _ := url.Parse(client.getURL("/swarm/join"))
if req.URL.Path != u.Path {
t.Errorf("JoinSwarm: Wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
}
}
func TestJoinSwarmAlreadyInSwarm(t *testing.T) {
client := newTestClient(&FakeRoundTripper{message: "", status: http.StatusNotAcceptable})
err := client.JoinSwarm(JoinSwarmOptions{})
if err != ErrNodeAlreadyInSwarm {
t.Errorf("JoinSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeAlreadyInSwarm, err)
}
client = newTestClient(&FakeRoundTripper{message: "", status: http.StatusServiceUnavailable})
err = client.JoinSwarm(JoinSwarmOptions{})
if err != ErrNodeAlreadyInSwarm {
t.Errorf("JoinSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeAlreadyInSwarm, err)
}
}
func TestLeaveSwarm(t *testing.T) {
fakeRT := &FakeRoundTripper{message: "", status: http.StatusOK}
client := newTestClient(fakeRT)
var testData = []struct {
force bool
expectedURI string
}{
{false, "/swarm/leave?force=false"},
{true, "/swarm/leave?force=true"},
}
for i, tt := range testData {
err := client.LeaveSwarm(LeaveSwarmOptions{Force: tt.force})
if err != nil {
t.Fatal(err)
}
expectedMethod := "POST"
req := fakeRT.requests[i]
if req.Method != expectedMethod {
t.Errorf("LeaveSwarm: Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
}
expected, _ := url.Parse(client.getURL(tt.expectedURI))
if req.URL.String() != expected.String() {
t.Errorf("LeaveSwarm: Wrong request string. Want %q. Got %q.", expected.String(), req.URL.String())
}
}
}
func TestLeaveSwarmNotInSwarm(t *testing.T) {
client := newTestClient(&FakeRoundTripper{message: "", status: http.StatusNotAcceptable})
err := client.LeaveSwarm(LeaveSwarmOptions{})
if err != ErrNodeNotInSwarm {
t.Errorf("LeaveSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
client = newTestClient(&FakeRoundTripper{message: "", status: http.StatusServiceUnavailable})
err = client.LeaveSwarm(LeaveSwarmOptions{})
if err != ErrNodeNotInSwarm {
t.Errorf("LeaveSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
}
func TestUpdateSwarm(t *testing.T) {
fakeRT := &FakeRoundTripper{message: "", status: http.StatusOK}
client := newTestClient(fakeRT)
opts := UpdateSwarmOptions{
Version: 10,
RotateManagerToken: true,
RotateWorkerToken: false,
}
err := client.UpdateSwarm(opts)
if err != nil {
t.Fatal(err)
}
req := fakeRT.requests[0]
expectedMethod := "POST"
if req.Method != expectedMethod {
t.Errorf("UpdateSwarm: Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
}
expectedPath := "/swarm/update"
if req.URL.Path != expectedPath {
t.Errorf("UpdateSwarm: Wrong request path. Want %q. Got %q.", expectedPath, req.URL.Path)
}
expected := map[string][]string{
"version": {"10"},
"rotateManagerToken": {"true"},
"rotateWorkerToken": {"false"},
}
got := map[string][]string(req.URL.Query())
if !reflect.DeepEqual(got, expected) {
t.Errorf("UpdateSwarm: Wrong request query. Want %v. Got %v", expected, got)
}
}
func TestUpdateSwarmNotInSwarm(t *testing.T) {
client := newTestClient(&FakeRoundTripper{message: "", status: http.StatusNotAcceptable})
err := client.UpdateSwarm(UpdateSwarmOptions{})
if err != ErrNodeNotInSwarm {
t.Errorf("UpdateSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
client = newTestClient(&FakeRoundTripper{message: "", status: http.StatusServiceUnavailable})
err = client.UpdateSwarm(UpdateSwarmOptions{})
if err != ErrNodeNotInSwarm {
t.Errorf("UpdateSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
}
func TestInspectSwarm(t *testing.T) {
fakeRT := &FakeRoundTripper{message: `{"ID": "123"}`, status: http.StatusOK}
client := newTestClient(fakeRT)
response, err := client.InspectSwarm(nil)
if err != nil {
t.Fatal(err)
}
req := fakeRT.requests[0]
expectedMethod := "GET"
if req.Method != expectedMethod {
t.Errorf("InspectSwarm: Wrong HTTP method. Want %s. Got %s.", expectedMethod, req.Method)
}
u, _ := url.Parse(client.getURL("/swarm"))
if req.URL.Path != u.Path {
t.Errorf("InspectSwarm: Wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
}
expected := swarm.Swarm{ClusterInfo: swarm.ClusterInfo{ID: "123"}}
if !reflect.DeepEqual(expected, response) {
t.Errorf("InspectSwarm: Wrong response. Want %#v. Got %#v.", expected, response)
}
}
func TestInspectSwarmNotInSwarm(t *testing.T) {
client := newTestClient(&FakeRoundTripper{message: "", status: http.StatusNotAcceptable})
_, err := client.InspectSwarm(nil)
if err != ErrNodeNotInSwarm {
t.Errorf("InspectSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
client = newTestClient(&FakeRoundTripper{message: "", status: http.StatusServiceUnavailable})
_, err = client.InspectSwarm(nil)
if err != ErrNodeNotInSwarm {
t.Errorf("InspectSwarm: Wrong error type. Want %#v. Got %#v", ErrNodeNotInSwarm, err)
}
}