Skip to content

Commit 65e7ece

Browse files
authored
Merge pull request #6337 from thaJeztah/pretty_io
cli/command/system: prettyPrintVersion: accept a plain io.Writer
2 parents 58bb45c + efd6e7b commit 65e7ece

File tree

5 files changed

+85
-82
lines changed

5 files changed

+85
-82
lines changed

cli/command/system/testdata/docker-client-version.golden renamed to cli/command/system/testdata/TestVersionFormat/default.golden

File renamed without changes.

cli/command/system/testdata/docker-client-version.json.golden renamed to cli/command/system/testdata/TestVersionFormat/json.golden

File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"Client":{"Version":"18.99.5-ce","ApiVersion":"1.38","DefaultAPIVersion":"1.38","GitCommit":"deadbeef","GoVersion":"go1.10.2","Os":"linux","Arch":"amd64","BuildTime":"Wed May 30 22:21:05 2018","Context":"my-context"},"Server":{"Platform":{"Name":"Docker Enterprise Edition (EE) 2.0"},"Components":[{"Name":"Engine","Version":"17.06.2-ee-15","Details":{"ApiVersion":"1.30","Arch":"amd64","BuildTime":"Mon Jul 9 23:38:38 2018","Experimental":"false","GitCommit":"64ddfa6","GoVersion":"go1.8.7","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"Universal Control Plane","Version":"17.06.2-ee-15","Details":{"ApiVersion":"1.30","Arch":"amd64","BuildTime":"Mon Jul 2 21:24:07 UTC 2018","GitCommit":"4513922","GoVersion":"go1.9.4","MinApiVersion":"1.20","Os":"linux","Version":"3.0.3-tp2"}},{"Name":"Kubernetes","Version":"1.8+","Details":{"buildDate":"2018-04-26T16:51:21Z","compiler":"gc","gitCommit":"8d637aedf46b9c21dde723e29c645b9f27106fa5","gitTreeState":"clean","gitVersion":"v1.8.11-docker-8d637ae","goVersion":"go1.8.3","major":"1","minor":"8+","platform":"linux/amd64"}},{"Name":"Calico","Version":"v3.0.8","Details":{"cni":"v2.0.6","kube-controllers":"v2.0.5","node":"v3.0.8"}}],"Version":"","ApiVersion":"","GitCommit":"","GoVersion":"","Os":"","Arch":""}}

cli/command/system/version.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package system
22

33
import (
44
"context"
5+
"io"
56
"runtime"
67
"sort"
78
"strconv"
@@ -188,14 +189,14 @@ func runVersion(ctx context.Context, dockerCli command.Cli, opts *versionOptions
188189
})
189190
}
190191
}
191-
if err2 := prettyPrintVersion(dockerCli, vd, tmpl); err2 != nil && err == nil {
192+
if err2 := prettyPrintVersion(dockerCli.Out(), vd, tmpl); err2 != nil && err == nil {
192193
err = err2
193194
}
194195
return err
195196
}
196197

197-
func prettyPrintVersion(dockerCli command.Cli, vd versionInfo, tmpl *template.Template) error {
198-
t := tabwriter.NewWriter(dockerCli.Out(), 20, 1, 1, ' ', 0)
198+
func prettyPrintVersion(out io.Writer, vd versionInfo, tmpl *template.Template) error {
199+
t := tabwriter.NewWriter(out, 20, 1, 1, ' ', 0)
199200
err := tmpl.Execute(t, vd)
200201
_, _ = t.Write([]byte("\n"))
201202
_ = t.Flush()

cli/command/system/version_test.go

Lines changed: 80 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package system
22

33
import (
4+
"bytes"
45
"context"
56
"errors"
67
"io"
@@ -45,89 +46,89 @@ func TestVersionFormat(t *testing.T) {
4546
BuildTime: "Wed May 30 22:21:05 2018",
4647
Context: "my-context",
4748
},
48-
Server: &types.Version{},
49+
Server: &types.Version{
50+
Platform: struct{ Name string }{Name: "Docker Enterprise Edition (EE) 2.0"},
51+
Components: []types.ComponentVersion{
52+
{
53+
Name: "Engine",
54+
Version: "17.06.2-ee-15",
55+
Details: map[string]string{
56+
"ApiVersion": "1.30",
57+
"MinAPIVersion": "1.12",
58+
"GitCommit": "64ddfa6",
59+
"GoVersion": "go1.8.7",
60+
"Os": "linux",
61+
"Arch": "amd64",
62+
"BuildTime": "Mon Jul 9 23:38:38 2018",
63+
"Experimental": "false",
64+
},
65+
},
66+
{
67+
Name: "Universal Control Plane",
68+
Version: "17.06.2-ee-15",
69+
Details: map[string]string{
70+
"Version": "3.0.3-tp2",
71+
"ApiVersion": "1.30",
72+
"Arch": "amd64",
73+
"BuildTime": "Mon Jul 2 21:24:07 UTC 2018",
74+
"GitCommit": "4513922",
75+
"GoVersion": "go1.9.4",
76+
"MinApiVersion": "1.20",
77+
"Os": "linux",
78+
},
79+
},
80+
{
81+
Name: "Kubernetes",
82+
Version: "1.8+",
83+
Details: map[string]string{
84+
"buildDate": "2018-04-26T16:51:21Z",
85+
"compiler": "gc",
86+
"gitCommit": "8d637aedf46b9c21dde723e29c645b9f27106fa5",
87+
"gitTreeState": "clean",
88+
"gitVersion": "v1.8.11-docker-8d637ae",
89+
"goVersion": "go1.8.3",
90+
"major": "1",
91+
"minor": "8+",
92+
"platform": "linux/amd64",
93+
},
94+
},
95+
{
96+
Name: "Calico",
97+
Version: "v3.0.8",
98+
Details: map[string]string{
99+
"cni": "v2.0.6",
100+
"kube-controllers": "v2.0.5",
101+
"node": "v3.0.8",
102+
},
103+
},
104+
},
105+
},
49106
}
50107

51-
vi.Server.Platform.Name = "Docker Enterprise Edition (EE) 2.0"
52-
53-
vi.Server.Components = append(vi.Server.Components, types.ComponentVersion{
54-
Name: "Engine",
55-
Version: "17.06.2-ee-15",
56-
Details: map[string]string{
57-
"ApiVersion": "1.30",
58-
"MinAPIVersion": "1.12",
59-
"GitCommit": "64ddfa6",
60-
"GoVersion": "go1.8.7",
61-
"Os": "linux",
62-
"Arch": "amd64",
63-
"BuildTime": "Mon Jul 9 23:38:38 2018",
64-
"Experimental": "false",
108+
tests := []struct {
109+
name string
110+
format string
111+
}{
112+
{
113+
name: "default",
65114
},
66-
})
67-
68-
vi.Server.Components = append(vi.Server.Components, types.ComponentVersion{
69-
Name: "Universal Control Plane",
70-
Version: "17.06.2-ee-15",
71-
Details: map[string]string{
72-
"Version": "3.0.3-tp2",
73-
"ApiVersion": "1.30",
74-
"Arch": "amd64",
75-
"BuildTime": "Mon Jul 2 21:24:07 UTC 2018",
76-
"GitCommit": "4513922",
77-
"GoVersion": "go1.9.4",
78-
"MinApiVersion": "1.20",
79-
"Os": "linux",
115+
{
116+
name: "json",
117+
format: "json",
80118
},
81-
})
82-
83-
vi.Server.Components = append(vi.Server.Components, types.ComponentVersion{
84-
Name: "Kubernetes",
85-
Version: "1.8+",
86-
Details: map[string]string{
87-
"buildDate": "2018-04-26T16:51:21Z",
88-
"compiler": "gc",
89-
"gitCommit": "8d637aedf46b9c21dde723e29c645b9f27106fa5",
90-
"gitTreeState": "clean",
91-
"gitVersion": "v1.8.11-docker-8d637ae",
92-
"goVersion": "go1.8.3",
93-
"major": "1",
94-
"minor": "8+",
95-
"platform": "linux/amd64",
119+
{
120+
name: "json template",
121+
format: "json",
96122
},
97-
})
98-
99-
vi.Server.Components = append(vi.Server.Components, types.ComponentVersion{
100-
Name: "Calico",
101-
Version: "v3.0.8",
102-
Details: map[string]string{
103-
"cni": "v2.0.6",
104-
"kube-controllers": "v2.0.5",
105-
"node": "v3.0.8",
106-
},
107-
})
123+
}
124+
for _, tc := range tests {
125+
t.Run(tc.name, func(t *testing.T) {
126+
tmpl, err := newVersionTemplate(tc.format)
127+
assert.NilError(t, err)
108128

109-
t.Run("default", func(t *testing.T) {
110-
cli := test.NewFakeCli(&fakeClient{})
111-
tmpl, err := newVersionTemplate("")
112-
assert.NilError(t, err)
113-
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
114-
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.golden"))
115-
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
116-
})
117-
t.Run("json", func(t *testing.T) {
118-
cli := test.NewFakeCli(&fakeClient{})
119-
tmpl, err := newVersionTemplate("json")
120-
assert.NilError(t, err)
121-
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
122-
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.json.golden"))
123-
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
124-
})
125-
t.Run("json template", func(t *testing.T) {
126-
cli := test.NewFakeCli(&fakeClient{})
127-
tmpl, err := newVersionTemplate("{{json .}}")
128-
assert.NilError(t, err)
129-
assert.NilError(t, prettyPrintVersion(cli, vi, tmpl))
130-
assert.Check(t, golden.String(cli.OutBuffer().String(), "docker-client-version.json.golden"))
131-
assert.Check(t, is.Equal("", cli.ErrBuffer().String()))
132-
})
129+
var out bytes.Buffer
130+
assert.NilError(t, prettyPrintVersion(&out, vi, tmpl))
131+
assert.Check(t, golden.String(out.String(), t.Name()+".golden"))
132+
})
133+
}
133134
}

0 commit comments

Comments
 (0)