From 37fca51d74a81df3b6c8b6df5b644e333acd7274 Mon Sep 17 00:00:00 2001 From: Sean Sullivan Date: Thu, 17 Oct 2019 09:52:53 -0700 Subject: [PATCH] Relocate tableprinter tests (#84027) * Moves TestPrintUnstructuredObject to tableprinter_test.go * Move TestUnknownTypePrinting to correct location of tableprinter_test.go * Removes NewTablePrinter from TestCustomTypePrinting --- pkg/printers/BUILD | 1 + .../additional_printers_test.go | 142 +----------------- pkg/printers/tableprinter_test.go | 128 ++++++++++++++++ 3 files changed, 134 insertions(+), 137 deletions(-) diff --git a/pkg/printers/BUILD b/pkg/printers/BUILD index 61a16188b51..e4ec44e80ba 100644 --- a/pkg/printers/BUILD +++ b/pkg/printers/BUILD @@ -53,6 +53,7 @@ go_test( deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", ], diff --git a/pkg/printers/internalversion/additional_printers_test.go b/pkg/printers/internalversion/additional_printers_test.go index 48efac4a860..0e5057b452e 100644 --- a/pkg/printers/internalversion/additional_printers_test.go +++ b/pkg/printers/internalversion/additional_printers_test.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "reflect" - "regexp" "testing" yaml "gopkg.in/yaml.v2" @@ -69,113 +68,6 @@ func (in *TestStruct) DeepCopyObject() runtime.Object { panic("never called") } -// TODO(seans3): Move this test to tableprinter_test.go -func TestPrintUnstructuredObject(t *testing.T) { - obj := &unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": "v1", - "kind": "Test", - "dummy1": "present", - "dummy2": "present", - "metadata": map[string]interface{}{ - "name": "MyName", - "namespace": "MyNamespace", - "creationTimestamp": "2017-04-01T00:00:00Z", - "resourceVersion": 123, - "uid": "00000000-0000-0000-0000-000000000001", - "dummy3": "present", - "labels": map[string]interface{}{"test": "other"}, - }, - /*"items": []interface{}{ - map[string]interface{}{ - "itemBool": true, - "itemInt": 42, - }, - },*/ - "url": "http://localhost", - "status": "ok", - }, - } - - tests := []struct { - expected string - options printers.PrintOptions - object runtime.Object - }{ - { - expected: "NAME\\s+AGE\nMyName\\s+\\d+", - object: obj, - }, - { - options: printers.PrintOptions{ - WithNamespace: true, - }, - expected: "NAMESPACE\\s+NAME\\s+AGE\nMyNamespace\\s+MyName\\s+\\d+", - object: obj, - }, - { - options: printers.PrintOptions{ - ShowLabels: true, - WithNamespace: true, - }, - expected: "NAMESPACE\\s+NAME\\s+AGE\\s+LABELS\nMyNamespace\\s+MyName\\s+\\d+\\w+\\s+test\\=other", - object: obj, - }, - { - expected: "NAME\\s+AGE\nMyName\\s+\\d+\\w+\nMyName2\\s+\\d+", - object: &unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": "v1", - "kind": "Test", - "dummy1": "present", - "dummy2": "present", - "items": []interface{}{ - map[string]interface{}{ - "metadata": map[string]interface{}{ - "name": "MyName", - "namespace": "MyNamespace", - "creationTimestamp": "2017-04-01T00:00:00Z", - "resourceVersion": 123, - "uid": "00000000-0000-0000-0000-000000000001", - "dummy3": "present", - "labels": map[string]interface{}{"test": "other"}, - }, - }, - map[string]interface{}{ - "metadata": map[string]interface{}{ - "name": "MyName2", - "namespace": "MyNamespace", - "creationTimestamp": "2017-04-01T00:00:00Z", - "resourceVersion": 123, - "uid": "00000000-0000-0000-0000-000000000001", - "dummy3": "present", - "labels": "badlabel", - }, - }, - }, - "url": "http://localhost", - "status": "ok", - }, - }, - }, - } - out := bytes.NewBuffer([]byte{}) - - for _, test := range tests { - out.Reset() - printer := printers.NewTablePrinter(test.options) - printer.PrintObj(test.object, out) - - matches, err := regexp.MatchString(test.expected, out.String()) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if !matches { - t.Errorf("wanted:\n%s\ngot:\n%s", test.expected, out) - } - } -} - type TestPrintType struct { Data string } @@ -189,17 +81,6 @@ func (obj *TestPrintType) DeepCopyObject() runtime.Object { return &clone } -type TestUnknownType struct{} - -func (obj *TestUnknownType) GetObjectKind() schema.ObjectKind { return schema.EmptyObjectKind } -func (obj *TestUnknownType) DeepCopyObject() runtime.Object { - if obj == nil { - return nil - } - clone := *obj - return &clone -} - // TODO(seans3): Move this test to cli-runtime/pkg/printers. func testPrinter(t *testing.T, printer printers.ResourcePrinter, unmarshalFunc func(data []byte, v interface{}) error) { buf := bytes.NewBuffer([]byte{}) @@ -301,16 +182,12 @@ func TestCustomTypePrinting(t *testing.T) { t.Fatalf("An error occurred generating the table for custom type: %#v", err) } - printer := printers.NewTablePrinter(printers.PrintOptions{}) - buffer := &bytes.Buffer{} - err = printer.PrintObj(table, buffer) - if err != nil { - t.Fatalf("An error occurred printing the Table: %#v", err) + expectedTable := &metav1.Table{ + ColumnDefinitions: []metav1.TableColumnDefinition{{Name: "Data"}}, + Rows: []metav1.TableRow{{Cells: []interface{}{"test object"}}}, } - - expectedOutput := "DATA\ntest object\n" - if buffer.String() != expectedOutput { - t.Errorf("The data was not printed as expected. Expected:\n%s\nGot:\n%s", expectedOutput, buffer.String()) + if !reflect.DeepEqual(expectedTable, table) { + t.Errorf("Error generating table from custom type. Expected (%#v), got (%#v)", expectedTable, table) } } @@ -325,15 +202,6 @@ func TestPrintHandlerError(t *testing.T) { } } -func TestUnknownTypePrinting(t *testing.T) { - printer := printers.NewTablePrinter(printers.PrintOptions{}) - buffer := &bytes.Buffer{} - err := printer.PrintObj(&TestUnknownType{}, buffer) - if err == nil { - t.Errorf("An error was expected from printing unknown type") - } -} - func TestTemplatePanic(t *testing.T) { tmpl := `{{and ((index .currentState.info "foo").state.running.startedAt) .currentState.info.net.state.running.startedAt}}` printer, err := genericprinters.NewGoTemplatePrinter([]byte(tmpl)) diff --git a/pkg/printers/tableprinter_test.go b/pkg/printers/tableprinter_test.go index 7bdfb9efd0f..2bdd62636bc 100644 --- a/pkg/printers/tableprinter_test.go +++ b/pkg/printers/tableprinter_test.go @@ -18,10 +18,12 @@ package printers import ( "bytes" + "regexp" "testing" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -594,3 +596,129 @@ Added test1 1/1 podPhase 5 20h } } } + +func TestPrintUnstructuredObject(t *testing.T) { + obj := &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "v1", + "kind": "Test", + "dummy1": "present", + "dummy2": "present", + "metadata": map[string]interface{}{ + "name": "MyName", + "namespace": "MyNamespace", + "creationTimestamp": "2017-04-01T00:00:00Z", + "resourceVersion": 123, + "uid": "00000000-0000-0000-0000-000000000001", + "dummy3": "present", + "labels": map[string]interface{}{"test": "other"}, + }, + /*"items": []interface{}{ + map[string]interface{}{ + "itemBool": true, + "itemInt": 42, + }, + },*/ + "url": "http://localhost", + "status": "ok", + }, + } + + tests := []struct { + expected string + options PrintOptions + object runtime.Object + }{ + { + expected: "NAME\\s+AGE\nMyName\\s+\\d+", + object: obj, + }, + { + options: PrintOptions{ + WithNamespace: true, + }, + expected: "NAMESPACE\\s+NAME\\s+AGE\nMyNamespace\\s+MyName\\s+\\d+", + object: obj, + }, + { + options: PrintOptions{ + ShowLabels: true, + WithNamespace: true, + }, + expected: "NAMESPACE\\s+NAME\\s+AGE\\s+LABELS\nMyNamespace\\s+MyName\\s+\\d+\\w+\\s+test\\=other", + object: obj, + }, + { + expected: "NAME\\s+AGE\nMyName\\s+\\d+\\w+\nMyName2\\s+\\d+", + object: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "v1", + "kind": "Test", + "dummy1": "present", + "dummy2": "present", + "items": []interface{}{ + map[string]interface{}{ + "metadata": map[string]interface{}{ + "name": "MyName", + "namespace": "MyNamespace", + "creationTimestamp": "2017-04-01T00:00:00Z", + "resourceVersion": 123, + "uid": "00000000-0000-0000-0000-000000000001", + "dummy3": "present", + "labels": map[string]interface{}{"test": "other"}, + }, + }, + map[string]interface{}{ + "metadata": map[string]interface{}{ + "name": "MyName2", + "namespace": "MyNamespace", + "creationTimestamp": "2017-04-01T00:00:00Z", + "resourceVersion": 123, + "uid": "00000000-0000-0000-0000-000000000001", + "dummy3": "present", + "labels": "badlabel", + }, + }, + }, + "url": "http://localhost", + "status": "ok", + }, + }, + }, + } + out := bytes.NewBuffer([]byte{}) + + for _, test := range tests { + out.Reset() + printer := NewTablePrinter(test.options) + printer.PrintObj(test.object, out) + + matches, err := regexp.MatchString(test.expected, out.String()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !matches { + t.Errorf("wanted:\n%s\ngot:\n%s", test.expected, out) + } + } +} + +type TestUnknownType struct{} + +func (obj *TestUnknownType) GetObjectKind() schema.ObjectKind { return schema.EmptyObjectKind } +func (obj *TestUnknownType) DeepCopyObject() runtime.Object { + if obj == nil { + return nil + } + clone := *obj + return &clone +} + +func TestUnknownTypePrinting(t *testing.T) { + printer := NewTablePrinter(PrintOptions{}) + buffer := &bytes.Buffer{} + err := printer.PrintObj(&TestUnknownType{}, buffer) + if err == nil { + t.Errorf("An error was expected from printing unknown type") + } +}