Skip to content

Commit c125aa6

Browse files
committed
Add remaining cert-manager tests
1 parent af4599b commit c125aa6

File tree

2 files changed

+101
-1
lines changed

2 files changed

+101
-1
lines changed

internal/certmanager/cm_controller_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"testing"
2323
"time"
2424

25+
cmapi "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
2526
cmclient "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned"
2627
controllerpkg "github.com/cert-manager/cert-manager/pkg/controller"
2728
testpkg "github.com/nginx/kubernetes-ingress/internal/certmanager/test_files"
@@ -44,6 +45,16 @@ func Test_controller_Register(t *testing.T) {
4445
givenCall func(*testing.T, cmclient.Interface, k8s_nginx.Interface)
4546
expectRequeueKey string
4647
}{
48+
{
49+
name: "virtualserver is re-queued when an 'Added' event is received for this virtualserver",
50+
givenCall: func(t *testing.T, _ cmclient.Interface, c k8s_nginx.Interface) {
51+
_, err := c.K8sV1().VirtualServers("namespace-1").Create(context.Background(), &vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
52+
Namespace: "namespace-1", Name: "vs-1", UID: "vs-uid-1",
53+
}}, metav1.CreateOptions{})
54+
require.NoError(t, err)
55+
},
56+
expectRequeueKey: "namespace-1/vs-1",
57+
},
4758
{
4859
name: "virtualserver is re-queued when an 'Updated' event is received for this virtualserver",
4960
existingVsObjects: []runtime.Object{&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
@@ -57,6 +68,63 @@ func Test_controller_Register(t *testing.T) {
5768
},
5869
expectRequeueKey: "namespace-1/vs-1",
5970
},
71+
{
72+
name: "virtualserver is re-queued when a 'Deleted' event is received for this ingress",
73+
existingVsObjects: []runtime.Object{&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
74+
Namespace: "namespace-1", Name: "vs-1",
75+
}}},
76+
givenCall: func(t *testing.T, _ cmclient.Interface, c k8s_nginx.Interface) {
77+
err := c.K8sV1().VirtualServers("namespace-1").Delete(context.Background(), "vs-1", metav1.DeleteOptions{})
78+
require.NoError(t, err)
79+
},
80+
expectRequeueKey: "namespace-1/vs-1",
81+
},
82+
{
83+
name: "virtualserver is re-queued when an 'Added' event is received for its child Certificate",
84+
givenCall: func(t *testing.T, c cmclient.Interface, _ k8s_nginx.Interface) {
85+
_, err := c.CertmanagerV1().Certificates("namespace-1").Create(context.Background(), &cmapi.Certificate{ObjectMeta: metav1.ObjectMeta{
86+
Namespace: "namespace-1", Name: "cert-1",
87+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
88+
Namespace: "namespace-1", Name: "vs-2",
89+
}}, vsGVK)},
90+
}}, metav1.CreateOptions{})
91+
require.NoError(t, err)
92+
},
93+
expectRequeueKey: "namespace-1/vs-2",
94+
},
95+
{
96+
name: "virtualserver is re-queued when an 'Updated' event is received for its child Certificate",
97+
existingCMObjects: []runtime.Object{&cmapi.Certificate{ObjectMeta: metav1.ObjectMeta{
98+
Namespace: "namespace-1", Name: "cert-1",
99+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
100+
Namespace: "namespace-1", Name: "vs-2",
101+
}}, vsGVK)},
102+
}}},
103+
givenCall: func(t *testing.T, c cmclient.Interface, _ k8s_nginx.Interface) {
104+
_, err := c.CertmanagerV1().Certificates("namespace-1").Update(context.Background(), &cmapi.Certificate{ObjectMeta: metav1.ObjectMeta{
105+
Namespace: "namespace-1", Name: "cert-1",
106+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
107+
Namespace: "namespace-1", Name: "vs-2",
108+
}}, vsGVK)},
109+
}}, metav1.UpdateOptions{})
110+
require.NoError(t, err)
111+
},
112+
expectRequeueKey: "namespace-1/vs-2",
113+
},
114+
{
115+
name: "virtualserver is re-queued when a 'Deleted' event is received for its child Certificate",
116+
existingCMObjects: []runtime.Object{&cmapi.Certificate{ObjectMeta: metav1.ObjectMeta{
117+
Namespace: "namespace-1", Name: "cert-1",
118+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(&vsapi.VirtualServer{ObjectMeta: metav1.ObjectMeta{
119+
Namespace: "namespace-1", Name: "vs-2",
120+
}}, vsGVK)},
121+
}}},
122+
givenCall: func(t *testing.T, c cmclient.Interface, _ k8s_nginx.Interface) {
123+
err := c.CertmanagerV1().Certificates("namespace-1").Delete(context.Background(), "cert-1", metav1.DeleteOptions{})
124+
require.NoError(t, err)
125+
},
126+
expectRequeueKey: "namespace-1/vs-2",
127+
},
60128
}
61129

62130
for _, test := range tests {

internal/certmanager/test_files/context_builder.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import (
2626

2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
"k8s.io/apimachinery/pkg/runtime"
29+
"k8s.io/apimachinery/pkg/runtime/serializer"
2930
utilerrors "k8s.io/apimachinery/pkg/util/errors"
31+
"k8s.io/apimachinery/pkg/watch"
3032
kubeinformers "k8s.io/client-go/informers"
3133
kubefake "k8s.io/client-go/kubernetes/fake"
3234
"k8s.io/client-go/rest"
@@ -38,9 +40,11 @@ import (
3840
cmfake "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned/fake"
3941
informers "github.com/cert-manager/cert-manager/pkg/client/informers/externalversions"
4042
"github.com/cert-manager/cert-manager/pkg/util"
43+
confv1 "github.com/nginx/kubernetes-ingress/pkg/apis/configuration/v1"
4144
k8s_nginx "github.com/nginx/kubernetes-ingress/pkg/client/clientset/versioned"
4245
vsfake "github.com/nginx/kubernetes-ingress/pkg/client/clientset/versioned/fake"
4346
vsinformers "github.com/nginx/kubernetes-ingress/pkg/client/informers/externalversions"
47+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4448
clientfeatures "k8s.io/client-go/features"
4549
clienttesting "k8s.io/client-go/features/testing"
4650
)
@@ -105,11 +109,39 @@ func (b *Builder) Init() {
105109
b.requiredReactors = make(map[string]bool)
106110
b.Client = kubefake.NewClientset(b.KubeObjects...)
107111
b.CMClient = cmfake.NewClientset(b.CertManagerObjects...)
108-
b.VSClient = vsfake.NewClientset(b.VSObjects...)
112+
b.VSClient = vsfake.NewClientset()
109113
b.Recorder = new(FakeRecorder)
110114
b.FakeKubeClient().PrependReactor("create", "*", b.generateNameReactor)
111115
b.FakeCMClient().PrependReactor("create", "*", b.generateNameReactor)
112116
b.FakeVSClient().PrependReactor("create", "*", b.generateNameReactor)
117+
// Build a scheme/codecs for VS CRD and use a simple tracker to avoid typed SMD conversion
118+
scheme := runtime.NewScheme()
119+
utilruntime.Must(confv1.AddToScheme(scheme))
120+
codecs := serializer.NewCodecFactory(scheme)
121+
122+
st := coretesting.NewObjectTracker(scheme, codecs.UniversalDecoder())
123+
for _, obj := range b.VSObjects {
124+
_ = st.Add(obj)
125+
}
126+
127+
// Intercept VirtualServer CRUD via simple tracker
128+
b.FakeVSClient().PrependReactor("*", "virtualservers", coretesting.ObjectReaction(st))
129+
130+
// Intercept VirtualServer watch via simple tracker
131+
b.FakeVSClient().PrependWatchReactor("virtualservers", func(action coretesting.Action) (bool, watch.Interface, error) {
132+
var opts metav1.ListOptions
133+
if wa, ok := action.(coretesting.WatchActionImpl); ok {
134+
opts = wa.ListOptions
135+
}
136+
gvr := action.GetResource()
137+
ns := action.GetNamespace()
138+
w, err := st.Watch(gvr, ns, opts)
139+
if err != nil {
140+
return false, nil, err
141+
}
142+
return true, w, nil
143+
})
144+
113145
// Borrowed from cert-manager to disable WatchListClient feature gate
114146
// FIXME: It seems like we need to disable the WatchListClient feature gate until our gateway-api dependency is bumped to K8s 1.35
115147
clienttesting.SetFeatureDuringTest(b.T, clientfeatures.WatchListClient, false)

0 commit comments

Comments
 (0)