From 81fe75fae24c7f35f3431d1b7fb30d1b06772f5f Mon Sep 17 00:00:00 2001 From: stoneshi-yunify <70880165+stoneshi-yunify@users.noreply.github.com> Date: Mon, 14 Sep 2020 18:40:07 +0800 Subject: [PATCH 1/2] fix: add nil check for storage class name Signed-off-by: stoneshi-yunify <70880165+stoneshi-yunify@users.noreply.github.com> --- pkg/models/resources/v1alpha2/storageclass/storageclasses.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/models/resources/v1alpha2/storageclass/storageclasses.go b/pkg/models/resources/v1alpha2/storageclass/storageclasses.go index fa651e1e4..9c04aa1b3 100644 --- a/pkg/models/resources/v1alpha2/storageclass/storageclasses.go +++ b/pkg/models/resources/v1alpha2/storageclass/storageclasses.go @@ -107,7 +107,7 @@ func (s *storageClassesSearcher) countPersistentVolumeClaims(name string) int { var count int for _, pvc := range pvcs { - if *pvc.Spec.StorageClassName == name || (pvc.Annotations != nil && pvc.Annotations[corev1.BetaStorageClassAnnotation] == name) { + if (pvc.Spec.StorageClassName != nil && *pvc.Spec.StorageClassName == name) || (pvc.Annotations != nil && pvc.Annotations[corev1.BetaStorageClassAnnotation] == name) { count++ } } From 7fe78e485b4b8e9bcdb0157ec54da01f780789c1 Mon Sep 17 00:00:00 2001 From: stoneshi-yunify <70880165+stoneshi-yunify@users.noreply.github.com> Date: Mon, 21 Sep 2020 10:44:20 +0800 Subject: [PATCH 2/2] add ut for storageclasses.go Signed-off-by: stoneshi-yunify <70880165+stoneshi-yunify@users.noreply.github.com> --- .../storageclass/storageclasses_test.go | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 pkg/models/resources/v1alpha2/storageclass/storageclasses_test.go diff --git a/pkg/models/resources/v1alpha2/storageclass/storageclasses_test.go b/pkg/models/resources/v1alpha2/storageclass/storageclasses_test.go new file mode 100644 index 000000000..5224dc50a --- /dev/null +++ b/pkg/models/resources/v1alpha2/storageclass/storageclasses_test.go @@ -0,0 +1,109 @@ +package storageclass + +import ( + "github.com/google/go-cmp/cmp" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/api/storage/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes/fake" + "k8s.io/utils/pointer" + "kubesphere.io/kubesphere/pkg/models/resources/v1alpha2" + "kubesphere.io/kubesphere/pkg/server/params" + "testing" +) + +var ( + sc1 = &v1.StorageClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sc1", + }, + } + + scs = []interface{}{sc1} + + pvc1 = &corev1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pvc1", + Namespace: "default", + }, + Spec: corev1.PersistentVolumeClaimSpec{ + VolumeName: "pvc1-volume", + StorageClassName: pointer.StringPtr("sc1"), + }, + } + + pvc2 = &corev1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pvc2", + Namespace: "default", + }, + Spec: corev1.PersistentVolumeClaimSpec{ + VolumeName: "pvc2-volume", + }, + } + + pvcs = []interface{}{pvc1, pvc2} +) + +func prepare() (v1alpha2.Interface, error) { + client := fake.NewSimpleClientset() + informer := informers.NewSharedInformerFactory(client, 0) + + for _, sc := range scs { + err := informer.Storage().V1().StorageClasses().Informer().GetIndexer().Add(sc) + if err != nil { + return nil, err + } + } + + for _, pvc := range pvcs { + err := informer.Core().V1().PersistentVolumeClaims().Informer().GetIndexer().Add(pvc) + if err != nil { + return nil, err + } + } + + return NewStorageClassesSearcher(informer, nil), nil +} + +func TestSearch(t *testing.T) { + tests := []struct { + namespace string + name string + conditions *params.Conditions + orderBy string + reverse bool + expected interface{} + expectedErr error + }{ + { + namespace: "default", + name: sc1.Name, + conditions: ¶ms.Conditions{}, + orderBy: "name", + reverse: true, + expected: scs, + expectedErr: nil, + }, + } + + searcher, err := prepare() + if err != nil { + t.Fatal(err) + } + + for _, test := range tests { + got, err := searcher.Search(test.namespace, test.conditions, test.orderBy, test.reverse) + if test.expectedErr != nil && err != test.expectedErr { + t.Errorf("expected error, got nothing") + } else if err != nil { + t.Fatal(err) + } + + if diff := cmp.Diff(got, test.expected); diff != "" { + t.Errorf("%T differ (-got, +want): %s", test.expected, diff) + } + } + +}