github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/formatter/network_test.go (about) 1 package formatter 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "strings" 7 "testing" 8 "time" 9 10 "github.com/docker/docker/api/types" 11 "github.com/docker/docker/pkg/stringid" 12 "github.com/docker/docker/pkg/testutil/assert" 13 ) 14 15 func TestNetworkContext(t *testing.T) { 16 networkID := stringid.GenerateRandomID() 17 18 var ctx networkContext 19 cases := []struct { 20 networkCtx networkContext 21 expValue string 22 expHeader string 23 call func() string 24 }{ 25 {networkContext{ 26 n: types.NetworkResource{ID: networkID}, 27 trunc: false, 28 }, networkID, networkIDHeader, ctx.ID}, 29 {networkContext{ 30 n: types.NetworkResource{ID: networkID}, 31 trunc: true, 32 }, stringid.TruncateID(networkID), networkIDHeader, ctx.ID}, 33 {networkContext{ 34 n: types.NetworkResource{Name: "network_name"}, 35 }, "network_name", nameHeader, ctx.Name}, 36 {networkContext{ 37 n: types.NetworkResource{Driver: "driver_name"}, 38 }, "driver_name", driverHeader, ctx.Driver}, 39 {networkContext{ 40 n: types.NetworkResource{EnableIPv6: true}, 41 }, "true", ipv6Header, ctx.IPv6}, 42 {networkContext{ 43 n: types.NetworkResource{EnableIPv6: false}, 44 }, "false", ipv6Header, ctx.IPv6}, 45 {networkContext{ 46 n: types.NetworkResource{Internal: true}, 47 }, "true", internalHeader, ctx.Internal}, 48 {networkContext{ 49 n: types.NetworkResource{Internal: false}, 50 }, "false", internalHeader, ctx.Internal}, 51 {networkContext{ 52 n: types.NetworkResource{}, 53 }, "", labelsHeader, ctx.Labels}, 54 {networkContext{ 55 n: types.NetworkResource{Labels: map[string]string{"label1": "value1", "label2": "value2"}}, 56 }, "label1=value1,label2=value2", labelsHeader, ctx.Labels}, 57 } 58 59 for _, c := range cases { 60 ctx = c.networkCtx 61 v := c.call() 62 if strings.Contains(v, ",") { 63 compareMultipleValues(t, v, c.expValue) 64 } else if v != c.expValue { 65 t.Fatalf("Expected %s, was %s\n", c.expValue, v) 66 } 67 68 h := ctx.FullHeader() 69 if h != c.expHeader { 70 t.Fatalf("Expected %s, was %s\n", c.expHeader, h) 71 } 72 } 73 } 74 75 func TestNetworkContextWrite(t *testing.T) { 76 cases := []struct { 77 context Context 78 expected string 79 }{ 80 81 // Errors 82 { 83 Context{Format: "{{InvalidFunction}}"}, 84 `Template parsing error: template: :1: function "InvalidFunction" not defined 85 `, 86 }, 87 { 88 Context{Format: "{{nil}}"}, 89 `Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command 90 `, 91 }, 92 // Table format 93 { 94 Context{Format: NewNetworkFormat("table", false)}, 95 `NETWORK ID NAME DRIVER SCOPE 96 networkID1 foobar_baz foo local 97 networkID2 foobar_bar bar local 98 `, 99 }, 100 { 101 Context{Format: NewNetworkFormat("table", true)}, 102 `networkID1 103 networkID2 104 `, 105 }, 106 { 107 Context{Format: NewNetworkFormat("table {{.Name}}", false)}, 108 `NAME 109 foobar_baz 110 foobar_bar 111 `, 112 }, 113 { 114 Context{Format: NewNetworkFormat("table {{.Name}}", true)}, 115 `NAME 116 foobar_baz 117 foobar_bar 118 `, 119 }, 120 // Raw Format 121 { 122 Context{Format: NewNetworkFormat("raw", false)}, 123 `network_id: networkID1 124 name: foobar_baz 125 driver: foo 126 scope: local 127 128 network_id: networkID2 129 name: foobar_bar 130 driver: bar 131 scope: local 132 133 `, 134 }, 135 { 136 Context{Format: NewNetworkFormat("raw", true)}, 137 `network_id: networkID1 138 network_id: networkID2 139 `, 140 }, 141 // Custom Format 142 { 143 Context{Format: NewNetworkFormat("{{.Name}}", false)}, 144 `foobar_baz 145 foobar_bar 146 `, 147 }, 148 // Custom Format with CreatedAt 149 { 150 Context{Format: NewNetworkFormat("{{.Name}} {{.CreatedAt}}", false)}, 151 `foobar_baz 2016-01-01 00:00:00 +0000 UTC 152 foobar_bar 2017-01-01 00:00:00 +0000 UTC 153 `, 154 }, 155 } 156 157 timestamp1, _ := time.Parse("2006-01-02", "2016-01-01") 158 timestamp2, _ := time.Parse("2006-01-02", "2017-01-01") 159 160 for _, testcase := range cases { 161 networks := []types.NetworkResource{ 162 {ID: "networkID1", Name: "foobar_baz", Driver: "foo", Scope: "local", Created: timestamp1}, 163 {ID: "networkID2", Name: "foobar_bar", Driver: "bar", Scope: "local", Created: timestamp2}, 164 } 165 out := bytes.NewBufferString("") 166 testcase.context.Output = out 167 err := NetworkWrite(testcase.context, networks) 168 if err != nil { 169 assert.Error(t, err, testcase.expected) 170 } else { 171 assert.Equal(t, out.String(), testcase.expected) 172 } 173 } 174 } 175 176 func TestNetworkContextWriteJSON(t *testing.T) { 177 networks := []types.NetworkResource{ 178 {ID: "networkID1", Name: "foobar_baz"}, 179 {ID: "networkID2", Name: "foobar_bar"}, 180 } 181 expectedJSONs := []map[string]interface{}{ 182 {"Driver": "", "ID": "networkID1", "IPv6": "false", "Internal": "false", "Labels": "", "Name": "foobar_baz", "Scope": "", "CreatedAt": "0001-01-01 00:00:00 +0000 UTC"}, 183 {"Driver": "", "ID": "networkID2", "IPv6": "false", "Internal": "false", "Labels": "", "Name": "foobar_bar", "Scope": "", "CreatedAt": "0001-01-01 00:00:00 +0000 UTC"}, 184 } 185 186 out := bytes.NewBufferString("") 187 err := NetworkWrite(Context{Format: "{{json .}}", Output: out}, networks) 188 if err != nil { 189 t.Fatal(err) 190 } 191 for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") { 192 t.Logf("Output: line %d: %s", i, line) 193 var m map[string]interface{} 194 if err := json.Unmarshal([]byte(line), &m); err != nil { 195 t.Fatal(err) 196 } 197 assert.DeepEqual(t, m, expectedJSONs[i]) 198 } 199 } 200 201 func TestNetworkContextWriteJSONField(t *testing.T) { 202 networks := []types.NetworkResource{ 203 {ID: "networkID1", Name: "foobar_baz"}, 204 {ID: "networkID2", Name: "foobar_bar"}, 205 } 206 out := bytes.NewBufferString("") 207 err := NetworkWrite(Context{Format: "{{json .ID}}", Output: out}, networks) 208 if err != nil { 209 t.Fatal(err) 210 } 211 for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") { 212 t.Logf("Output: line %d: %s", i, line) 213 var s string 214 if err := json.Unmarshal([]byte(line), &s); err != nil { 215 t.Fatal(err) 216 } 217 assert.Equal(t, s, networks[i].ID) 218 } 219 }