|
@@ -2,7 +2,10 @@ package client
|
|
|
|
|
|
import (
|
|
import (
|
|
"bytes"
|
|
"bytes"
|
|
|
|
+ "encoding/json"
|
|
"io"
|
|
"io"
|
|
|
|
+ "os"
|
|
|
|
+ "strings"
|
|
"testing"
|
|
"testing"
|
|
|
|
|
|
_ "github.com/docker/libnetwork/netutils"
|
|
_ "github.com/docker/libnetwork/netutils"
|
|
@@ -15,12 +18,46 @@ type nopCloser struct {
|
|
|
|
|
|
func (nopCloser) Close() error { return nil }
|
|
func (nopCloser) Close() error { return nil }
|
|
|
|
|
|
|
|
+func TestMain(m *testing.M) {
|
|
|
|
+ setupMockHTTPCallback()
|
|
|
|
+ os.Exit(m.Run())
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var callbackFunc func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error)
|
|
|
|
+var mockNwJSON, mockNwListJSON []byte
|
|
|
|
+var mockNwName = "test"
|
|
|
|
+var mockNwID = "23456789"
|
|
|
|
+
|
|
|
|
+func setupMockHTTPCallback() {
|
|
|
|
+ var list []networkResource
|
|
|
|
+ nw := networkResource{Name: mockNwName, ID: mockNwID}
|
|
|
|
+ mockNwJSON, _ = json.Marshal(nw)
|
|
|
|
+ list = append(list, nw)
|
|
|
|
+ mockNwListJSON, _ = json.Marshal(list)
|
|
|
|
+ callbackFunc = func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
+ var rsp string
|
|
|
|
+ switch method {
|
|
|
|
+ case "GET":
|
|
|
|
+ if strings.Contains(path, "networks?name=") {
|
|
|
|
+ rsp = string(mockNwListJSON)
|
|
|
|
+ } else if strings.HasSuffix(path, "networks") {
|
|
|
|
+ rsp = string(mockNwListJSON)
|
|
|
|
+ } else if strings.HasSuffix(path, "networks/"+mockNwID) {
|
|
|
|
+ rsp = string(mockNwJSON)
|
|
|
|
+ }
|
|
|
|
+ case "POST":
|
|
|
|
+ rsp = mockNwID
|
|
|
|
+ case "PUT":
|
|
|
|
+ case "DELETE":
|
|
|
|
+ rsp = ""
|
|
|
|
+ }
|
|
|
|
+ return nopCloser{bytes.NewBufferString(rsp)}, 200, nil
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
func TestClientDummyCommand(t *testing.T) {
|
|
func TestClientDummyCommand(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString("")}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
err := cli.Cmd("docker", "dummy")
|
|
err := cli.Cmd("docker", "dummy")
|
|
if err == nil {
|
|
if err == nil {
|
|
@@ -30,10 +67,7 @@ func TestClientDummyCommand(t *testing.T) {
|
|
|
|
|
|
func TestClientNetworkInvalidCommand(t *testing.T) {
|
|
func TestClientNetworkInvalidCommand(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString("")}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
err := cli.Cmd("docker", "network", "invalid")
|
|
err := cli.Cmd("docker", "network", "invalid")
|
|
if err == nil {
|
|
if err == nil {
|
|
@@ -43,12 +77,9 @@ func TestClientNetworkInvalidCommand(t *testing.T) {
|
|
|
|
|
|
func TestClientNetworkCreate(t *testing.T) {
|
|
func TestClientNetworkCreate(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString("")}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
- err := cli.Cmd("docker", "network", "create", "test")
|
|
|
|
|
|
+ err := cli.Cmd("docker", "network", "create", mockNwName)
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err.Error())
|
|
t.Fatal(err.Error())
|
|
}
|
|
}
|
|
@@ -56,17 +87,14 @@ func TestClientNetworkCreate(t *testing.T) {
|
|
|
|
|
|
func TestClientNetworkCreateWithDriver(t *testing.T) {
|
|
func TestClientNetworkCreateWithDriver(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString("")}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
- err := cli.Cmd("docker", "network", "create", "-f=dummy", "test")
|
|
|
|
|
|
+ err := cli.Cmd("docker", "network", "create", "-f=dummy", mockNwName)
|
|
if err == nil {
|
|
if err == nil {
|
|
t.Fatalf("Passing incorrect flags to the create command must fail")
|
|
t.Fatalf("Passing incorrect flags to the create command must fail")
|
|
}
|
|
}
|
|
|
|
|
|
- err = cli.Cmd("docker", "network", "create", "-d=dummy", "test")
|
|
|
|
|
|
+ err = cli.Cmd("docker", "network", "create", "-d=dummy", mockNwName)
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatalf(err.Error())
|
|
t.Fatalf(err.Error())
|
|
}
|
|
}
|
|
@@ -74,12 +102,9 @@ func TestClientNetworkCreateWithDriver(t *testing.T) {
|
|
|
|
|
|
func TestClientNetworkRm(t *testing.T) {
|
|
func TestClientNetworkRm(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString("")}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
- err := cli.Cmd("docker", "network", "rm", "test")
|
|
|
|
|
|
+ err := cli.Cmd("docker", "network", "rm", mockNwName)
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err.Error())
|
|
t.Fatal(err.Error())
|
|
}
|
|
}
|
|
@@ -87,35 +112,40 @@ func TestClientNetworkRm(t *testing.T) {
|
|
|
|
|
|
func TestClientNetworkLs(t *testing.T) {
|
|
func TestClientNetworkLs(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- networks := "db,web,test"
|
|
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString(networks)}, 200, nil
|
|
|
|
- }
|
|
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
err := cli.Cmd("docker", "network", "ls")
|
|
err := cli.Cmd("docker", "network", "ls")
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err.Error())
|
|
t.Fatal(err.Error())
|
|
}
|
|
}
|
|
- if out.String() != networks {
|
|
|
|
- t.Fatal("Network List command fail to return the intended list")
|
|
|
|
|
|
+ if out.String() != string(mockNwListJSON) {
|
|
|
|
+ t.Fatal("Network List command fail to return the expected list")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
func TestClientNetworkInfo(t *testing.T) {
|
|
func TestClientNetworkInfo(t *testing.T) {
|
|
var out, errOut bytes.Buffer
|
|
var out, errOut bytes.Buffer
|
|
- info := "dummy info"
|
|
|
|
- cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
|
|
- return nopCloser{bytes.NewBufferString(info)}, 200, nil
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
+
|
|
|
|
+ err := cli.Cmd("docker", "network", "info", mockNwName)
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err.Error())
|
|
|
|
+ }
|
|
|
|
+ if out.String() != string(mockNwJSON) {
|
|
|
|
+ t.Fatal("Network info command fail to return the expected object")
|
|
}
|
|
}
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func TestClientNetworkInfoById(t *testing.T) {
|
|
|
|
+ var out, errOut bytes.Buffer
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
- err := cli.Cmd("docker", "network", "info", "test")
|
|
|
|
|
|
+ err := cli.Cmd("docker", "network", "info", mockNwID)
|
|
if err != nil {
|
|
if err != nil {
|
|
t.Fatal(err.Error())
|
|
t.Fatal(err.Error())
|
|
}
|
|
}
|
|
- if out.String() != info {
|
|
|
|
- t.Fatal("Network List command fail to return the intended list")
|
|
|
|
|
|
+ if out.String() != string(mockNwJSON) {
|
|
|
|
+ t.Fatal("Network info command fail to return the expected object")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -127,7 +157,7 @@ func TestClientNetworkCreateHelp(t *testing.T) {
|
|
cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
return nil, 0, nil
|
|
return nil, 0, nil
|
|
}
|
|
}
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
err := cli.Cmd("docker", "network", "create", "--help")
|
|
err := cli.Cmd("docker", "network", "create", "--help")
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -144,7 +174,7 @@ func TestClientNetworkCreateMissingArgument(t *testing.T) {
|
|
cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
|
|
return nil, 0, nil
|
|
return nil, 0, nil
|
|
}
|
|
}
|
|
- cli := NewNetworkCli(&out, &errOut, cFunc)
|
|
|
|
|
|
+ cli := NewNetworkCli(&out, &errOut, callbackFunc)
|
|
|
|
|
|
err := cli.Cmd("docker", "network", "create")
|
|
err := cli.Cmd("docker", "network", "create")
|
|
if err != nil {
|
|
if err != nil {
|