1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/webhooks/utils/update_request_updater_test.go

174 lines
4.5 KiB
Go
Raw Normal View History

package utils
import (
"context"
"testing"
"github.com/go-logr/logr"
kyvernov1beta1 "github.com/kyverno/kyverno/api/kyverno/v1beta1"
"github.com/kyverno/kyverno/pkg/background/generate"
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
"github.com/kyverno/kyverno/pkg/client/clientset/versioned/fake"
kyvernoinformers "github.com/kyverno/kyverno/pkg/client/informers/externalversions"
kyvernov1beta1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1beta1"
"github.com/kyverno/kyverno/pkg/config"
"github.com/stretchr/testify/assert"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
func TestNewUpdateRequestUpdater(t *testing.T) {
type args struct {
client versioned.Interface
lister kyvernov1beta1listers.UpdateRequestNamespaceLister
}
tests := []struct {
name string
args args
want UpdateRequestUpdater
}{{
name: "nil",
args: args{nil, nil},
want: &updateRequestUpdater{nil, nil},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := NewUpdateRequestUpdater(tt.args.client, tt.args.lister)
assert.Equal(t, tt.want, got)
})
}
}
func Test_updateRequestUpdater_updateAnnotation(t *testing.T) {
type data struct {
objects []runtime.Object
}
tests := []struct {
name string
data data
urName string
updated bool
}{{
name: "success",
data: data{
[]runtime.Object{
&kyvernov1beta1.UpdateRequest{
ObjectMeta: v1.ObjectMeta{
Name: "test",
Namespace: config.KyvernoNamespace(),
},
},
},
},
urName: "test",
updated: true,
}, {
name: "not found",
data: data{
[]runtime.Object{
&kyvernov1beta1.UpdateRequest{
ObjectMeta: v1.ObjectMeta{
Name: "dummy",
Namespace: config.KyvernoNamespace(),
},
},
},
},
urName: "dummy",
updated: false,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
done := ctx.Done()
t.Cleanup(cancel)
client := fake.NewSimpleClientset(tt.data.objects...)
kyvernoInformers := kyvernoinformers.NewSharedInformerFactory(client, 0)
lister := kyvernoInformers.Kyverno().V1beta1().UpdateRequests().Lister().UpdateRequests(config.KyvernoNamespace())
kyvernoInformers.Start(done)
kyvernoInformers.WaitForCacheSync(done)
h := &updateRequestUpdater{
client: client,
lister: lister,
}
h.updateAnnotation(logr.Discard(), "test")
ur, err := client.KyvernoV1beta1().UpdateRequests(config.KyvernoNamespace()).Get(ctx, tt.urName, v1.GetOptions{})
assert.NoError(t, err)
assert.NotNil(t, ur)
if tt.updated {
annotations := ur.GetAnnotations()
assert.NotNil(t, annotations)
assert.NotNil(t, annotations[generate.AnnotationUpdateTime])
} else {
annotations := ur.GetAnnotations()
assert.Nil(t, annotations)
}
})
}
}
func Test_updateRequestUpdater_setPendingStatus(t *testing.T) {
type data struct {
objects []runtime.Object
}
tests := []struct {
name string
data data
urName string
updated bool
}{{
name: "success",
data: data{
[]runtime.Object{
&kyvernov1beta1.UpdateRequest{
ObjectMeta: v1.ObjectMeta{
Name: "test",
Namespace: config.KyvernoNamespace(),
},
},
},
},
urName: "test",
updated: true,
}, {
name: "not found",
data: data{
[]runtime.Object{
&kyvernov1beta1.UpdateRequest{
ObjectMeta: v1.ObjectMeta{
Name: "dummy",
Namespace: config.KyvernoNamespace(),
},
},
},
},
urName: "dummy",
updated: false,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
done := ctx.Done()
t.Cleanup(cancel)
client := fake.NewSimpleClientset(tt.data.objects...)
kyvernoInformers := kyvernoinformers.NewSharedInformerFactory(client, 0)
lister := kyvernoInformers.Kyverno().V1beta1().UpdateRequests().Lister().UpdateRequests(config.KyvernoNamespace())
kyvernoInformers.Start(done)
kyvernoInformers.WaitForCacheSync(done)
h := &updateRequestUpdater{
client: client,
lister: lister,
}
h.setPendingStatus(logr.Discard(), "test")
ur, err := client.KyvernoV1beta1().UpdateRequests(config.KyvernoNamespace()).Get(ctx, tt.urName, v1.GetOptions{})
assert.NoError(t, err)
assert.NotNil(t, ur)
if tt.updated {
assert.Equal(t, kyvernov1beta1.Pending, ur.Status.State)
} else {
assert.NotEqual(t, kyvernov1beta1.Pending, ur.Status.State)
}
})
}
}