github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/testutil/dataprotection/backuppolicy_factory.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package dataprotection 21 22 import ( 23 corev1 "k8s.io/api/core/v1" 24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 25 26 dpv1alpha1 "github.com/1aal/kubeblocks/apis/dataprotection/v1alpha1" 27 testapps "github.com/1aal/kubeblocks/pkg/testutil/apps" 28 ) 29 30 type MockBackupPolicyFactory struct { 31 testapps.BaseFactory[dpv1alpha1.BackupPolicy, *dpv1alpha1.BackupPolicy, MockBackupPolicyFactory] 32 } 33 34 func NewBackupPolicyFactory(namespace, name string) *MockBackupPolicyFactory { 35 f := &MockBackupPolicyFactory{} 36 f.Init(namespace, name, &dpv1alpha1.BackupPolicy{}, f) 37 return f 38 } 39 40 func (f *MockBackupPolicyFactory) SetBackupRepoName(backupRepoName string) *MockBackupPolicyFactory { 41 if backupRepoName == "" { 42 f.Get().Spec.BackupRepoName = nil 43 } else { 44 f.Get().Spec.BackupRepoName = &backupRepoName 45 } 46 return f 47 } 48 49 func (f *MockBackupPolicyFactory) SetPathPrefix(pathPrefix string) *MockBackupPolicyFactory { 50 f.Get().Spec.PathPrefix = pathPrefix 51 return f 52 } 53 54 func (f *MockBackupPolicyFactory) SetBackoffLimit(backoffLimit int32) *MockBackupPolicyFactory { 55 f.Get().Spec.BackoffLimit = &backoffLimit 56 return f 57 } 58 59 func (f *MockBackupPolicyFactory) AddBackupMethod(name string, 60 snapshotVolumes bool, actionSetName string) *MockBackupPolicyFactory { 61 f.Get().Spec.BackupMethods = append(f.Get().Spec.BackupMethods, 62 dpv1alpha1.BackupMethod{ 63 Name: name, 64 SnapshotVolumes: &snapshotVolumes, 65 ActionSetName: actionSetName, 66 TargetVolumes: &dpv1alpha1.TargetVolumeInfo{}, 67 }) 68 return f 69 } 70 71 func (f *MockBackupPolicyFactory) SetBackupMethodVolumes(names []string) *MockBackupPolicyFactory { 72 f.Get().Spec.BackupMethods[len(f.Get().Spec.BackupMethods)-1].TargetVolumes.Volumes = names 73 return f 74 } 75 76 func (f *MockBackupPolicyFactory) SetBackupMethodVolumeMounts(keyAndValues ...string) *MockBackupPolicyFactory { 77 var volumeMounts []corev1.VolumeMount 78 for k, v := range testapps.WithMap(keyAndValues...) { 79 volumeMounts = append(volumeMounts, corev1.VolumeMount{ 80 Name: k, 81 MountPath: v, 82 }) 83 } 84 f.Get().Spec.BackupMethods[len(f.Get().Spec.BackupMethods)-1].TargetVolumes.VolumeMounts = volumeMounts 85 return f 86 } 87 88 func (f *MockBackupPolicyFactory) SetTarget(keyAndValues ...string) *MockBackupPolicyFactory { 89 f.Get().Spec.Target = &dpv1alpha1.BackupTarget{ 90 PodSelector: &dpv1alpha1.PodSelector{ 91 LabelSelector: &metav1.LabelSelector{ 92 MatchLabels: testapps.WithMap(keyAndValues...), 93 }, 94 }, 95 } 96 return f 97 } 98 99 func (f *MockBackupPolicyFactory) SetTargetConnectionCredential(secretName string) *MockBackupPolicyFactory { 100 f.Get().Spec.Target.ConnectionCredential = &dpv1alpha1.ConnectionCredential{ 101 SecretName: secretName, 102 UsernameKey: "username", 103 PasswordKey: "password", 104 } 105 return f 106 }