From 3a09a2812e3f19c751fe8661d511b32b9d6af2b7 Mon Sep 17 00:00:00 2001 From: Mustafa Elbehery Date: Wed, 10 Jul 2024 03:39:19 +0200 Subject: [PATCH] add unit test --- pkg/cmd/backuprestore/backupnoconfig.go | 53 ++++++++++++++------ pkg/cmd/backuprestore/backupnoconfig_test.go | 30 +++++++++++ 2 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 pkg/cmd/backuprestore/backupnoconfig_test.go diff --git a/pkg/cmd/backuprestore/backupnoconfig.go b/pkg/cmd/backuprestore/backupnoconfig.go index 64f4604583..33b8022719 100644 --- a/pkg/cmd/backuprestore/backupnoconfig.go +++ b/pkg/cmd/backuprestore/backupnoconfig.go @@ -10,10 +10,11 @@ import ( "strings" backupv1alpha1 "github.com/openshift/api/config/v1alpha1" - configversionedclientv1alpha1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1" - prune_backups "github.com/openshift/cluster-etcd-operator/pkg/cmd/prune-backups" + backupv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1" + prune "github.com/openshift/cluster-etcd-operator/pkg/cmd/prune-backups" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/tools/clientcmd" "k8s.io/klog/v2" @@ -65,30 +66,54 @@ func (b *backupNoConfig) Validate() error { } func (b *backupNoConfig) Run() error { - if err := b.extractBackupConfigs(); err != nil { + backupsClient, err := b.getBackupClient() + if err != nil { return err } - go b.scheduleBackup() - go b.scheduleBackupPrune() + if err = b.extractBackupConfigs(backupsClient); err != nil { + return err + } + + var errs []error + go func() { + err := b.scheduleBackup() + if err != nil { + errs = append(errs, err) + } + }() + go func() { + err := b.scheduleBackupPrune() + if err != nil { + errs = append(errs, err) + } + }() + + if len(errs) > 0 { + return kerrors.NewAggregate(errs) + } return nil } -func (b *backupNoConfig) extractBackupConfigs() error { +func (b *backupNoConfig) getBackupClient() (backupv1client.BackupsGetter, error) { kubeConfig, err := clientcmd.BuildConfigFromFlags("", b.kubeConfig) if err != nil { bErr := fmt.Errorf("error loading kubeconfig: %v", err) klog.Error(bErr) - return bErr + return nil, bErr } - backupsClient, err := configversionedclientv1alpha1.NewForConfig(kubeConfig) + backupsClient, err := backupv1client.NewForConfig(kubeConfig) if err != nil { bErr := fmt.Errorf("error creating etcd backups client: %v", err) klog.Error(bErr) - return bErr + return nil, bErr } + return backupsClient, nil +} + +func (b *backupNoConfig) extractBackupConfigs(backupsClient backupv1client.BackupsGetter) error { backups, err := backupsClient.Backups().List(context.Background(), v1.ListOptions{}) if err != nil { lErr := fmt.Errorf("could not list backup CRDs, error was: [%v]", err) @@ -168,23 +193,23 @@ func (b *backupNoConfig) copySnapshot() error { func (b *backupNoConfig) pruneBackups() error { switch b.retention.RetentionType { - case prune_backups.RetentionTypeNone: + case prune.RetentionTypeNone: klog.Info("no retention policy specified") return nil - case prune_backups.RetentionTypeNumber: + case prune.RetentionTypeNumber: if b.retention.RetentionNumber == nil { err := fmt.Errorf("retention policy RetentionTypeNumber requires RetentionNumberConfig") klog.Error(err) return err } - return prune_backups.Retain(b.retention) - case prune_backups.RetentionTypeSize: + return prune.Retain(b.retention) + case prune.RetentionTypeSize: if b.retention.RetentionSize == nil { err := fmt.Errorf("retention policy RetentionTypeSize requires RetentionSizeConfig") klog.Error(err) return err } - return prune_backups.Retain(b.retention) + return prune.Retain(b.retention) default: err := fmt.Errorf("illegal retention policy type: [%v]", b.retention.RetentionType) klog.Error(err) diff --git a/pkg/cmd/backuprestore/backupnoconfig_test.go b/pkg/cmd/backuprestore/backupnoconfig_test.go new file mode 100644 index 0000000000..6ab183b678 --- /dev/null +++ b/pkg/cmd/backuprestore/backupnoconfig_test.go @@ -0,0 +1,30 @@ +package backuprestore + +import ( + "testing" + + backupv1alpha1 "github.com/openshift/api/config/v1alpha1" + fake "github.com/openshift/client-go/config/clientset/versioned/fake" + "github.com/stretchr/testify/require" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +func TestBackupNoConfig_extractBackupConfigs(t *testing.T) { + backup := backupv1alpha1.Backup{ObjectMeta: v1.ObjectMeta{Name: "test-backup"}, + Spec: backupv1alpha1.BackupSpec{ + EtcdBackupSpec: backupv1alpha1.EtcdBackupSpec{ + Schedule: "20 4 * * *", + TimeZone: "UTC", + RetentionPolicy: backupv1alpha1.RetentionPolicy{ + RetentionType: backupv1alpha1.RetentionTypeNumber, + RetentionNumber: &backupv1alpha1.RetentionNumberConfig{MaxNumberOfBackups: 5}}, + PVCName: "backup-happy-path-pvc"}}} + + operatorFake := fake.NewSimpleClientset([]runtime.Object{&backup}...) + + b := &backupNoConfig{} + err := b.extractBackupConfigs(operatorFake.ConfigV1alpha1()) + require.NoError(t, err) + require.Equal(t, "20 4 * * *", b.schedule) +}