add tests for deleted drives
add tests for restoring to deleted drives, and fix up some other tests and code at the same time.
This commit is contained in:
parent
919d59dd69
commit
77a70e88a9
@ -475,13 +475,8 @@ func (suite *ControllerIntegrationSuite) TestEmptyCollections() {
|
||||
test.col,
|
||||
fault.New(true),
|
||||
count.New())
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
assert.NotNil(t, deets)
|
||||
|
||||
stats := suite.ctrl.Wait()
|
||||
assert.Zero(t, stats.Objects)
|
||||
assert.Zero(t, stats.Folders)
|
||||
assert.Zero(t, stats.Successes)
|
||||
require.Error(t, err, clues.ToCore(err))
|
||||
assert.Nil(t, deets)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -271,7 +271,9 @@ func Wrap(ctx context.Context, e error, msg string) *clues.Err {
|
||||
e = clues.Stack(e, clues.New(mainMsg))
|
||||
}
|
||||
|
||||
return setLabels(clues.Wrap(e, msg).WithClues(ctx).With(data...), innerMsg)
|
||||
ce := clues.Wrap(e, msg).WithClues(ctx).With(data...).WithTrace(1)
|
||||
|
||||
return setLabels(ce, innerMsg)
|
||||
}
|
||||
|
||||
// Stack is a helper function that extracts ODataError metadata from
|
||||
@ -292,7 +294,9 @@ func Stack(ctx context.Context, e error) *clues.Err {
|
||||
e = clues.Stack(e, clues.New(mainMsg))
|
||||
}
|
||||
|
||||
return setLabels(clues.Stack(e).WithClues(ctx).With(data...), innerMsg)
|
||||
ce := clues.Stack(e).WithClues(ctx).With(data...).WithTrace(1)
|
||||
|
||||
return setLabels(ce, innerMsg)
|
||||
}
|
||||
|
||||
// stackReq is a helper function that extracts ODataError metadata from
|
||||
|
||||
@ -796,7 +796,7 @@ func createRestoreFolders(
|
||||
driveID = drivePath.DriveID
|
||||
folders = restoreDir.Elements()
|
||||
location = path.Builder{}.Append(driveID)
|
||||
parentFolderID = caches.DriveIDToDriveInfo[drivePath.DriveID].id
|
||||
parentFolderID = caches.DriveIDToDriveInfo[drivePath.DriveID].rootFolderID
|
||||
)
|
||||
|
||||
ctx = clues.Add(
|
||||
|
||||
@ -38,6 +38,10 @@ func (ctrl *Controller) ConsumeRestoreCollections(
|
||||
ctx = graph.BindRateLimiterConfig(ctx, graph.LimiterCfg{Service: sels.PathService()})
|
||||
ctx = clues.Add(ctx, "restore_config", restoreCfg) // TODO(rkeepers): needs PII control
|
||||
|
||||
if len(dcs) == 0 {
|
||||
return nil, clues.New("no collections to restore")
|
||||
}
|
||||
|
||||
var (
|
||||
status *support.ControllerOperationStatus
|
||||
deets = &details.Builder{}
|
||||
|
||||
@ -10,7 +10,6 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
||||
inMock "github.com/alcionai/corso/src/internal/common/idname/mock"
|
||||
"github.com/alcionai/corso/src/internal/data"
|
||||
"github.com/alcionai/corso/src/internal/events"
|
||||
@ -372,87 +371,6 @@ func setupSharePointBackup(
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *RestoreOpIntegrationSuite) TestRestore_Run() {
|
||||
tables := []struct {
|
||||
name string
|
||||
owner string
|
||||
restoreCfg control.RestoreConfig
|
||||
getSelector func(t *testing.T, owners []string) selectors.Selector
|
||||
setup func(t *testing.T, kw *kopia.Wrapper, sw *store.Wrapper, acct account.Account, owner string) bupResults
|
||||
}{
|
||||
{
|
||||
name: "Exchange_Restore",
|
||||
owner: tconfig.M365UserID(suite.T()),
|
||||
restoreCfg: testdata.DefaultRestoreConfig(""),
|
||||
getSelector: func(t *testing.T, owners []string) selectors.Selector {
|
||||
rsel := selectors.NewExchangeRestore(owners)
|
||||
rsel.Include(rsel.AllData())
|
||||
|
||||
return rsel.Selector
|
||||
},
|
||||
setup: setupExchangeBackup,
|
||||
},
|
||||
{
|
||||
name: "SharePoint_Restore",
|
||||
owner: tconfig.M365SiteID(suite.T()),
|
||||
restoreCfg: control.DefaultRestoreConfig(dttm.SafeForTesting),
|
||||
getSelector: func(t *testing.T, owners []string) selectors.Selector {
|
||||
rsel := selectors.NewSharePointRestore(owners)
|
||||
rsel.Include(rsel.Library(tconfig.LibraryDocuments), rsel.Library(tconfig.LibraryMoreDocuments))
|
||||
|
||||
return rsel.Selector
|
||||
},
|
||||
setup: setupSharePointBackup,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tables {
|
||||
suite.Run(test.name, func() {
|
||||
var (
|
||||
t = suite.T()
|
||||
mb = evmock.NewBus()
|
||||
bup = test.setup(t, suite.kw, suite.sw, suite.acct, test.owner)
|
||||
)
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
require.NotZero(t, bup.items)
|
||||
require.NotEmpty(t, bup.backupID)
|
||||
|
||||
ro, err := NewRestoreOperation(
|
||||
ctx,
|
||||
control.Options{FailureHandling: control.FailFast},
|
||||
suite.kw,
|
||||
suite.sw,
|
||||
bup.ctrl,
|
||||
tconfig.NewM365Account(t),
|
||||
bup.backupID,
|
||||
test.getSelector(t, bup.selectorResourceOwners),
|
||||
test.restoreCfg,
|
||||
mb,
|
||||
count.New())
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
|
||||
ds, err := ro.Run(ctx)
|
||||
|
||||
require.NoError(t, err, "restoreOp.Run() %+v", clues.ToCore(err))
|
||||
require.NotEmpty(t, ro.Results, "restoreOp results")
|
||||
require.NotNil(t, ds, "restored details")
|
||||
assert.Equal(t, ro.Status, Completed, "restoreOp status")
|
||||
assert.Equal(t, ro.Results.ItemsWritten, len(ds.Items()), "item write count matches len details")
|
||||
assert.Less(t, 0, ro.Results.ItemsRead, "restore items read")
|
||||
assert.Less(t, int64(0), ro.Results.BytesRead, "bytes read")
|
||||
assert.Equal(t, 1, ro.Results.ResourceOwners, "resource Owners")
|
||||
assert.NoError(t, ro.Errors.Failure(), "non-recoverable error", clues.ToCore(ro.Errors.Failure()))
|
||||
assert.Empty(t, ro.Errors.Recovered(), "recoverable errors")
|
||||
assert.Equal(t, bup.items, ro.Results.ItemsWritten, "backup and restore wrote the same num of items")
|
||||
assert.Equal(t, 1, mb.TimesCalled[events.RestoreStart], "restore-start events")
|
||||
assert.Equal(t, 1, mb.TimesCalled[events.RestoreEnd], "restore-end events")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoBackup() {
|
||||
t := suite.T()
|
||||
|
||||
|
||||
@ -218,6 +218,10 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointWithAdvancedO
|
||||
func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives() {
|
||||
t := suite.T()
|
||||
|
||||
// despite the client having a method for drive.Patch and drive.Delete, both only return
|
||||
// the error code and message `invalidRequest`.
|
||||
t.Skip("graph api doesn't allow patch or delete on drives, so we cannot run any conditions")
|
||||
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
@ -282,13 +286,14 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
||||
ctx, flush := tester.NewContext(t)
|
||||
defer flush()
|
||||
|
||||
md.SetName(ptr.To("some other name"))
|
||||
patchBody := models.NewDrive()
|
||||
patchBody.SetName(ptr.To("some other name"))
|
||||
|
||||
md, err = graphClient.
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Patch(ctx, md, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
Patch(ctx, patchBody, nil)
|
||||
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
@ -316,7 +321,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 2)
|
||||
@ -339,7 +344,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
||||
Drives().
|
||||
ByDriveId(driveID).
|
||||
Delete(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||
|
||||
var (
|
||||
mb = evmock.NewBus()
|
||||
@ -393,7 +398,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 1)
|
||||
@ -436,7 +441,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
||||
ByDriveItemId(rootFolderID).
|
||||
Children().
|
||||
Get(ctx, nil)
|
||||
require.NoError(t, err, clues.ToCore(err))
|
||||
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||
|
||||
items := resp.GetValue()
|
||||
assert.Len(t, items, 2)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user