client_test.go 5.1 KB

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