174 lines
5.4 KiB
Go
174 lines
5.4 KiB
Go
|
// Copyright 2015 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 (
|
||
|
"encoding/json"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestListNetworks(t *testing.T) {
|
||
|
jsonNetworks := `[
|
||
|
{
|
||
|
"ID": "8dfafdbc3a40",
|
||
|
"Name": "blah",
|
||
|
"Type": "bridge",
|
||
|
"Endpoints":[{"ID": "918c11c8288a", "Name": "dsafdsaf", "Network": "8dfafdbc3a40"}]
|
||
|
},
|
||
|
{
|
||
|
"ID": "9fb1e39c",
|
||
|
"Name": "foo",
|
||
|
"Type": "bridge",
|
||
|
"Endpoints":[{"ID": "c080be979dda", "Name": "lllll2222", "Network": "9fb1e39c"}]
|
||
|
}
|
||
|
]`
|
||
|
var expected []Network
|
||
|
err := json.Unmarshal([]byte(jsonNetworks), &expected)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
client := newTestClient(&FakeRoundTripper{message: jsonNetworks, status: http.StatusOK})
|
||
|
containers, err := client.ListNetworks()
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(containers, expected) {
|
||
|
t.Errorf("ListNetworks: Expected %#v. Got %#v.", expected, containers)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkInfo(t *testing.T) {
|
||
|
jsonNetwork := `{
|
||
|
"ID": "8dfafdbc3a40",
|
||
|
"Name": "blah",
|
||
|
"Type": "bridge",
|
||
|
"Endpoints":[{"ID": "918c11c8288a", "Name": "dsafdsaf", "Network": "8dfafdbc3a40"}]
|
||
|
}`
|
||
|
var expected Network
|
||
|
err := json.Unmarshal([]byte(jsonNetwork), &expected)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
fakeRT := &FakeRoundTripper{message: jsonNetwork, status: http.StatusOK}
|
||
|
client := newTestClient(fakeRT)
|
||
|
id := "8dfafdbc3a40"
|
||
|
network, err := client.NetworkInfo(id)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if !reflect.DeepEqual(*network, expected) {
|
||
|
t.Errorf("NetworkInfo(%q): Expected %#v. Got %#v.", id, expected, network)
|
||
|
}
|
||
|
expectedURL, _ := url.Parse(client.getURL("/networks/8dfafdbc3a40"))
|
||
|
if gotPath := fakeRT.requests[0].URL.Path; gotPath != expectedURL.Path {
|
||
|
t.Errorf("NetworkInfo(%q): Wrong path in request. Want %q. Got %q.", id, expectedURL.Path, gotPath)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkCreate(t *testing.T) {
|
||
|
jsonID := `{"ID": "8dfafdbc3a40"}`
|
||
|
jsonNetwork := `{
|
||
|
"ID": "8dfafdbc3a40",
|
||
|
"Name": "foobar",
|
||
|
"Driver": "bridge"
|
||
|
}`
|
||
|
var expected Network
|
||
|
err := json.Unmarshal([]byte(jsonNetwork), &expected)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
client := newTestClient(&FakeRoundTripper{message: jsonID, status: http.StatusOK})
|
||
|
opts := CreateNetworkOptions{"foobar", false, "bridge", IPAMOptions{}, nil}
|
||
|
network, err := client.CreateNetwork(opts)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if !reflect.DeepEqual(*network, expected) {
|
||
|
t.Errorf("CreateNetwork: Expected %#v. Got %#v.", expected, network)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkRemove(t *testing.T) {
|
||
|
id := "8dfafdbc3a40"
|
||
|
fakeRT := &FakeRoundTripper{message: "", status: http.StatusNoContent}
|
||
|
client := newTestClient(fakeRT)
|
||
|
err := client.RemoveNetwork(id)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "DELETE"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("RemoveNetwork(%q): Wrong HTTP method. Want %s. Got %s.", id, expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/networks/" + id))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("RemoveNetwork(%q): Wrong request path. Want %q. Got %q.", id, u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkConnect(t *testing.T) {
|
||
|
id := "8dfafdbc3a40"
|
||
|
fakeRT := &FakeRoundTripper{message: "", status: http.StatusNoContent}
|
||
|
client := newTestClient(fakeRT)
|
||
|
opts := NetworkConnectionOptions{"foobar"}
|
||
|
err := client.ConnectNetwork(id, opts)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "POST"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("ConnectNetwork(%q): Wrong HTTP method. Want %s. Got %s.", id, expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/networks/" + id + "/connect"))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("ConnectNetwork(%q): Wrong request path. Want %q. Got %q.", id, u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkConnectNotFound(t *testing.T) {
|
||
|
client := newTestClient(&FakeRoundTripper{message: "no such network container", status: http.StatusNotFound})
|
||
|
opts := NetworkConnectionOptions{"foobar"}
|
||
|
err := client.ConnectNetwork("8dfafdbc3a40", opts)
|
||
|
if serr, ok := err.(*NoSuchNetworkOrContainer); !ok {
|
||
|
t.Errorf("ConnectNetwork: wrong error type: %s.", serr)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkDisconnect(t *testing.T) {
|
||
|
id := "8dfafdbc3a40"
|
||
|
fakeRT := &FakeRoundTripper{message: "", status: http.StatusNoContent}
|
||
|
client := newTestClient(fakeRT)
|
||
|
opts := NetworkConnectionOptions{"foobar"}
|
||
|
err := client.DisconnectNetwork(id, opts)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
req := fakeRT.requests[0]
|
||
|
expectedMethod := "POST"
|
||
|
if req.Method != expectedMethod {
|
||
|
t.Errorf("DisconnectNetwork(%q): Wrong HTTP method. Want %s. Got %s.", id, expectedMethod, req.Method)
|
||
|
}
|
||
|
u, _ := url.Parse(client.getURL("/networks/" + id + "/disconnect"))
|
||
|
if req.URL.Path != u.Path {
|
||
|
t.Errorf("DisconnectNetwork(%q): Wrong request path. Want %q. Got %q.", id, u.Path, req.URL.Path)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNetworkDisconnectNotFound(t *testing.T) {
|
||
|
client := newTestClient(&FakeRoundTripper{message: "no such network container", status: http.StatusNotFound})
|
||
|
opts := NetworkConnectionOptions{"foobar"}
|
||
|
err := client.DisconnectNetwork("8dfafdbc3a40", opts)
|
||
|
if serr, ok := err.(*NoSuchNetworkOrContainer); !ok {
|
||
|
t.Errorf("DisconnectNetwork: wrong error type: %s.", serr)
|
||
|
}
|
||
|
}
|