Skip to content

Commit

Permalink
Adding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rurkss committed Aug 29, 2024
1 parent f5d3139 commit 1c48366
Showing 1 changed file with 73 additions and 6 deletions.
79 changes: 73 additions & 6 deletions service/k8s/statefulset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ import (
"github.com/spotahome/redis-operator/log"
"github.com/spotahome/redis-operator/metrics"
"github.com/spotahome/redis-operator/service/k8s"

corev1 "k8s.io/api/core/v1"
)

var (
statefulSetsGroup = schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "statefulsets"}
statefulSetsGroup = schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "statefulsets"}
persistentVolumeClaimGroup = schema.GroupVersionResource{Group: "", Version: "v1", Resource: "persistentvolumeclaims"}
podGroup = schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
)

func newStatefulSetUpdateAction(ns string, statefulSet *appsv1.StatefulSet) kubetesting.UpdateActionImpl {
Expand All @@ -38,6 +42,26 @@ func newStatefulSetCreateAction(ns string, statefulSet *appsv1.StatefulSet) kube
return kubetesting.NewCreateAction(statefulSetsGroup, ns, statefulSet)
}

func newPVCGetAction(pvc *corev1.PersistentVolumeClaim) kubetesting.CreateActionImpl {

Check failure on line 45 in service/k8s/statefulset_test.go

View workflow job for this annotation

GitHub Actions / Golang Check

func `newPVCGetAction` is unused (unused)
return kubetesting.NewCreateAction(statefulSetsGroup, "", pvc)
}

func newPVCUpdateAction(pvc *corev1.PersistentVolumeClaim) kubetesting.UpdateActionImpl {
return kubetesting.NewUpdateAction(persistentVolumeClaimGroup, "", pvc)
}

func newPVCListAction(opts metav1.ListOptions) kubetesting.ListActionImpl {
return kubetesting.NewListAction(persistentVolumeClaimGroup, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "PersistentVolumeClaim"}, "", opts)
}

func newPodListAction(ns string, opts metav1.ListOptions) kubetesting.ListActionImpl {
return kubetesting.NewListAction(podGroup, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Pod"}, ns, opts)
}

func newPodDeleteAction(ns string, name string) kubetesting.DeleteActionImpl {
return kubetesting.NewDeleteAction(podGroup, ns, name)
}

func TestStatefulSetServiceGetCreateOrUpdate(t *testing.T) {
testStatefulSet := &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -130,11 +154,7 @@ func TestStatefulSetServiceGetCreateOrUpdate(t *testing.T) {
ResourceVersion: "10",
},
Spec: appsv1.StatefulSetSpec{
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"sts": "sts",
},
},
Selector: &metav1.LabelSelector{},
VolumeClaimTemplates: []v1.PersistentVolumeClaim{
{
Spec: v1.PersistentVolumeClaimSpec{
Expand Down Expand Up @@ -167,6 +187,17 @@ func TestStatefulSetServiceGetCreateOrUpdate(t *testing.T) {
},
},
}

podList := &v1.PodList{
Items: []v1.Pod{
{
ObjectMeta: metav1.ObjectMeta{
Name: "pod-1",
Labels: map[string]string{},
},
},
},
}
pvcList := &v1.PersistentVolumeClaimList{
Items: []v1.PersistentVolumeClaim{
{
Expand Down Expand Up @@ -200,6 +231,18 @@ func TestStatefulSetServiceGetCreateOrUpdate(t *testing.T) {
},
}
// Mock.

expActions := []kubetesting.Action{
newStatefulSetGetAction(testns, beforeSts.ObjectMeta.Name),
newPVCListAction(metav1.ListOptions{
LabelSelector: "app.kubernetes.io/component=redis,app.kubernetes.io/name=teststatefulSet1,app.kubernetes.io/part-of=redis-failover",
}),
newPVCUpdateAction(&pvcList.Items[0]),
newStatefulSetGetAction(testns, afterSts.ObjectMeta.Name),
newPodListAction(testns, metav1.ListOptions{}),
newPodDeleteAction(testns, podList.Items[0].ObjectMeta.Name),
newStatefulSetUpdateAction(testns, afterSts),
}
mcli := &kubernetes.Clientset{}
mcli.AddReactor("get", "statefulsets", func(action kubetesting.Action) (bool, runtime.Object, error) {
return true, beforeSts, nil
Expand All @@ -212,17 +255,41 @@ func TestStatefulSetServiceGetCreateOrUpdate(t *testing.T) {
pvcList.Items[0] = *action.(kubetesting.UpdateActionImpl).Object.(*v1.PersistentVolumeClaim)
return true, action.(kubetesting.UpdateActionImpl).Object, nil
})

mcli.AddReactor("list", "pods", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) {
return true, podList, nil
})

mcli.AddReactor("delete", "pods", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) {
return true, podList, nil
})

service := k8s.NewStatefulSetService(mcli, log.Dummy, metrics.Dummy)
err := service.CreateOrUpdateStatefulSet(testns, afterSts)
assert.NoError(err)
assert.Equal(pvcList.Items[0].Spec.Resources, pvcList.Items[1].Spec.Resources)
assert.Equal(expActions, mcli.Actions())

// should not call update
mcli = &kubernetes.Clientset{}

// no deletion pods anymore, as pvc is already resized
expActions = []kubetesting.Action{
newStatefulSetGetAction(testns, beforeSts.ObjectMeta.Name),
newPVCListAction(metav1.ListOptions{
LabelSelector: "app.kubernetes.io/component=redis,app.kubernetes.io/name=,app.kubernetes.io/part-of=redis-failover",
}),
newStatefulSetUpdateAction(testns, afterSts),
}

mcli.AddReactor("update", "persistentvolumeclaims", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) {
panic("shouldn't call update")
})
service = k8s.NewStatefulSetService(mcli, log.Dummy, metrics.Dummy)
err = service.CreateOrUpdateStatefulSet(testns, afterSts)
assert.NoError(err)

assert.Equal(expActions, mcli.Actions())
})
}
}

0 comments on commit 1c48366

Please sign in to comment.