Files
2022-01-18 10:34:20 +01:00

144 lines
3.4 KiB
Go

package controller
import (
"os"
"testing"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/util/workqueue"
)
func TestEnqueueWorkHandler_OnAdd(t *testing.T) {
logger := logrus.New()
logger.SetOutput(os.Stdout)
logger.SetLevel(logrus.DebugLevel)
workQueue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
handler := &enqueueWorkHandler{logger: logger, workQueue: workQueue}
handler.OnAdd(&corev1.Pod{})
assert.Equal(t, 1, workQueue.Len())
currentKey, _ := workQueue.Get()
assert.Equal(t, configRefreshKey, currentKey)
}
func TestEnqueueWorkHandler_OnDelete(t *testing.T) {
logger := logrus.New()
logger.SetOutput(os.Stdout)
logger.SetLevel(logrus.DebugLevel)
workQueue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
handler := &enqueueWorkHandler{logger: logger, workQueue: workQueue}
handler.OnDelete(&corev1.Pod{})
assert.Equal(t, 1, workQueue.Len())
currentKey, _ := workQueue.Get()
assert.Equal(t, configRefreshKey, currentKey)
}
func TestEnqueueWorkHandler_OnUpdate(t *testing.T) {
tests := []struct {
desc string
oldObj interface{}
newObj interface{}
expectedLen int
}{
{
desc: "should not enqueue if this is a re-sync event",
oldObj: &corev1.Service{
ObjectMeta: metav1.ObjectMeta{ResourceVersion: "foo"},
},
newObj: &corev1.Service{
ObjectMeta: metav1.ObjectMeta{ResourceVersion: "foo"},
},
expectedLen: 0,
},
{
desc: "should enqueue if this is not a re-sync event",
oldObj: &corev1.Service{
ObjectMeta: metav1.ObjectMeta{ResourceVersion: "foo"},
},
newObj: &corev1.Service{
ObjectMeta: metav1.ObjectMeta{ResourceVersion: "bar"},
},
expectedLen: 1,
},
}
for _, test := range tests {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
logger := logrus.New()
logger.SetOutput(os.Stdout)
logger.SetLevel(logrus.DebugLevel)
workQueue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
handler := &enqueueWorkHandler{logger: logger, workQueue: workQueue}
handler.OnUpdate(test.oldObj, test.newObj)
assert.Equal(t, test.expectedLen, workQueue.Len())
})
}
}
func TestEnqueueWorkHandler_enqueueWork(t *testing.T) {
tests := []struct {
desc string
obj interface{}
expectedLen int
expectedKey string
}{
{
desc: "should enqueue a refresh key if obj is not a service",
obj: &corev1.Endpoints{},
expectedLen: 1,
expectedKey: configRefreshKey,
},
{
desc: "should enqueue a meta namespace key if the obj is a service",
obj: &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: "bar",
},
},
expectedLen: 1,
expectedKey: "bar/foo",
},
}
for _, test := range tests {
test := test
t.Run(test.desc, func(t *testing.T) {
t.Parallel()
logger := logrus.New()
logger.SetOutput(os.Stdout)
logger.SetLevel(logrus.DebugLevel)
workQueue := workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())
handler := &enqueueWorkHandler{logger: logger, workQueue: workQueue}
handler.enqueueWork(test.obj)
assert.Equal(t, test.expectedLen, workQueue.Len())
currentKey, _ := workQueue.Get()
assert.Equal(t, test.expectedKey, currentKey)
})
}
}