@@ -19,6 +19,7 @@ package controller
1919import (
2020 "context"
2121 "fmt"
22+ "os"
2223 "testing"
2324 "time"
2425
@@ -237,3 +238,99 @@ func TestProviderReconciler_Reconcile(t *testing.T) {
237238 }, timeout , time .Second ).Should (BeTrue ())
238239 })
239240}
241+
242+ func TestProviderReconciler_Reconcile_cacert (t * testing.T ) {
243+ g := NewWithT (t )
244+ namespaceName := "provider-" + randStringRunes (5 )
245+ secretName := "ca-secret-" + randStringRunes (5 )
246+
247+ caCrt , err := os .ReadFile ("./testdata/certs/ca.pem" )
248+ g .Expect (err ).To (Not (HaveOccurred ()))
249+
250+ g .Expect (createNamespace (namespaceName )).NotTo (HaveOccurred (), "failed to create test namespace" )
251+
252+ providerKey := types.NamespacedName {
253+ Name : fmt .Sprintf ("provider-%s" , randStringRunes (5 )),
254+ Namespace : namespaceName ,
255+ }
256+
257+ provider := & apiv1beta2.Provider {
258+ ObjectMeta : metav1.ObjectMeta {
259+ Name : providerKey .Name ,
260+ Namespace : providerKey .Namespace ,
261+ },
262+ Spec : apiv1beta2.ProviderSpec {
263+ Type : "generic" ,
264+ Address : "https://webhook.internal" ,
265+ CertSecretRef : & meta.LocalObjectReference {Name : secretName },
266+ },
267+ }
268+ g .Expect (k8sClient .Create (context .Background (), provider )).To (Succeed ())
269+
270+ certSecret := & corev1.Secret {
271+ ObjectMeta : metav1.ObjectMeta {
272+ Name : secretName ,
273+ Namespace : providerKey .Namespace ,
274+ },
275+ Data : map [string ][]byte {
276+ "caFile" : []byte ("invalid byte" ),
277+ "ca.crt" : caCrt ,
278+ },
279+ }
280+ g .Expect (k8sClient .Create (context .Background (), certSecret )).To (Succeed ())
281+
282+ r := & ProviderReconciler {
283+ Client : k8sClient ,
284+ EventRecorder : record .NewFakeRecorder (32 ),
285+ }
286+
287+ t .Run ("uses `ca.crt` instead of deprecated `caFile`" , func (t * testing.T ) {
288+ g := NewWithT (t )
289+ _ , err = r .Reconcile (ctx , ctrl.Request {NamespacedName : client .ObjectKeyFromObject (provider )})
290+ g .Expect (err ).NotTo (HaveOccurred ())
291+ })
292+
293+ t .Run ("works if only deprecated `caFile` is specified" , func (t * testing.T ) {
294+ g := NewWithT (t )
295+
296+ clusterCertSecret := & corev1.Secret {}
297+ g .Expect (k8sClient .Get (context .Background (), client .ObjectKeyFromObject (certSecret ), clusterCertSecret )).To (Succeed ())
298+
299+ patchHelper , err := patch .NewHelper (clusterCertSecret , k8sClient )
300+ g .Expect (err ).ToNot (HaveOccurred ())
301+ clusterCertSecret .Data = map [string ][]byte {
302+ "caFile" : caCrt ,
303+ }
304+ g .Expect (patchHelper .Patch (context .Background (), clusterCertSecret )).ToNot (HaveOccurred ())
305+
306+ _ , err = r .Reconcile (ctx , ctrl.Request {NamespacedName : client .ObjectKeyFromObject (provider )})
307+ g .Expect (err ).NotTo (HaveOccurred ())
308+ })
309+
310+ t .Run ("returns error with certSecretRef of the wrong type" , func (t * testing.T ) {
311+ g := NewWithT (t )
312+
313+ dockerSecret := & corev1.Secret {
314+ ObjectMeta : metav1.ObjectMeta {
315+ Name : "docker-secret" ,
316+ Namespace : providerKey .Namespace ,
317+ },
318+ Type : corev1 .DockerConfigJsonKey ,
319+ }
320+ g .Expect (k8sClient .Create (context .Background (), dockerSecret )).To (Succeed ())
321+
322+ clusterProvider := & apiv1beta2.Provider {}
323+ g .Expect (k8sClient .Get (context .Background (), client .ObjectKeyFromObject (provider ), clusterProvider )).To (Succeed ())
324+
325+ patchHelper , err := patch .NewHelper (clusterProvider , k8sClient )
326+ g .Expect (err ).ToNot (HaveOccurred ())
327+ clusterProvider .Spec .CertSecretRef = & meta.LocalObjectReference {
328+ Name : dockerSecret .Name ,
329+ }
330+ g .Expect (patchHelper .Patch (context .Background (), clusterProvider )).ToNot (HaveOccurred ())
331+
332+ _ , err = r .Reconcile (ctx , ctrl.Request {NamespacedName : client .ObjectKeyFromObject (provider )})
333+ g .Expect (err ).To (HaveOccurred ())
334+ g .Expect (err .Error ()).To (ContainSubstring ("invalid secret type" ))
335+ })
336+ }
0 commit comments