From bdc509131cc6c970780934a3f96677c8d5e35513 Mon Sep 17 00:00:00 2001 From: hangaoshuai Date: Thu, 19 Apr 2018 10:02:28 +0800 Subject: [PATCH] check error when parse field failed --- pkg/kubectl/BUILD | 1 + pkg/kubectl/sorter.go | 9 ++++-- pkg/kubectl/sorter_test.go | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index f6cd4a553f..883d082511 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -62,6 +62,7 @@ go_test( "//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", diff --git a/pkg/kubectl/sorter.go b/pkg/kubectl/sorter.go index f1330e3582..fbdf8040df 100644 --- a/pkg/kubectl/sorter.go +++ b/pkg/kubectl/sorter.go @@ -277,13 +277,16 @@ func (r *RuntimeSort) Less(i, j int) bool { iObj := r.objs[i] jObj := r.objs[j] - parser := jsonpath.New("sorting").AllowMissingKeys(true) - parser.Parse(r.field) - var iValues [][]reflect.Value var jValues [][]reflect.Value var err error + parser := jsonpath.New("sorting").AllowMissingKeys(true) + err = parser.Parse(r.field) + if err != nil { + panic(err) + } + if unstructured, ok := iObj.(*unstructured.Unstructured); ok { iValues, err = parser.FindResults(unstructured.Object) } else { diff --git a/pkg/kubectl/sorter_test.go b/pkg/kubectl/sorter_test.go index 7f6b0ad5c4..7c2e5ee0a0 100644 --- a/pkg/kubectl/sorter_test.go +++ b/pkg/kubectl/sorter_test.go @@ -22,6 +22,7 @@ import ( "testing" api "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -408,3 +409,67 @@ func TestSortingPrinter(t *testing.T) { } } } + +func TestRuntimeSortLess(t *testing.T) { + var testobj runtime.Object + + testobj = &api.PodList{ + Items: []api.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "b", + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "c", + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "a", + }, + }, + }, + } + + testobjs, err := meta.ExtractList(testobj) + if err != nil { + t.Fatalf("ExtractList testobj got unexpected error: %v", err) + } + + testfield := "{.metadata.name}" + testruntimeSort := NewRuntimeSort(testfield, testobjs) + tests := []struct { + name string + runtimeSort *RuntimeSort + i int + j int + expectResult bool + expectErr bool + }{ + { + name: "test less true", + runtimeSort: testruntimeSort, + i: 0, + j: 1, + expectResult: true, + }, + { + name: "test less false", + runtimeSort: testruntimeSort, + i: 1, + j: 2, + expectResult: false, + }, + } + + for i, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := test.runtimeSort.Less(test.i, test.j) + if result != test.expectResult { + t.Errorf("case[%d]:%s Expected result: %v, Got result: %v", i, test.name, test.expectResult, result) + } + }) + } +}