network_test.go 3.8 KB

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