@@ -2591,3 +2591,146 @@ func TestDPAReconciler_ReconcileBackupStorageLocations(t *testing.T) {
25912591 })
25922592 }
25932593}
2594+
2595+ func TestProcessCACertForBSLs (t * testing.T ) {
2596+ testCACertPEM := `-----BEGIN CERTIFICATE-----
2597+ MIIDNzCCAh+gAwIBAgIJAJ7qAHESwpNwMA0GCSqGSIb3DQEBCwUAMDMxMTAvBgNV
2598+ BAMMKGVjMi01NC0yMTEtOC0yNDguY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20wHhcN
2599+ MjUwMTI0MTcxNjQyWhcNMjYwMTI0MTcxNjQyWjAzMTEwLwYDVQQDDChlYzItNTQt
2600+ -----END CERTIFICATE-----`
2601+
2602+ tests := []struct {
2603+ name string
2604+ backupLocations []oadpv1alpha1.BackupLocation
2605+ wantConfigMapName string
2606+ wantError bool
2607+ }{
2608+ {
2609+ name : "BSL with Velero CA certificate" ,
2610+ backupLocations : []oadpv1alpha1.BackupLocation {
2611+ {
2612+ Velero : & velerov1.BackupStorageLocationSpec {
2613+ Provider : "aws" ,
2614+ StorageType : velerov1.StorageType {
2615+ ObjectStorage : & velerov1.ObjectStorageLocation {
2616+ Bucket : "test-bucket" ,
2617+ CACert : []byte (testCACertPEM ),
2618+ },
2619+ },
2620+ },
2621+ },
2622+ },
2623+ wantConfigMapName : caBundleConfigMapName ,
2624+ wantError : false ,
2625+ },
2626+ {
2627+ name : "BSL with CloudStorage CA certificate" ,
2628+ backupLocations : []oadpv1alpha1.BackupLocation {
2629+ {
2630+ CloudStorage : & oadpv1alpha1.CloudStorageLocation {
2631+ CloudStorageRef : corev1.LocalObjectReference {Name : "test-bucket" },
2632+ CACert : []byte (testCACertPEM ),
2633+ },
2634+ },
2635+ },
2636+ wantConfigMapName : caBundleConfigMapName ,
2637+ wantError : false ,
2638+ },
2639+ {
2640+ name : "BSL without CA certificate" ,
2641+ backupLocations : []oadpv1alpha1.BackupLocation {
2642+ {
2643+ Velero : & velerov1.BackupStorageLocationSpec {
2644+ Provider : "aws" ,
2645+ StorageType : velerov1.StorageType {
2646+ ObjectStorage : & velerov1.ObjectStorageLocation {
2647+ Bucket : "test-bucket" ,
2648+ },
2649+ },
2650+ },
2651+ },
2652+ },
2653+ wantConfigMapName : "" ,
2654+ wantError : false ,
2655+ },
2656+ {
2657+ name : "No backup locations" ,
2658+ backupLocations : []oadpv1alpha1.BackupLocation {},
2659+ wantConfigMapName : "" ,
2660+ wantError : false ,
2661+ },
2662+ }
2663+
2664+ for _ , tt := range tests {
2665+ t .Run (tt .name , func (t * testing.T ) {
2666+ dpa := & oadpv1alpha1.DataProtectionApplication {
2667+ ObjectMeta : metav1.ObjectMeta {
2668+ Name : "test-dpa" ,
2669+ Namespace : "test-ns" ,
2670+ },
2671+ Spec : oadpv1alpha1.DataProtectionApplicationSpec {
2672+ BackupLocations : tt .backupLocations ,
2673+ },
2674+ }
2675+
2676+ fakeClient , err := getFakeClientFromObjects (dpa )
2677+ if err != nil {
2678+ t .Fatalf ("error creating fake client: %v" , err )
2679+ }
2680+
2681+ r := & DPAReconciler {
2682+ Client : fakeClient ,
2683+ Scheme : fakeClient .Scheme (),
2684+ Log : logr .Discard (),
2685+ Context : context .Background (),
2686+ EventRecorder : record .NewFakeRecorder (10 ),
2687+ NamespacedName : types.NamespacedName {
2688+ Name : dpa .Name ,
2689+ Namespace : dpa .Namespace ,
2690+ },
2691+ }
2692+
2693+ gotConfigMapName , err := r .processCACertForBSLs (dpa )
2694+
2695+ if tt .wantError {
2696+ if err == nil {
2697+ t .Errorf ("expected error but got nil" )
2698+ }
2699+ return
2700+ }
2701+ if err != nil {
2702+ t .Errorf ("unexpected error: %v" , err )
2703+ return
2704+ }
2705+
2706+ if gotConfigMapName != tt .wantConfigMapName {
2707+ t .Errorf ("expected ConfigMap name %q, got %q" , tt .wantConfigMapName , gotConfigMapName )
2708+ }
2709+
2710+ if tt .wantConfigMapName != "" {
2711+ configMap := & corev1.ConfigMap {}
2712+ err := fakeClient .Get (context .Background (), types.NamespacedName {
2713+ Name : tt .wantConfigMapName ,
2714+ Namespace : dpa .Namespace ,
2715+ }, configMap )
2716+ if err != nil {
2717+ t .Fatalf ("expected ConfigMap to exist: %v" , err )
2718+ }
2719+
2720+ if _ , ok := configMap .Data [caBundleFileName ]; ! ok {
2721+ t .Error ("ConfigMap missing ca-bundle.pem data key" )
2722+ }
2723+
2724+ if configMap .Labels ["app.kubernetes.io/name" ] != "velero" {
2725+ t .Errorf ("expected label app.kubernetes.io/name=velero, got %s" , configMap .Labels ["app.kubernetes.io/name" ])
2726+ }
2727+ if configMap .Labels ["app.kubernetes.io/component" ] != "ca-bundle" {
2728+ t .Errorf ("expected label app.kubernetes.io/component=ca-bundle, got %s" , configMap .Labels ["app.kubernetes.io/component" ])
2729+ }
2730+ if configMap .Labels [oadpv1alpha1 .OadpOperatorLabel ] != "True" {
2731+ t .Errorf ("expected OADP operator label to be True" )
2732+ }
2733+ }
2734+ })
2735+ }
2736+ }
0 commit comments