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  }