Commit ae4c9d71 authored by Guoliang Wang's avatar Guoliang Wang

use subtest for table units (pkg/printers)

parent e24fd8ef
...@@ -47,20 +47,22 @@ func TestMassageJSONPath(t *testing.T) { ...@@ -47,20 +47,22 @@ func TestMassageJSONPath(t *testing.T) {
{input: "{{foo.bar}", expectErr: true}, {input: "{{foo.bar}", expectErr: true},
} }
for _, test := range tests { for _, test := range tests {
output, err := printers.RelaxedJSONPathExpression(test.input) t.Run(test.input, func(t *testing.T) {
if err != nil && !test.expectErr { output, err := printers.RelaxedJSONPathExpression(test.input)
t.Errorf("unexpected error: %v", err) if err != nil && !test.expectErr {
continue t.Errorf("unexpected error: %v", err)
} return
if test.expectErr {
if err == nil {
t.Error("unexpected non-error")
} }
continue if test.expectErr {
} if err == nil {
if output != test.expectedOutput { t.Error("unexpected non-error")
t.Errorf("input: %s, expected: %s, saw: %s", test.input, test.expectedOutput, output) }
} return
}
if output != test.expectedOutput {
t.Errorf("input: %s, expected: %s, saw: %s", test.input, test.expectedOutput, output)
}
})
} }
} }
...@@ -113,33 +115,34 @@ func TestNewColumnPrinterFromSpec(t *testing.T) { ...@@ -113,33 +115,34 @@ func TestNewColumnPrinterFromSpec(t *testing.T) {
}, },
} }
for _, test := range tests { for _, test := range tests {
printer, err := printers.NewCustomColumnsPrinterFromSpec(test.spec, legacyscheme.Codecs.UniversalDecoder(), test.noHeaders) t.Run(test.name, func(t *testing.T) {
if test.expectErr { printer, err := printers.NewCustomColumnsPrinterFromSpec(test.spec, legacyscheme.Codecs.UniversalDecoder(), test.noHeaders)
if err == nil { if test.expectErr {
t.Errorf("[%s] unexpected non-error", test.name) if err == nil {
t.Errorf("[%s] unexpected non-error", test.name)
}
return
} }
continue if !test.expectErr && err != nil {
} t.Errorf("[%s] unexpected error: %v", test.name, err)
if !test.expectErr && err != nil { return
t.Errorf("[%s] unexpected error: %v", test.name, err)
continue
}
if test.noHeaders {
buffer := &bytes.Buffer{}
printer.PrintObj(&api.Pod{}, buffer)
if err != nil {
t.Fatalf("An error occurred printing Pod: %#v", err)
} }
if test.noHeaders {
buffer := &bytes.Buffer{}
if contains(strings.Fields(buffer.String()), "API_VERSION") { printer.PrintObj(&api.Pod{}, buffer)
t.Errorf("unexpected header API_VERSION") if err != nil {
} t.Fatalf("An error occurred printing Pod: %#v", err)
}
} else if !reflect.DeepEqual(test.expectedColumns, printer.Columns) { if contains(strings.Fields(buffer.String()), "API_VERSION") {
t.Errorf("[%s]\nexpected:\n%v\nsaw:\n%v\n", test.name, test.expectedColumns, printer.Columns) t.Errorf("unexpected header API_VERSION")
} }
} else if !reflect.DeepEqual(test.expectedColumns, printer.Columns) {
t.Errorf("[%s]\nexpected:\n%v\nsaw:\n%v\n", test.name, test.expectedColumns, printer.Columns)
}
})
} }
} }
...@@ -215,23 +218,24 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) { ...@@ -215,23 +218,24 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
}, },
} }
for _, test := range tests { for _, test := range tests {
reader := bytes.NewBufferString(test.spec) t.Run(test.name, func(t *testing.T) {
printer, err := printers.NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder()) reader := bytes.NewBufferString(test.spec)
if test.expectErr { printer, err := printers.NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder())
if err == nil { if test.expectErr {
t.Errorf("[%s] unexpected non-error", test.name) if err == nil {
t.Errorf("[%s] unexpected non-error", test.name)
}
return
}
if !test.expectErr && err != nil {
t.Errorf("[%s] unexpected error: %v", test.name, err)
return
} }
continue
}
if !test.expectErr && err != nil {
t.Errorf("[%s] unexpected error: %v", test.name, err)
continue
}
if !reflect.DeepEqual(test.expectedColumns, printer.Columns) {
t.Errorf("[%s]\nexpected:\n%v\nsaw:\n%v\n", test.name, test.expectedColumns, printer.Columns)
}
if !reflect.DeepEqual(test.expectedColumns, printer.Columns) {
t.Errorf("[%s]\nexpected:\n%v\nsaw:\n%v\n", test.name, test.expectedColumns, printer.Columns)
}
})
} }
} }
...@@ -310,17 +314,19 @@ foo baz <none> ...@@ -310,17 +314,19 @@ foo baz <none>
} }
for _, test := range tests { for _, test := range tests {
printer := &printers.CustomColumnsPrinter{ t.Run(test.expectedOutput, func(t *testing.T) {
Columns: test.columns, printer := &printers.CustomColumnsPrinter{
Decoder: legacyscheme.Codecs.UniversalDecoder(), Columns: test.columns,
} Decoder: legacyscheme.Codecs.UniversalDecoder(),
buffer := &bytes.Buffer{} }
if err := printer.PrintObj(test.obj, buffer); err != nil { buffer := &bytes.Buffer{}
t.Errorf("unexpected error: %v", err) if err := printer.PrintObj(test.obj, buffer); err != nil {
} t.Errorf("unexpected error: %v", err)
if buffer.String() != test.expectedOutput { }
t.Errorf("\nexpected:\n'%s'\nsaw\n'%s'\n", test.expectedOutput, buffer.String()) if buffer.String() != test.expectedOutput {
} t.Errorf("\nexpected:\n'%s'\nsaw\n'%s'\n", test.expectedOutput, buffer.String())
}
})
} }
} }
......
...@@ -48,7 +48,8 @@ func testPrintNamespace(obj *api.Namespace, options PrintOptions) ([]metav1beta1 ...@@ -48,7 +48,8 @@ func testPrintNamespace(obj *api.Namespace, options PrintOptions) ([]metav1beta1
func TestPrintRowsForHandlerEntry(t *testing.T) { func TestPrintRowsForHandlerEntry(t *testing.T) {
printFunc := reflect.ValueOf(testPrintNamespace) printFunc := reflect.ValueOf(testPrintNamespace)
testCase := map[string]struct { testCase := []struct {
name string
h *handlerEntry h *handlerEntry
opt PrintOptions opt PrintOptions
obj runtime.Object obj runtime.Object
...@@ -56,7 +57,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) { ...@@ -56,7 +57,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) {
expectOut string expectOut string
expectErr string expectErr string
}{ }{
"no tablecolumndefinition and includeheader flase": { {
name: "no tablecolumndefinition and includeheader flase",
h: &handlerEntry{ h: &handlerEntry{
columnDefinitions: []metav1beta1.TableColumnDefinition{}, columnDefinitions: []metav1beta1.TableColumnDefinition{},
printRows: true, printRows: true,
...@@ -69,7 +71,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) { ...@@ -69,7 +71,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) {
includeHeader: false, includeHeader: false,
expectOut: "test\t\t<unknow>\n", expectOut: "test\t\t<unknow>\n",
}, },
"no tablecolumndefinition and includeheader true": { {
name: "no tablecolumndefinition and includeheader true",
h: &handlerEntry{ h: &handlerEntry{
columnDefinitions: []metav1beta1.TableColumnDefinition{}, columnDefinitions: []metav1beta1.TableColumnDefinition{},
printRows: true, printRows: true,
...@@ -82,7 +85,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) { ...@@ -82,7 +85,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) {
includeHeader: true, includeHeader: true,
expectOut: "\ntest\t\t<unknow>\n", expectOut: "\ntest\t\t<unknow>\n",
}, },
"have tablecolumndefinition and includeheader true": { {
name: "have tablecolumndefinition and includeheader true",
h: &handlerEntry{ h: &handlerEntry{
columnDefinitions: testNamespaceColumnDefinitions, columnDefinitions: testNamespaceColumnDefinitions,
printRows: true, printRows: true,
...@@ -95,7 +99,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) { ...@@ -95,7 +99,8 @@ func TestPrintRowsForHandlerEntry(t *testing.T) {
includeHeader: true, includeHeader: true,
expectOut: "NAME\tSTATUS\tAGE\ntest\t\t<unknow>\n", expectOut: "NAME\tSTATUS\tAGE\ntest\t\t<unknow>\n",
}, },
"print namespace and withnamespace true, should not print header": { {
name: "print namespace and withnamespace true, should not print header",
h: &handlerEntry{ h: &handlerEntry{
columnDefinitions: testNamespaceColumnDefinitions, columnDefinitions: testNamespaceColumnDefinitions,
printRows: true, printRows: true,
...@@ -112,16 +117,18 @@ func TestPrintRowsForHandlerEntry(t *testing.T) { ...@@ -112,16 +117,18 @@ func TestPrintRowsForHandlerEntry(t *testing.T) {
expectErr: "namespace is not namespaced", expectErr: "namespace is not namespaced",
}, },
} }
for name, test := range testCase { for _, test := range testCase {
buffer := &bytes.Buffer{} t.Run(test.name, func(t *testing.T) {
err := printRowsForHandlerEntry(buffer, test.h, test.obj, test.opt, test.includeHeader) buffer := &bytes.Buffer{}
if err != nil { err := printRowsForHandlerEntry(buffer, test.h, test.obj, test.opt, test.includeHeader)
if err.Error() != test.expectErr { if err != nil {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", name, test.expectErr, err) if err.Error() != test.expectErr {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", test.name, test.expectErr, err)
}
} }
} if test.expectOut != buffer.String() {
if test.expectOut != buffer.String() { t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", test.name, test.expectOut, buffer.String())
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", name, test.expectOut, buffer.String()) }
} })
} }
} }
...@@ -26,13 +26,15 @@ import ( ...@@ -26,13 +26,15 @@ import (
) )
func TestTemplate(t *testing.T) { func TestTemplate(t *testing.T) {
testCase := map[string]struct { testCase := []struct {
name string
template string template string
obj runtime.Object obj runtime.Object
expectOut string expectOut string
expectErr func(error) (string, bool) expectErr func(error) (string, bool)
}{ }{
"support base64 decoding of secret data": { {
name: "support base64 decoding of secret data",
template: "{{ .data.username | base64decode }}", template: "{{ .data.username | base64decode }}",
obj: &v1.Secret{ obj: &v1.Secret{
Data: map[string][]byte{ Data: map[string][]byte{
...@@ -41,7 +43,8 @@ func TestTemplate(t *testing.T) { ...@@ -41,7 +43,8 @@ func TestTemplate(t *testing.T) {
}, },
expectOut: "hunter", expectOut: "hunter",
}, },
"test error path for base64 decoding": { {
name: "test error path for base64 decoding",
template: "{{ .data.username | base64decode }}", template: "{{ .data.username | base64decode }}",
obj: &badlyMarshaledSecret{}, obj: &badlyMarshaledSecret{},
expectErr: func(err error) (string, bool) { expectErr: func(err error) (string, bool) {
...@@ -50,41 +53,43 @@ func TestTemplate(t *testing.T) { ...@@ -50,41 +53,43 @@ func TestTemplate(t *testing.T) {
}, },
}, },
} }
for name, test := range testCase { for _, test := range testCase {
buffer := &bytes.Buffer{} t.Run(test.name, func(t *testing.T) {
buffer := &bytes.Buffer{}
p, err := NewGoTemplatePrinter([]byte(test.template)) p, err := NewGoTemplatePrinter([]byte(test.template))
if err != nil { if err != nil {
if test.expectErr == nil { if test.expectErr == nil {
t.Errorf("[%s]expected success but got:\n %v\n", name, err) t.Errorf("[%s]expected success but got:\n %v\n", test.name, err)
continue return
}
if expected, ok := test.expectErr(err); !ok {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", test.name, expected, err)
}
return
} }
if expected, ok := test.expectErr(err); !ok {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", name, expected, err)
}
continue
}
err = p.PrintObj(test.obj, buffer) err = p.PrintObj(test.obj, buffer)
if err != nil { if err != nil {
if test.expectErr == nil { if test.expectErr == nil {
t.Errorf("[%s]expected success but got:\n %v\n", name, err) t.Errorf("[%s]expected success but got:\n %v\n", test.name, err)
continue return
} }
if expected, ok := test.expectErr(err); !ok { if expected, ok := test.expectErr(err); !ok {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", name, expected, err) t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", test.name, expected, err)
}
return
} }
continue
}
if test.expectErr != nil { if test.expectErr != nil {
t.Errorf("[%s]expect:\n error\n but got:\n no error\n", name) t.Errorf("[%s]expect:\n error\n but got:\n no error\n", test.name)
continue return
} }
if test.expectOut != buffer.String() { if test.expectOut != buffer.String() {
t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", name, test.expectOut, buffer.String()) t.Errorf("[%s]expect:\n %v\n but got:\n %v\n", test.name, test.expectOut, buffer.String())
} }
})
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment