add integration tests for missing drives
This commit is contained in:
parent
8db03d4cd7
commit
919d59dd69
@ -5,6 +5,9 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/alcionai/clues"
|
||||
"github.com/google/uuid"
|
||||
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
@ -19,6 +22,8 @@ import (
|
||||
"github.com/alcionai/corso/src/internal/version"
|
||||
deeTD "github.com/alcionai/corso/src/pkg/backup/details/testdata"
|
||||
"github.com/alcionai/corso/src/pkg/control"
|
||||
ctrlTD "github.com/alcionai/corso/src/pkg/control/testdata"
|
||||
"github.com/alcionai/corso/src/pkg/count"
|
||||
"github.com/alcionai/corso/src/pkg/path"
|
||||
"github.com/alcionai/corso/src/pkg/selectors"
|
||||
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||
@ -196,7 +201,7 @@ func (suite *SharePointRestoreIntgSuite) SetupSuite() {
|
||||
}
|
||||
|
||||
func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointWithAdvancedOptions() {
|
||||
sel := selectors.NewSharePointBackup([]string{suite.its.userID})
|
||||
sel := selectors.NewSharePointBackup([]string{suite.its.siteID})
|
||||
sel.Include(selTD.SharePointBackupFolderScope(sel))
|
||||
sel.Filter(sel.Library("documents"))
|
||||
sel.DiscreteOwner = suite.its.siteID
|
||||
@ -209,3 +214,235 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointWithAdvancedO
|
||||
suite.its.siteDriveID,
|
||||
suite.its.siteDriveRootFolderID)
|
||||
}
|
||||
|
||||
func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives() {
|
||||
t := suite.T()
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
rc := ctrlTD.DefaultRestoreConfig("restore_deleted_drives")
|
||||
rc.OnCollision = control.Copy
|
||||
|
||||
// create a new drive
|
||||
md, err := suite.its.ac.Lists().PostDrive(ctx, suite.its.siteID, rc.Location)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
driveID := ptr.Val(md.GetId())
|
||||
|
||||
// get the root folder
|
||||
mdi, err := suite.its.ac.Drives().GetRootFolder(ctx, driveID)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
rootFolderID := ptr.Val(mdi.GetId())
|
||||
|
||||
// add an item to it
|
||||
itemName := uuid.NewString()
|
||||
|
||||
item := models.NewDriveItem()
|
||||
item.SetName(ptr.To(itemName + ".txt"))
|
||||
|
||||
file := models.NewFile()
|
||||
item.SetFile(file)
|
||||
|
||||
_, err = suite.its.ac.Drives().PostItemInContainer(
|
||||
ctx,
|
||||
driveID,
|
||||
rootFolderID,
|
||||
item,
|
||||
control.Copy)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
// run a backup
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
opts = control.Defaults()
|
||||
graphClient = suite.its.ac.Stable.Client()
|
||||
)
|
||||
|
||||
bsel := selectors.NewSharePointBackup([]string{suite.its.siteID})
|
||||
bsel.Include(selTD.SharePointBackupFolderScope(bsel))
|
||||
bsel.Filter(bsel.Library(rc.Location))
|
||||
bsel.DiscreteOwner = suite.its.siteID
|
||||
|
||||
bo, bod := prepNewTestBackupOp(t, ctx, mb, bsel.Selector, opts, version.Backup)
|
||||
defer bod.close(t, ctx)
|
||||
|
||||
runAndCheckBackup(t, ctx, &bo, mb, false)
|
||||
|
||||
// test cases:
|
||||
|
||||
// first test, we take the current drive and rename it.
|
||||
// the restore should find the drive by id and restore items
|
||||
// into it like normal. Due to collision handling, this should
|
||||
// create a copy of the current item.
|
||||
suite.Run("renamed drive", func() {
|
||||
t := suite.T()
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
md.SetName(ptr.To("some other name"))
|
||||
|
||||
md, err = graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Patch(ctx, md, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
ctr = count.New()
|
||||
)
|
||||
|
||||
ro, _ := prepNewTestRestoreOp(
|
||||
t,
|
||||
ctx,
|
||||
bod.st,
|
||||
bo.Results.BackupID,
|
||||
mb,
|
||||
ctr,
|
||||
bod.sel,
|
||||
opts,
|
||||
rc)
|
||||
|
||||
runAndCheckRestore(t, ctx, &ro, mb, false)
|
||||
assert.Equal(t, 1, ctr.Get(count.NewItemCreated), "restored an item")
|
||||
|
||||
resp, err := graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Items().
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 2)
|
||||
|
||||
for _, item := range items {
|
||||
assert.Contains(t, ptr.Val(item.GetName()), itemName)
|
||||
}
|
||||
})
|
||||
|
||||
// second test, we delete the drive altogether. the restore should find
|
||||
// no existing drives, but it should have the old drive's name and attempt
|
||||
// to recreate that drive by name.
|
||||
suite.Run("deleted drive", func() {
|
||||
t := suite.T()
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
err = graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Delete(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
ctr = count.New()
|
||||
)
|
||||
|
||||
ro, _ := prepNewTestRestoreOp(
|
||||
t,
|
||||
ctx,
|
||||
bod.st,
|
||||
bo.Results.BackupID,
|
||||
mb,
|
||||
ctr,
|
||||
bod.sel,
|
||||
opts,
|
||||
rc)
|
||||
|
||||
runAndCheckRestore(t, ctx, &ro, mb, false)
|
||||
assert.Equal(t, 1, ctr.Get(count.NewItemCreated), "restored an item")
|
||||
|
||||
pgr := suite.its.ac.
|
||||
Drives().
|
||||
NewSiteDrivePager(suite.its.siteID, []string{"id", "name"})
|
||||
|
||||
drives, err := api.GetAllDrives(ctx, pgr, false, -1)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
var created models.Driveable
|
||||
|
||||
for _, drive := range drives {
|
||||
if ptr.Val(drive.GetName()) == ptr.Val(created.GetName()) &&
|
||||
ptr.Val(drive.GetId()) != driveID {
|
||||
created = drive
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
require.NotNil(t, created, "found the restored drive by name")
|
||||
md = created
|
||||
driveID = ptr.Val(md.GetId())
|
||||
|
||||
mdi, err := suite.its.ac.Drives().GetRootFolder(ctx, driveID)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
rootFolderID = ptr.Val(mdi.GetId())
|
||||
|
||||
resp, err := graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Items().
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 1)
|
||||
|
||||
assert.Equal(t, ptr.Val(items[0].GetName()), itemName+".txt")
|
||||
})
|
||||
|
||||
// final test, run a follow-up restore. This should match the
|
||||
// drive we created in the prior test by name, but not by ID.
|
||||
suite.Run("different drive - same name", func() {
|
||||
t := suite.T()
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
ctr = count.New()
|
||||
)
|
||||
|
||||
ro, _ := prepNewTestRestoreOp(
|
||||
t,
|
||||
ctx,
|
||||
bod.st,
|
||||
bo.Results.BackupID,
|
||||
mb,
|
||||
ctr,
|
||||
bod.sel,
|
||||
opts,
|
||||
rc)
|
||||
|
||||
runAndCheckRestore(t, ctx, &ro, mb, false)
|
||||
|
||||
assert.Equal(t, 1, ctr.Get(count.NewItemCreated), "restored an item")
|
||||
|
||||
resp, err := graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Items().
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 2)
|
||||
|
||||
for _, item := range items {
|
||||
assert.Contains(t, ptr.Val(item.GetName()), itemName)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user