From da06ecc74be23aeabce4dd5034cdd3961b7572da Mon Sep 17 00:00:00 2001 From: ZP-AlwaysWin Date: Thu, 12 Sep 2019 22:26:09 +0800 Subject: [PATCH] Fix bug The statefulset have duplicate revision after resource was updated Kubernetes-commit: e081d1dca65e738a2541023968251e58b9abf656 --- pkg/polymorphichelpers/history.go | 2 +- pkg/polymorphichelpers/history_test.go | 61 ++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/pkg/polymorphichelpers/history.go b/pkg/polymorphichelpers/history.go index cb8986c9..f228d8b3 100644 --- a/pkg/polymorphichelpers/history.go +++ b/pkg/polymorphichelpers/history.go @@ -242,7 +242,7 @@ func (h *StatefulSetHistoryViewer) ViewHistory(namespace, name string, revision if len(history) <= 0 { return "No rollout history found.", nil } - revisions := make([]int64, len(history)) + revisions := make([]int64, 0, len(history)) for _, revision := range history { revisions = append(revisions, revision.Revision) } diff --git a/pkg/polymorphichelpers/history_test.go b/pkg/polymorphichelpers/history_test.go index 9bfcaece..bbcd0d72 100644 --- a/pkg/polymorphichelpers/history_test.go +++ b/pkg/polymorphichelpers/history_test.go @@ -17,6 +17,9 @@ limitations under the License. package polymorphichelpers import ( + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "reflect" "testing" @@ -44,3 +47,61 @@ func TestHistoryViewerFor(t *testing.T) { } } } + +func TestViewHistory(t *testing.T) { + + var ( + trueVar = true + replicas = int32(1) + + podStub = corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"foo": "bar"}}, + Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: "test", Image: "nginx"}}}, + } + + ssStub = &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "moons", + Namespace: "default", + UID: "1993", + Labels: map[string]string{"foo": "bar"}, + }, + Spec: appsv1.StatefulSetSpec{Selector: &metav1.LabelSelector{MatchLabels: podStub.ObjectMeta.Labels}, Replicas: &replicas, Template: podStub}, + } + + ssStub1 = &appsv1.ControllerRevision{ + ObjectMeta: metav1.ObjectMeta{ + Name: "moons", + Namespace: "default", + Labels: map[string]string{"foo": "bar"}, + OwnerReferences: []metav1.OwnerReference{{"apps/v1", "StatefulSet", "moons", "1993", &trueVar, nil}}, + }, + TypeMeta: metav1.TypeMeta{Kind: "StatefulSet", APIVersion: "apps/v1"}, + Revision: 1, + } + ) + + fakeClientSet := fake.NewSimpleClientset(ssStub) + _, err := fakeClientSet.AppsV1().ControllerRevisions("default").Create(ssStub1) + if err != nil { + t.Fatalf("create controllerRevisions error %v occurred ", err) + } + + var sts = &StatefulSetHistoryViewer{ + fakeClientSet, + } + + result, err := sts.ViewHistory("default", "moons", 1) + if err != nil { + t.Fatalf("error getting ViewHistory for a StatefulSets moons: %v", err) + } + + expected := `REVISION +1 +` + + if result != expected { + t.Fatalf("unexpected output (%v was expected but got %v)", expected, result) + } + +}