github.com/percona/percona-xtradb-cluster-operator@v1.14.0/pkg/controller/pxcrestore/helpers_test.go (about) 1 package pxcrestore 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 corev1 "k8s.io/api/core/v1" 9 "k8s.io/apimachinery/pkg/runtime" 10 "k8s.io/apimachinery/pkg/util/yaml" 11 "k8s.io/client-go/kubernetes/scheme" 12 "sigs.k8s.io/controller-runtime/pkg/client" 13 "sigs.k8s.io/controller-runtime/pkg/client/fake" //nolint 14 15 api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" 16 fakestorage "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/storage/fake" 17 ) 18 19 func readDefaultCR(t *testing.T, name, namespace string) *api.PerconaXtraDBCluster { 20 t.Helper() 21 22 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "cr.yaml")) 23 if err != nil { 24 t.Fatal(err) 25 } 26 27 cr := &api.PerconaXtraDBCluster{} 28 29 if err := yaml.Unmarshal(data, cr); err != nil { 30 t.Fatal(err) 31 } 32 33 cr.Name = name 34 cr.Namespace = namespace 35 cr.Spec.InitImage = "perconalab/percona-xtradb-cluster-operator:main" 36 b := false 37 cr.Spec.PXC.AutoRecovery = &b 38 return cr 39 } 40 41 func readDefaultCRSecret(t *testing.T, name, namespace string) *corev1.Secret { 42 t.Helper() 43 44 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "secrets.yaml")) 45 if err != nil { 46 t.Fatal(err) 47 } 48 49 secret := new(corev1.Secret) 50 51 if err := yaml.Unmarshal(data, secret); err != nil { 52 t.Fatal(err) 53 } 54 55 secret.Name = name 56 secret.Namespace = namespace 57 return secret 58 } 59 60 func readDefaultBackup(t *testing.T, name, namespace string) *api.PerconaXtraDBClusterBackup { 61 t.Helper() 62 63 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "backup", "backup.yaml")) 64 if err != nil { 65 t.Fatal(err) 66 } 67 68 cr := &api.PerconaXtraDBClusterBackup{} 69 70 if err := yaml.Unmarshal(data, cr); err != nil { 71 t.Fatal(err) 72 } 73 74 cr.Name = name 75 cr.Namespace = namespace 76 return cr 77 } 78 79 func readDefaultS3Secret(t *testing.T, name, namespace string) *corev1.Secret { 80 t.Helper() 81 82 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "backup", "backup-secret-s3.yaml")) 83 if err != nil { 84 t.Fatal(err) 85 } 86 87 secret := new(corev1.Secret) 88 89 if err := yaml.Unmarshal(data, secret); err != nil { 90 t.Fatal(err) 91 } 92 93 secret.Name = name 94 secret.Namespace = namespace 95 return secret 96 } 97 98 func readDefaultAzureSecret(t *testing.T, name, namespace string) *corev1.Secret { 99 t.Helper() 100 101 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "backup", "backup-secret-azure.yaml")) 102 if err != nil { 103 t.Fatal(err) 104 } 105 106 secret := new(corev1.Secret) 107 108 if err := yaml.Unmarshal(data, secret); err != nil { 109 t.Fatal(err) 110 } 111 112 secret.Name = name 113 secret.Namespace = namespace 114 return secret 115 } 116 117 func readDefaultRestore(t *testing.T, name, namespace string) *api.PerconaXtraDBClusterRestore { 118 t.Helper() 119 120 data, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "backup", "restore.yaml")) 121 if err != nil { 122 t.Fatal(err) 123 } 124 125 cr := &api.PerconaXtraDBClusterRestore{} 126 127 if err := yaml.Unmarshal(data, cr); err != nil { 128 t.Fatal(err) 129 } 130 131 cr.Name = name 132 cr.Namespace = namespace 133 return cr 134 } 135 136 func reconciler(cl client.Client) *ReconcilePerconaXtraDBClusterRestore { 137 return &ReconcilePerconaXtraDBClusterRestore{ 138 client: cl, 139 scheme: cl.Scheme(), 140 newStorageClientFunc: fakestorage.NewFakeClient, 141 } 142 } 143 144 // buildFakeClient creates a fake client to mock API calls with the mock objects 145 func buildFakeClient(objs ...runtime.Object) client.Client { 146 s := scheme.Scheme 147 148 s.AddKnownTypes(api.SchemeGroupVersion, new(api.PerconaXtraDBClusterRestore)) 149 s.AddKnownTypes(api.SchemeGroupVersion, new(api.PerconaXtraDBClusterBackup)) 150 s.AddKnownTypes(api.SchemeGroupVersion, new(api.PerconaXtraDBCluster)) 151 152 cl := fake.NewClientBuilder(). 153 WithScheme(s). 154 WithRuntimeObjects(objs...). 155 WithStatusSubresource(&api.PerconaXtraDBClusterRestore{}). 156 Build() 157 158 return cl 159 } 160 161 func updateResource[T runtime.Object](res runtime.Object, f func(T)) T { 162 obj := res.DeepCopyObject().(T) 163 f(obj) 164 return obj 165 }