123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package formatter
- import (
- "bytes"
- "encoding/json"
- "strings"
- "testing"
- "github.com/docker/docker/api/types/swarm"
- "github.com/docker/docker/pkg/testutil/assert"
- )
- func TestServiceContextWrite(t *testing.T) {
- cases := []struct {
- context Context
- expected string
- }{
- // Errors
- {
- Context{Format: "{{InvalidFunction}}"},
- `Template parsing error: template: :1: function "InvalidFunction" not defined
- `,
- },
- {
- Context{Format: "{{nil}}"},
- `Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
- `,
- },
- // Table format
- {
- Context{Format: NewServiceListFormat("table", false)},
- `ID NAME MODE REPLICAS IMAGE
- id_baz baz global 2/4
- id_bar bar replicated 2/4
- `,
- },
- {
- Context{Format: NewServiceListFormat("table", true)},
- `id_baz
- id_bar
- `,
- },
- {
- Context{Format: NewServiceListFormat("table {{.Name}}", false)},
- `NAME
- baz
- bar
- `,
- },
- {
- Context{Format: NewServiceListFormat("table {{.Name}}", true)},
- `NAME
- baz
- bar
- `,
- },
- // Raw Format
- {
- Context{Format: NewServiceListFormat("raw", false)},
- `id: id_baz
- name: baz
- mode: global
- replicas: 2/4
- image:
- id: id_bar
- name: bar
- mode: replicated
- replicas: 2/4
- image:
- `,
- },
- {
- Context{Format: NewServiceListFormat("raw", true)},
- `id: id_baz
- id: id_bar
- `,
- },
- // Custom Format
- {
- Context{Format: NewServiceListFormat("{{.Name}}", false)},
- `baz
- bar
- `,
- },
- }
- for _, testcase := range cases {
- services := []swarm.Service{
- {ID: "id_baz", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "baz"}}},
- {ID: "id_bar", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "bar"}}},
- }
- info := map[string]ServiceListInfo{
- "id_baz": {
- Mode: "global",
- Replicas: "2/4",
- },
- "id_bar": {
- Mode: "replicated",
- Replicas: "2/4",
- },
- }
- out := bytes.NewBufferString("")
- testcase.context.Output = out
- err := ServiceListWrite(testcase.context, services, info)
- if err != nil {
- assert.Error(t, err, testcase.expected)
- } else {
- assert.Equal(t, out.String(), testcase.expected)
- }
- }
- }
- func TestServiceContextWriteJSON(t *testing.T) {
- services := []swarm.Service{
- {ID: "id_baz", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "baz"}}},
- {ID: "id_bar", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "bar"}}},
- }
- info := map[string]ServiceListInfo{
- "id_baz": {
- Mode: "global",
- Replicas: "2/4",
- },
- "id_bar": {
- Mode: "replicated",
- Replicas: "2/4",
- },
- }
- expectedJSONs := []map[string]interface{}{
- {"ID": "id_baz", "Name": "baz", "Mode": "global", "Replicas": "2/4", "Image": ""},
- {"ID": "id_bar", "Name": "bar", "Mode": "replicated", "Replicas": "2/4", "Image": ""},
- }
- out := bytes.NewBufferString("")
- err := ServiceListWrite(Context{Format: "{{json .}}", Output: out}, services, info)
- if err != nil {
- t.Fatal(err)
- }
- for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
- t.Logf("Output: line %d: %s", i, line)
- var m map[string]interface{}
- if err := json.Unmarshal([]byte(line), &m); err != nil {
- t.Fatal(err)
- }
- assert.DeepEqual(t, m, expectedJSONs[i])
- }
- }
- func TestServiceContextWriteJSONField(t *testing.T) {
- services := []swarm.Service{
- {ID: "id_baz", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "baz"}}},
- {ID: "id_bar", Spec: swarm.ServiceSpec{Annotations: swarm.Annotations{Name: "bar"}}},
- }
- info := map[string]ServiceListInfo{
- "id_baz": {
- Mode: "global",
- Replicas: "2/4",
- },
- "id_bar": {
- Mode: "replicated",
- Replicas: "2/4",
- },
- }
- out := bytes.NewBufferString("")
- err := ServiceListWrite(Context{Format: "{{json .Name}}", Output: out}, services, info)
- if err != nil {
- t.Fatal(err)
- }
- for i, line := range strings.Split(strings.TrimSpace(out.String()), "\n") {
- t.Logf("Output: line %d: %s", i, line)
- var s string
- if err := json.Unmarshal([]byte(line), &s); err != nil {
- t.Fatal(err)
- }
- assert.Equal(t, s, services[i].Spec.Name)
- }
- }
|