client_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package client
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. _ "github.com/docker/libnetwork/netutils"
  7. )
  8. // nopCloser is used to provide a dummy CallFunc for Cmd()
  9. type nopCloser struct {
  10. io.Reader
  11. }
  12. func (nopCloser) Close() error { return nil }
  13. func TestClientDummyCommand(t *testing.T) {
  14. var out, errOut bytes.Buffer
  15. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  16. return nopCloser{bytes.NewBufferString("")}, 200, nil
  17. }
  18. cli := NewNetworkCli(&out, &errOut, cFunc)
  19. err := cli.Cmd("docker", "dummy")
  20. if err == nil {
  21. t.Fatalf("Incorrect Command must fail")
  22. }
  23. }
  24. func TestClientNoCommand(t *testing.T) {
  25. var out, errOut bytes.Buffer
  26. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  27. return nopCloser{bytes.NewBufferString("")}, 200, nil
  28. }
  29. cli := NewNetworkCli(&out, &errOut, cFunc)
  30. err := cli.Cmd("docker")
  31. if err == nil {
  32. t.Fatalf("Incorrect Command must fail")
  33. }
  34. }
  35. func TestClientNetworkCreate(t *testing.T) {
  36. var out, errOut bytes.Buffer
  37. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  38. return nopCloser{bytes.NewBufferString("")}, 200, nil
  39. }
  40. cli := NewNetworkCli(&out, &errOut, cFunc)
  41. err := cli.Cmd("docker", "network", "create", "test")
  42. if err != nil {
  43. t.Fatal(err.Error())
  44. }
  45. }
  46. func TestClientNetworkCreateWithDriver(t *testing.T) {
  47. var out, errOut bytes.Buffer
  48. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  49. return nopCloser{bytes.NewBufferString("")}, 200, nil
  50. }
  51. cli := NewNetworkCli(&out, &errOut, cFunc)
  52. err := cli.Cmd("docker", "network", "create", "-f=dummy", "test")
  53. if err == nil {
  54. t.Fatalf("Passing incorrect flags to the create command must fail")
  55. }
  56. err = cli.Cmd("docker", "network", "create", "-d=dummy", "test")
  57. if err != nil {
  58. t.Fatalf(err.Error())
  59. }
  60. }
  61. func TestClientNetworkRm(t *testing.T) {
  62. var out, errOut bytes.Buffer
  63. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  64. return nopCloser{bytes.NewBufferString("")}, 200, nil
  65. }
  66. cli := NewNetworkCli(&out, &errOut, cFunc)
  67. err := cli.Cmd("docker", "network", "rm", "test")
  68. if err != nil {
  69. t.Fatal(err.Error())
  70. }
  71. }
  72. func TestClientNetworkLs(t *testing.T) {
  73. var out, errOut bytes.Buffer
  74. networks := "db,web,test"
  75. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  76. return nopCloser{bytes.NewBufferString(networks)}, 200, nil
  77. }
  78. cli := NewNetworkCli(&out, &errOut, cFunc)
  79. err := cli.Cmd("docker", "network", "ls")
  80. if err != nil {
  81. t.Fatal(err.Error())
  82. }
  83. if out.String() != networks {
  84. t.Fatal("Network List command fail to return the intended list")
  85. }
  86. }
  87. func TestClientNetworkInfo(t *testing.T) {
  88. var out, errOut bytes.Buffer
  89. info := "dummy info"
  90. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  91. return nopCloser{bytes.NewBufferString(info)}, 200, nil
  92. }
  93. cli := NewNetworkCli(&out, &errOut, cFunc)
  94. err := cli.Cmd("docker", "network", "info", "test")
  95. if err != nil {
  96. t.Fatal(err.Error())
  97. }
  98. if out.String() != info {
  99. t.Fatal("Network List command fail to return the intended list")
  100. }
  101. }
  102. func TestClientNetworkJoin(t *testing.T) {
  103. var out, errOut bytes.Buffer
  104. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  105. return nopCloser{bytes.NewBufferString("")}, 200, nil
  106. }
  107. cli := NewNetworkCli(&out, &errOut, cFunc)
  108. err := cli.Cmd("docker", "network", "join", "db1", "dbnet", "db1-ep")
  109. if err != nil {
  110. t.Fatal(err.Error())
  111. }
  112. }
  113. func TestClientNetworkLeave(t *testing.T) {
  114. var out, errOut bytes.Buffer
  115. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  116. return nopCloser{bytes.NewBufferString("")}, 200, nil
  117. }
  118. cli := NewNetworkCli(&out, &errOut, cFunc)
  119. err := cli.Cmd("docker", "network", "leave", "db1", "dbnet")
  120. if err != nil {
  121. t.Fatal(err.Error())
  122. }
  123. }
  124. // Docker Flag processing in flag.go uses os.Exit(0) for --help
  125. // TODO : Handle the --help test-case in the IT when CLI is available
  126. /*
  127. func TestClientNetworkCreateHelp(t *testing.T) {
  128. var out, errOut bytes.Buffer
  129. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  130. return nil, 0, nil
  131. }
  132. cli := NewNetworkCli(&out, &errOut, cFunc)
  133. err := cli.Cmd("docker", "network", "create", "--help")
  134. if err != nil {
  135. t.Fatalf(err.Error())
  136. }
  137. }
  138. */
  139. // Docker flag processing in flag.go uses os.Exit(1) for incorrect parameter case.
  140. // TODO : Handle the missing argument case in the IT when CLI is available
  141. /*
  142. func TestClientNetworkCreateMissingArgument(t *testing.T) {
  143. var out, errOut bytes.Buffer
  144. cFunc := func(method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, int, error) {
  145. return nil, 0, nil
  146. }
  147. cli := NewNetworkCli(&out, &errOut, cFunc)
  148. err := cli.Cmd("docker", "network", "create")
  149. if err != nil {
  150. t.Fatal(err.Error())
  151. }
  152. }
  153. */