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,
|
test.col,
|
||||||
fault.New(true),
|
fault.New(true),
|
||||||
count.New())
|
count.New())
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.Error(t, err, clues.ToCore(err))
|
||||||
assert.NotNil(t, deets)
|
assert.Nil(t, deets)
|
||||||
|
|
||||||
stats := suite.ctrl.Wait()
|
|
||||||
assert.Zero(t, stats.Objects)
|
|
||||||
assert.Zero(t, stats.Folders)
|
|
||||||
assert.Zero(t, stats.Successes)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -271,7 +271,9 @@ func Wrap(ctx context.Context, e error, msg string) *clues.Err {
|
|||||||
e = clues.Stack(e, clues.New(mainMsg))
|
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
|
// 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))
|
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
|
// stackReq is a helper function that extracts ODataError metadata from
|
||||||
|
|||||||
@ -796,7 +796,7 @@ func createRestoreFolders(
|
|||||||
driveID = drivePath.DriveID
|
driveID = drivePath.DriveID
|
||||||
folders = restoreDir.Elements()
|
folders = restoreDir.Elements()
|
||||||
location = path.Builder{}.Append(driveID)
|
location = path.Builder{}.Append(driveID)
|
||||||
parentFolderID = caches.DriveIDToDriveInfo[drivePath.DriveID].id
|
parentFolderID = caches.DriveIDToDriveInfo[drivePath.DriveID].rootFolderID
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx = clues.Add(
|
ctx = clues.Add(
|
||||||
|
|||||||
@ -38,6 +38,10 @@ func (ctrl *Controller) ConsumeRestoreCollections(
|
|||||||
ctx = graph.BindRateLimiterConfig(ctx, graph.LimiterCfg{Service: sels.PathService()})
|
ctx = graph.BindRateLimiterConfig(ctx, graph.LimiterCfg{Service: sels.PathService()})
|
||||||
ctx = clues.Add(ctx, "restore_config", restoreCfg) // TODO(rkeepers): needs PII control
|
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 (
|
var (
|
||||||
status *support.ControllerOperationStatus
|
status *support.ControllerOperationStatus
|
||||||
deets = &details.Builder{}
|
deets = &details.Builder{}
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
|
||||||
inMock "github.com/alcionai/corso/src/internal/common/idname/mock"
|
inMock "github.com/alcionai/corso/src/internal/common/idname/mock"
|
||||||
"github.com/alcionai/corso/src/internal/data"
|
"github.com/alcionai/corso/src/internal/data"
|
||||||
"github.com/alcionai/corso/src/internal/events"
|
"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() {
|
func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoBackup() {
|
||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
|
||||||
|
|||||||
@ -218,6 +218,10 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointWithAdvancedO
|
|||||||
func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives() {
|
func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives() {
|
||||||
t := suite.T()
|
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)
|
ctx, flush := tester.NewContext(t)
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
@ -282,13 +286,14 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
|||||||
ctx, flush := tester.NewContext(t)
|
ctx, flush := tester.NewContext(t)
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
md.SetName(ptr.To("some other name"))
|
patchBody := models.NewDrive()
|
||||||
|
patchBody.SetName(ptr.To("some other name"))
|
||||||
|
|
||||||
md, err = graphClient.
|
md, err = graphClient.
|
||||||
Drives().
|
Drives().
|
||||||
ByDriveId(driveID).
|
ByDriveId(driveID).
|
||||||
Patch(ctx, md, nil)
|
Patch(ctx, patchBody, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||||
|
|
||||||
var (
|
var (
|
||||||
mb = evmock.NewBus()
|
mb = evmock.NewBus()
|
||||||
@ -316,7 +321,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
|||||||
ByDriveItemId(rootFolderID).
|
ByDriveItemId(rootFolderID).
|
||||||
Children().
|
Children().
|
||||||
Get(ctx, nil)
|
Get(ctx, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||||
|
|
||||||
items := resp.GetValue()
|
items := resp.GetValue()
|
||||||
assert.Len(t, items, 2)
|
assert.Len(t, items, 2)
|
||||||
@ -339,7 +344,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
|||||||
Drives().
|
Drives().
|
||||||
ByDriveId(driveID).
|
ByDriveId(driveID).
|
||||||
Delete(ctx, nil)
|
Delete(ctx, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||||
|
|
||||||
var (
|
var (
|
||||||
mb = evmock.NewBus()
|
mb = evmock.NewBus()
|
||||||
@ -393,7 +398,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
|||||||
ByDriveItemId(rootFolderID).
|
ByDriveItemId(rootFolderID).
|
||||||
Children().
|
Children().
|
||||||
Get(ctx, nil)
|
Get(ctx, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||||
|
|
||||||
items := resp.GetValue()
|
items := resp.GetValue()
|
||||||
assert.Len(t, items, 1)
|
assert.Len(t, items, 1)
|
||||||
@ -436,7 +441,7 @@ func (suite *SharePointRestoreIntgSuite) TestRestore_Run_sharepointDeletedDrives
|
|||||||
ByDriveItemId(rootFolderID).
|
ByDriveItemId(rootFolderID).
|
||||||
Children().
|
Children().
|
||||||
Get(ctx, nil)
|
Get(ctx, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(graph.Stack(ctx, err)))
|
||||||
|
|
||||||
items := resp.GetValue()
|
items := resp.GetValue()
|
||||||
assert.Len(t, items, 2)
|
assert.Len(t, items, 2)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user