network_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package formatter
  2. import (
  3. "bytes"
  4. "strings"
  5. "testing"
  6. "github.com/docker/docker/pkg/stringid"
  7. "github.com/docker/engine-api/types"
  8. )
  9. func TestNetworkContext(t *testing.T) {
  10. networkID := stringid.GenerateRandomID()
  11. var ctx networkContext
  12. cases := []struct {
  13. networkCtx networkContext
  14. expValue string
  15. expHeader string
  16. call func() string
  17. }{
  18. {networkContext{
  19. n: types.NetworkResource{ID: networkID},
  20. trunc: false,
  21. }, networkID, networkIDHeader, ctx.ID},
  22. {networkContext{
  23. n: types.NetworkResource{ID: networkID},
  24. trunc: true,
  25. }, stringid.TruncateID(networkID), networkIDHeader, ctx.ID},
  26. {networkContext{
  27. n: types.NetworkResource{Name: "network_name"},
  28. }, "network_name", nameHeader, ctx.Name},
  29. {networkContext{
  30. n: types.NetworkResource{Driver: "driver_name"},
  31. }, "driver_name", driverHeader, ctx.Driver},
  32. {networkContext{
  33. n: types.NetworkResource{EnableIPv6: true},
  34. }, "true", ipv6Header, ctx.IPv6},
  35. {networkContext{
  36. n: types.NetworkResource{EnableIPv6: false},
  37. }, "false", ipv6Header, ctx.IPv6},
  38. {networkContext{
  39. n: types.NetworkResource{Internal: true},
  40. }, "true", internalHeader, ctx.Internal},
  41. {networkContext{
  42. n: types.NetworkResource{Internal: false},
  43. }, "false", internalHeader, ctx.Internal},
  44. {networkContext{
  45. n: types.NetworkResource{},
  46. }, "", labelsHeader, ctx.Labels},
  47. {networkContext{
  48. n: types.NetworkResource{Labels: map[string]string{"label1": "value1", "label2": "value2"}},
  49. }, "label1=value1,label2=value2", labelsHeader, ctx.Labels},
  50. }
  51. for _, c := range cases {
  52. ctx = c.networkCtx
  53. v := c.call()
  54. if strings.Contains(v, ",") {
  55. compareMultipleValues(t, v, c.expValue)
  56. } else if v != c.expValue {
  57. t.Fatalf("Expected %s, was %s\n", c.expValue, v)
  58. }
  59. h := ctx.fullHeader()
  60. if h != c.expHeader {
  61. t.Fatalf("Expected %s, was %s\n", c.expHeader, h)
  62. }
  63. }
  64. }
  65. func TestNetworkContextWrite(t *testing.T) {
  66. contexts := []struct {
  67. context NetworkContext
  68. expected string
  69. }{
  70. // Errors
  71. {
  72. NetworkContext{
  73. Context: Context{
  74. Format: "{{InvalidFunction}}",
  75. },
  76. },
  77. `Template parsing error: template: :1: function "InvalidFunction" not defined
  78. `,
  79. },
  80. {
  81. NetworkContext{
  82. Context: Context{
  83. Format: "{{nil}}",
  84. },
  85. },
  86. `Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
  87. `,
  88. },
  89. // Table format
  90. {
  91. NetworkContext{
  92. Context: Context{
  93. Format: "table",
  94. },
  95. },
  96. `NETWORK ID NAME DRIVER SCOPE
  97. networkID1 foobar_baz foo local
  98. networkID2 foobar_bar bar local
  99. `,
  100. },
  101. {
  102. NetworkContext{
  103. Context: Context{
  104. Format: "table",
  105. Quiet: true,
  106. },
  107. },
  108. `networkID1
  109. networkID2
  110. `,
  111. },
  112. {
  113. NetworkContext{
  114. Context: Context{
  115. Format: "table {{.Name}}",
  116. },
  117. },
  118. `NAME
  119. foobar_baz
  120. foobar_bar
  121. `,
  122. },
  123. {
  124. NetworkContext{
  125. Context: Context{
  126. Format: "table {{.Name}}",
  127. Quiet: true,
  128. },
  129. },
  130. `NAME
  131. foobar_baz
  132. foobar_bar
  133. `,
  134. },
  135. // Raw Format
  136. {
  137. NetworkContext{
  138. Context: Context{
  139. Format: "raw",
  140. },
  141. }, `network_id: networkID1
  142. name: foobar_baz
  143. driver: foo
  144. scope: local
  145. network_id: networkID2
  146. name: foobar_bar
  147. driver: bar
  148. scope: local
  149. `,
  150. },
  151. {
  152. NetworkContext{
  153. Context: Context{
  154. Format: "raw",
  155. Quiet: true,
  156. },
  157. },
  158. `network_id: networkID1
  159. network_id: networkID2
  160. `,
  161. },
  162. // Custom Format
  163. {
  164. NetworkContext{
  165. Context: Context{
  166. Format: "{{.Name}}",
  167. },
  168. },
  169. `foobar_baz
  170. foobar_bar
  171. `,
  172. },
  173. }
  174. for _, context := range contexts {
  175. networks := []types.NetworkResource{
  176. {ID: "networkID1", Name: "foobar_baz", Driver: "foo", Scope: "local"},
  177. {ID: "networkID2", Name: "foobar_bar", Driver: "bar", Scope: "local"},
  178. }
  179. out := bytes.NewBufferString("")
  180. context.context.Output = out
  181. context.context.Networks = networks
  182. context.context.Write()
  183. actual := out.String()
  184. if actual != context.expected {
  185. t.Fatalf("Expected \n%s, got \n%s", context.expected, actual)
  186. }
  187. // Clean buffer
  188. out.Reset()
  189. }
  190. }