Add UT for pkg/cmd/cli/backup (#6400)

Signed-off-by: danfengl <danfengl@vmware.com>
This commit is contained in:
danfengliu
2023-06-21 11:10:13 +08:00
committed by GitHub
parent 6f3adcf728
commit ef443fece0
33 changed files with 2984 additions and 32 deletions
+112
View File
@@ -17,12 +17,28 @@ limitations under the License.
package backuplocation
import (
"fmt"
"reflect"
"strings"
"testing"
"time"
flag "github.com/spf13/pflag"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
veleroflag "github.com/vmware-tanzu/velero/pkg/cmd/util/flag"
"github.com/vmware-tanzu/velero/pkg/test"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
factorymocks "github.com/vmware-tanzu/velero/pkg/client/mocks"
versionedmocks "github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned/mocks"
"github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned/scheme"
velerov1mocks "github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned/typed/velero/v1/mocks"
)
func TestBuildBackupStorageLocationSetsNamespace(t *testing.T) {
@@ -87,3 +103,99 @@ func TestBuildBackupStorageLocationSetsLabels(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, map[string]string{"key": "value"}, bsl.Labels)
}
func TestCreateCommand_Run(t *testing.T) {
// create a factory
f := &factorymocks.Factory{}
// create command
c := NewCreateCommand(f, "")
assert.Equal(t, "Create a backup storage location", c.Short)
// create a CreateOptions with full options set and then run this backup command
name := "bsl-name-to-be-created"
provider := "aws"
bucket := "velero123456"
credential := veleroflag.NewMap()
credential.Set("secret=a")
defaultBackupStorageLocation := true
prefix := "builds"
backupSyncPeriod := "1m30s"
validationFrequency := "128h1m6s"
bslConfig := veleroflag.NewMap()
bslConfigStr := "region=minio"
bslConfig.Set(bslConfigStr)
labels := "a=too,b=woo"
caCertFile := "bsl-name-1"
accessMode := "ReadWrite"
flags := new(flag.FlagSet)
o := NewCreateOptions()
o.BindFlags(flags)
flags.Parse([]string{"--provider", provider})
flags.Parse([]string{"--bucket", bucket})
flags.Parse([]string{"--credential", credential.String()})
flags.Parse([]string{"--default"})
flags.Parse([]string{"--prefix", prefix})
flags.Parse([]string{"--backup-sync-period", backupSyncPeriod})
flags.Parse([]string{"--validation-frequency", validationFrequency})
flags.Parse([]string{"--config", bslConfigStr})
flags.Parse([]string{"--labels", labels})
flags.Parse([]string{"--cacert", caCertFile})
flags.Parse([]string{"--access-mode", accessMode})
args := []string{name, "arg2"}
backups := &velerov1mocks.BackupInterface{}
veleroV1 := &velerov1mocks.VeleroV1Interface{}
client := &versionedmocks.Interface{}
bk := &velerov1api.Backup{}
kbclient := fake.NewClientBuilder().WithScheme(scheme.Scheme).Build()
backups.On("Create", mock.Anything, mock.Anything, mock.Anything).Return(bk, nil)
veleroV1.On("Backups", mock.Anything).Return(backups, nil)
client.On("VeleroV1").Return(veleroV1, nil)
f.On("Client").Return(client, nil)
f.On("Namespace").Return(mock.Anything)
f.On("KubebuilderClient").Return(kbclient, nil)
o.Complete(args, f)
e := o.Validate(c, args, f)
assert.Equal(t, e, nil)
e = o.Run(c, f)
assert.Contains(t, e.Error(), fmt.Sprintf("%s: no such file or directory", caCertFile))
// verify all options are set as expected
assert.Equal(t, name, o.Name)
assert.Equal(t, provider, o.Provider)
assert.Equal(t, bucket, o.Bucket)
assert.Equal(t, true, reflect.DeepEqual(credential, o.Credential))
assert.Equal(t, defaultBackupStorageLocation, o.DefaultBackupStorageLocation)
assert.Equal(t, prefix, o.Prefix)
assert.Equal(t, backupSyncPeriod, o.BackupSyncPeriod.String())
assert.Equal(t, validationFrequency, o.ValidationFrequency.String())
assert.Equal(t, true, reflect.DeepEqual(bslConfig, o.Config))
assert.Equal(t, true, test.CompareSlice(strings.Split(labels, ","), strings.Split(o.Labels.String(), ",")))
assert.Equal(t, caCertFile, o.CACertFile)
assert.Equal(t, accessMode, o.AccessMode.String())
// create the other create command without fromSchedule option for Run() other branches
c = NewCreateCommand(f, "velero backup-location create")
assert.Equal(t, "Create a backup storage location", c.Short)
o = NewCreateOptions()
o.Labels.Set("velero.io/test=true")
args = []string{"backup-name-2", "arg2"}
o.Complete(args, f)
e = o.Run(c, f)
assert.NoError(t, e)
c.SetArgs([]string{"bsl-1", "--provider=aws", "--bucket=bk1", "--default"})
e = c.Execute()
assert.NoError(t, e)
}