Skip to content

Commit a31ccc7

Browse files
committed
kubeadm config images list: test structured output
Implemented tests for 'kubeadm config images list' structured output.
1 parent 23e4d05 commit a31ccc7

File tree

1 file changed

+129
-2
lines changed

1 file changed

+129
-2
lines changed

cmd/kubeadm/app/cmd/config_test.go

Lines changed: 129 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ import (
3131
"github.com/lithammer/dedent"
3232
"github.com/spf13/cobra"
3333
kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2"
34+
outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme"
3435
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
3536
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
3637
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
38+
"k8s.io/kubernetes/cmd/kubeadm/app/util/output"
3739
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
3840
"k8s.io/utils/exec"
3941
fakeexec "k8s.io/utils/exec/testing"
@@ -94,6 +96,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
9496
},
9597
}
9698

99+
outputFlags := output.NewOutputFlags(&imageTextPrintFlags{}).WithTypeSetter(outputapischeme.Scheme).WithDefaultOutput(output.TextOutput)
100+
printer, err := outputFlags.ToPrinter()
101+
if err != nil {
102+
t.Fatalf("can't create printer for the output format %s: %+v", output.TextOutput, err)
103+
}
104+
97105
for _, tc := range testcases {
98106
t.Run(tc.name, func(t *testing.T) {
99107
tmpDir, err := ioutil.TempDir("", "kubeadm-images-test")
@@ -114,7 +122,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
114122
t.Fatalf("Failed getting the kubeadm images command: %v", err)
115123
}
116124
var output bytes.Buffer
117-
if i.Run(&output) != nil {
125+
if err = i.Run(&output, printer); err != nil {
118126
t.Fatalf("Error from running the images command: %v", err)
119127
}
120128
actual := strings.Split(output.String(), "\n")
@@ -175,6 +183,11 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
175183
},
176184
}
177185

186+
outputFlags := output.NewOutputFlags(&imageTextPrintFlags{}).WithTypeSetter(outputapischeme.Scheme).WithDefaultOutput(output.TextOutput)
187+
printer, err := outputFlags.ToPrinter()
188+
if err != nil {
189+
t.Fatalf("can't create printer for the output format %s: %+v", output.TextOutput, err)
190+
}
178191
for _, tc := range testcases {
179192
t.Run(tc.name, func(t *testing.T) {
180193
i, err := NewImagesList("", &tc.cfg)
@@ -183,7 +196,8 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
183196
}
184197

185198
var output bytes.Buffer
186-
if i.Run(&output) != nil {
199+
200+
if err = i.Run(&output, printer); err != nil {
187201
t.Fatalf("did not expect an error running the Images command: %v", err)
188202
}
189203

@@ -195,6 +209,119 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
195209
}
196210
}
197211

212+
func TestConfigImagesListOutput(t *testing.T) {
213+
testcases := []struct {
214+
name string
215+
cfg kubeadmapiv1beta2.ClusterConfiguration
216+
outputFormat string
217+
expectedOutput string
218+
}{
219+
{
220+
name: "text output",
221+
cfg: kubeadmapiv1beta2.ClusterConfiguration{
222+
KubernetesVersion: dummyKubernetesVersion,
223+
},
224+
outputFormat: "text",
225+
expectedOutput: `k8s.gcr.io/kube-apiserver:v1.16.0
226+
k8s.gcr.io/kube-controller-manager:v1.16.0
227+
k8s.gcr.io/kube-scheduler:v1.16.0
228+
k8s.gcr.io/kube-proxy:v1.16.0
229+
k8s.gcr.io/pause:3.2
230+
k8s.gcr.io/etcd:3.3.17-0
231+
k8s.gcr.io/coredns:1.6.5
232+
`,
233+
},
234+
{
235+
name: "JSON output",
236+
cfg: kubeadmapiv1beta2.ClusterConfiguration{
237+
KubernetesVersion: dummyKubernetesVersion,
238+
},
239+
outputFormat: "json",
240+
expectedOutput: `{
241+
"kind": "Images",
242+
"apiVersion": "output.kubeadm.k8s.io/v1alpha1",
243+
"images": [
244+
"k8s.gcr.io/kube-apiserver:v1.16.0",
245+
"k8s.gcr.io/kube-controller-manager:v1.16.0",
246+
"k8s.gcr.io/kube-scheduler:v1.16.0",
247+
"k8s.gcr.io/kube-proxy:v1.16.0",
248+
"k8s.gcr.io/pause:3.2",
249+
"k8s.gcr.io/etcd:3.3.17-0",
250+
"k8s.gcr.io/coredns:1.6.5"
251+
]
252+
}
253+
`,
254+
},
255+
{
256+
name: "YAML output",
257+
cfg: kubeadmapiv1beta2.ClusterConfiguration{
258+
KubernetesVersion: dummyKubernetesVersion,
259+
},
260+
outputFormat: "yaml",
261+
expectedOutput: `apiVersion: output.kubeadm.k8s.io/v1alpha1
262+
images:
263+
- k8s.gcr.io/kube-apiserver:v1.16.0
264+
- k8s.gcr.io/kube-controller-manager:v1.16.0
265+
- k8s.gcr.io/kube-scheduler:v1.16.0
266+
- k8s.gcr.io/kube-proxy:v1.16.0
267+
- k8s.gcr.io/pause:3.2
268+
- k8s.gcr.io/etcd:3.3.17-0
269+
- k8s.gcr.io/coredns:1.6.5
270+
kind: Images
271+
`,
272+
},
273+
{
274+
name: "go-template output",
275+
cfg: kubeadmapiv1beta2.ClusterConfiguration{
276+
KubernetesVersion: dummyKubernetesVersion,
277+
},
278+
outputFormat: `go-template={{range .images}}{{.}}{{"\n"}}{{end}}`,
279+
expectedOutput: `k8s.gcr.io/kube-apiserver:v1.16.0
280+
k8s.gcr.io/kube-controller-manager:v1.16.0
281+
k8s.gcr.io/kube-scheduler:v1.16.0
282+
k8s.gcr.io/kube-proxy:v1.16.0
283+
k8s.gcr.io/pause:3.2
284+
k8s.gcr.io/etcd:3.3.17-0
285+
k8s.gcr.io/coredns:1.6.5
286+
`,
287+
},
288+
{
289+
name: "JSONPATH output",
290+
cfg: kubeadmapiv1beta2.ClusterConfiguration{
291+
KubernetesVersion: dummyKubernetesVersion,
292+
},
293+
outputFormat: `jsonpath={range.images[*]}{@} {end}`,
294+
expectedOutput: "k8s.gcr.io/kube-apiserver:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0 " +
295+
"k8s.gcr.io/kube-proxy:v1.16.0 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.3.17-0 k8s.gcr.io/coredns:1.6.5 ",
296+
},
297+
}
298+
299+
for _, tc := range testcases {
300+
outputFlags := output.NewOutputFlags(&imageTextPrintFlags{}).WithTypeSetter(outputapischeme.Scheme).WithDefaultOutput(tc.outputFormat)
301+
printer, err := outputFlags.ToPrinter()
302+
if err != nil {
303+
t.Fatalf("can't create printer for the output format %s: %+v", tc.outputFormat, err)
304+
}
305+
306+
t.Run(tc.name, func(t *testing.T) {
307+
i, err := NewImagesList("", &tc.cfg)
308+
if err != nil {
309+
t.Fatalf("did not expect an error while creating the Images command: %v", err)
310+
}
311+
312+
var output bytes.Buffer
313+
314+
if err = i.Run(&output, printer); err != nil {
315+
t.Fatalf("did not expect an error running the Images command: %v", err)
316+
}
317+
318+
if output.String() != tc.expectedOutput {
319+
t.Fatalf("unexpected output:\n|%s|\nexpected:\n|%s|\n", output.String(), tc.expectedOutput)
320+
}
321+
})
322+
}
323+
}
324+
198325
func TestImagesPull(t *testing.T) {
199326
fcmd := fakeexec.FakeCmd{
200327
CombinedOutputScript: []fakeexec.FakeAction{

0 commit comments

Comments
 (0)