fix up tests, apply latest design
This commit is contained in:
parent
c805c8f8e5
commit
96b9f752ba
@ -6,7 +6,6 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/alcionai/clues"
|
||||
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||
@ -690,8 +689,6 @@ func (c *Collections) PopulateDriveCollections(
|
||||
el = errs.Local()
|
||||
newPrevPaths = map[string]string{}
|
||||
invalidPrevDelta = len(prevDeltaLink) == 0
|
||||
ch = make(chan api.NextPage[models.DriveItemable], 1)
|
||||
wg = sync.WaitGroup{}
|
||||
|
||||
// currPrevPaths is used to identify which collection a
|
||||
// file belongs to. This is useful to delete a file from the
|
||||
@ -705,25 +702,30 @@ func (c *Collections) PopulateDriveCollections(
|
||||
maps.Copy(newPrevPaths, oldPrevPaths)
|
||||
}
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
pager := c.handler.EnumerateDriveItemsDelta(
|
||||
ctx,
|
||||
driveID,
|
||||
prevDeltaLink,
|
||||
api.CallConfig{
|
||||
Select: api.DefaultDriveItemProps(),
|
||||
})
|
||||
|
||||
for pg := range ch {
|
||||
page, reset, done := pager.NextPage()
|
||||
for ; !done; page, reset, done = pager.NextPage() {
|
||||
if el.Failure() != nil {
|
||||
// exhaust the channel to ensure it closes
|
||||
continue
|
||||
break
|
||||
}
|
||||
|
||||
if pg.Reset {
|
||||
if reset {
|
||||
newPrevPaths = map[string]string{}
|
||||
currPrevPaths = map[string]string{}
|
||||
c.CollectionMap[driveID] = map[string]*Collection{}
|
||||
invalidPrevDelta = true
|
||||
}
|
||||
|
||||
for _, item := range pg.Items {
|
||||
for _, item := range page {
|
||||
if el.Failure() != nil {
|
||||
continue
|
||||
break
|
||||
}
|
||||
|
||||
err := c.processItem(
|
||||
@ -742,21 +744,12 @@ func (c *Collections) PopulateDriveCollections(
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
|
||||
du, err := c.handler.EnumerateDriveItemsDelta(
|
||||
ctx,
|
||||
ch,
|
||||
driveID,
|
||||
prevDeltaLink)
|
||||
du, err := pager.Results()
|
||||
if err != nil {
|
||||
return du, nil, clues.Stack(err)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
return du, newPrevPaths, el.Failure()
|
||||
}
|
||||
|
||||
|
||||
@ -743,13 +743,13 @@ func (suite *OneDriveCollectionsUnitSuite) TestPopulateDriveCollections() {
|
||||
errs = fault.New(true)
|
||||
)
|
||||
|
||||
mbh.DriveItemEnumeration = mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
mbh.DriveItemEnumeration = mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID: {
|
||||
{Items: test.items},
|
||||
Pages: []mock.NextPage{{Items: test.items}},
|
||||
DeltaUpdate: du,
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{driveID: du},
|
||||
}
|
||||
|
||||
sel := selectors.NewOneDriveBackup([]string{user})
|
||||
@ -1226,7 +1226,7 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
table := []struct {
|
||||
name string
|
||||
drives []models.Driveable
|
||||
enumerator mock.EnumeratesDriveItemsDelta[models.DriveItemable]
|
||||
enumerator mock.EnumerateItemsDeltaByDrive
|
||||
canUsePreviousBackup bool
|
||||
errCheck assert.ErrorAssertionFunc
|
||||
prevFolderPaths map[string]map[string]string
|
||||
@ -1245,19 +1245,18 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_DelFileOnly_NoFolders_NoErrors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"), // will be present, not needed
|
||||
delItem("file", driveBasePath1, "root", true, false, false),
|
||||
},
|
||||
}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1280,19 +1279,18 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_NoFolderDeltas_NoErrors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("file", "file", driveBasePath1, "root", true, false, false),
|
||||
},
|
||||
}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1315,20 +1313,19 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_NoErrors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
},
|
||||
}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1355,21 +1352,20 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_NoErrors_FileRenamedMultiple",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
driveItem("file", "file2", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
},
|
||||
}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1396,21 +1392,18 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_NoErrors_FileMovedMultiple",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
driveItem("file", "file2", driveBasePath1, "root", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1439,20 +1432,17 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_EmptyDelta_NoErrors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: empty, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: empty, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1479,9 +1469,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_TwoItemPages_NoErrors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -1497,11 +1488,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1530,9 +1519,11 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_TwoItemPages_WithReset",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -1559,11 +1550,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1592,9 +1581,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_TwoItemPages_WithResetCombinedWithItems",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -1618,11 +1608,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1654,28 +1642,25 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
drive1,
|
||||
drive2,
|
||||
},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
driveID2: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root2"),
|
||||
driveItem("folder2", "folder", driveBasePath2, "root2", false, true, false),
|
||||
driveItem("file2", "file", driveBasePath2+"/folder", "folder2", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta2, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
driveID2: {URL: delta2, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1717,28 +1702,25 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
drive1,
|
||||
drive2,
|
||||
},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath1, "root", false, true, false),
|
||||
driveItem("file", "file", driveBasePath1+"/folder", "folder", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
driveID2: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
driveItem("folder", "folder", driveBasePath2, "root", false, true, false),
|
||||
driveItem("file2", "file", driveBasePath2+"/folder", "folder", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta2, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
driveID2: {URL: delta2, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1777,16 +1759,14 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_Errors",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{}},
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{}}},
|
||||
DeltaUpdate: api.DeltaUpdate{},
|
||||
Err: assert.AnError,
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {},
|
||||
},
|
||||
Err: map[string]error{driveID1: assert.AnError},
|
||||
},
|
||||
canUsePreviousBackup: false,
|
||||
errCheck: assert.Error,
|
||||
@ -1801,9 +1781,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_InvalidPrevDelta_DeleteNonExistentFolder",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{},
|
||||
Reset: true,
|
||||
@ -1816,11 +1797,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1854,9 +1833,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_InvalidPrevDeltaCombinedWithItems_DeleteNonExistentFolder",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{},
|
||||
Reset: true,
|
||||
@ -1869,11 +1849,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1907,9 +1885,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive_OneItemPage_InvalidPrevDelta_AnotherFolderAtDeletedLocation",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
// on the first page, if this is the total data, we'd expect both folder and folder2
|
||||
// since new previousPaths merge with the old previousPaths.
|
||||
@ -1933,11 +1912,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -1974,9 +1951,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "OneDrive Two Item Pages with Malware",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -1994,11 +1972,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2028,9 +2004,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Deleted Folder In New Results With Invalid Delta",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -2053,11 +2030,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta2, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta2, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2092,23 +2067,20 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Folder Delete After Invalid Delta",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{
|
||||
Pages: []mock.NextPage{{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
delItem("folder", driveBasePath1, "root", false, true, false),
|
||||
},
|
||||
Reset: true,
|
||||
}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
prevFolderPaths: map[string]map[string]string{
|
||||
@ -2138,9 +2110,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Item Delete After Invalid Delta",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -2149,11 +2122,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
Reset: true,
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2181,9 +2152,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Folder Made And Deleted",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -2199,11 +2171,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta2, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta2, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2229,9 +2199,10 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Item Made And Deleted",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
Pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
@ -2246,11 +2217,9 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2279,19 +2248,16 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Random Folder Delete",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
delItem("folder", driveBasePath1, "root", false, true, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2317,19 +2283,16 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "One Drive Random Item Delete",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"),
|
||||
delItem("file", driveBasePath1, "root", true, false, false),
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta, Reset: true},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta, Reset: true},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
@ -2355,18 +2318,15 @@ func (suite *OneDriveCollectionsUnitSuite) TestGet() {
|
||||
{
|
||||
name: "TwoPriorDrives_OneTombstoned",
|
||||
drives: []models.Driveable{drive1},
|
||||
enumerator: mock.EnumeratesDriveItemsDelta[models.DriveItemable]{
|
||||
Pages: map[string][]api.NextPage[models.DriveItemable]{
|
||||
enumerator: mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID1: {
|
||||
{Items: []models.DriveItemable{
|
||||
Pages: []mock.NextPage{{Items: []models.DriveItemable{
|
||||
driveRootItem("root"), // will be present
|
||||
}},
|
||||
}}},
|
||||
DeltaUpdate: api.DeltaUpdate{URL: delta},
|
||||
},
|
||||
},
|
||||
DeltaUpdate: map[string]api.DeltaUpdate{
|
||||
driveID1: {URL: delta},
|
||||
},
|
||||
Err: map[string]error{driveID1: nil},
|
||||
},
|
||||
canUsePreviousBackup: true,
|
||||
errCheck: assert.NoError,
|
||||
|
||||
@ -165,7 +165,8 @@ func (uc *urlCache) refreshCache(
|
||||
Select: api.URLCacheDriveItemProps(),
|
||||
})
|
||||
|
||||
for page, reset, done := pager.NextPage(); !done; {
|
||||
page, reset, done := pager.NextPage()
|
||||
for ; !done; page, reset, done = pager.NextPage() {
|
||||
err := uc.updateCache(
|
||||
ctx,
|
||||
page,
|
||||
|
||||
@ -204,7 +204,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
|
||||
table := []struct {
|
||||
name string
|
||||
pages []mock.NextPage[models.DriveItemable]
|
||||
pages []mock.NextPage
|
||||
pagerErr error
|
||||
expectedItemProps map[string]itemProps
|
||||
expectErr assert.ErrorAssertionFunc
|
||||
@ -212,7 +212,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
}{
|
||||
{
|
||||
name: "single item in cache",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
}},
|
||||
@ -232,7 +232,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "multiple items in cache",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
fileItem("2", "file2", "root", "root", "https://dummy2.com", false),
|
||||
@ -272,7 +272,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "multiple pages",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
fileItem("2", "file2", "root", "root", "https://dummy2.com", false),
|
||||
@ -314,7 +314,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "multiple pages with resets",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
@ -372,7 +372,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "multiple pages with resets and combo reset+items in page",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{
|
||||
Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
@ -426,7 +426,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "duplicate items with potentially new urls",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
fileItem("2", "file2", "root", "root", "https://dummy2.com", false),
|
||||
@ -458,7 +458,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "deleted items",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
fileItem("2", "file2", "root", "root", "https://dummy2.com", false),
|
||||
@ -484,7 +484,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "item not found in cache",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
}},
|
||||
@ -501,7 +501,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
},
|
||||
{
|
||||
name: "delta query error",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{}},
|
||||
},
|
||||
pagerErr: errors.New("delta query error"),
|
||||
@ -519,7 +519,7 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
|
||||
{
|
||||
name: "folder item",
|
||||
pages: []mock.NextPage[models.DriveItemable]{
|
||||
pages: []mock.NextPage{
|
||||
{Items: []models.DriveItemable{
|
||||
fileItem("1", "file1", "root", "root", "https://dummy1.com", false),
|
||||
driveItem("2", "folder2", "root", "root", false, true, false),
|
||||
@ -548,8 +548,8 @@ func (suite *URLCacheUnitSuite) TestGetItemProperties() {
|
||||
defer flush()
|
||||
|
||||
medi := mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]mock.DriveItemsDeltaPager{
|
||||
driveID: mock.DriveItemsDeltaPager{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID: {
|
||||
Pages: test.pages,
|
||||
Err: test.pagerErr,
|
||||
DeltaUpdate: api.DeltaUpdate{URL: deltaString},
|
||||
|
||||
@ -298,7 +298,7 @@ type NextPage struct {
|
||||
}
|
||||
|
||||
type EnumerateItemsDeltaByDrive struct {
|
||||
DrivePagers map[string]DriveItemsDeltaPager
|
||||
DrivePagers map[string]*DriveItemsDeltaPager
|
||||
}
|
||||
|
||||
var _ api.NextPageResulter[models.DriveItemable] = &DriveItemsDeltaPager{}
|
||||
@ -316,7 +316,7 @@ func (edibd EnumerateItemsDeltaByDrive) EnumerateDriveItemsDelta(
|
||||
_ api.CallConfig,
|
||||
) api.NextPageResulter[models.DriveItemable] {
|
||||
didp := edibd.DrivePagers[driveID]
|
||||
return &didp
|
||||
return didp
|
||||
}
|
||||
|
||||
func (edi *DriveItemsDeltaPager) NextPage() ([]models.DriveItemable, bool, bool) {
|
||||
@ -325,7 +325,7 @@ func (edi *DriveItemsDeltaPager) NextPage() ([]models.DriveItemable, bool, bool)
|
||||
}
|
||||
|
||||
np := edi.Pages[edi.Idx]
|
||||
edi.Idx++
|
||||
edi.Idx = edi.Idx + 1
|
||||
|
||||
return np.Items, np.Reset, false
|
||||
}
|
||||
|
||||
@ -104,8 +104,8 @@ func (suite *LibrariesBackupUnitSuite) TestUpdateCollections() {
|
||||
)
|
||||
|
||||
mbh.DriveItemEnumeration = mock.EnumerateItemsDeltaByDrive{
|
||||
DrivePagers: map[string]mock.DriveItemsDeltaPager{
|
||||
driveID: mock.DriveItemsDeltaPager{
|
||||
DrivePagers: map[string]*mock.DriveItemsDeltaPager{
|
||||
driveID: {
|
||||
Pages: []mock.NextPage{{Items: test.items}},
|
||||
DeltaUpdate: du,
|
||||
},
|
||||
|
||||
@ -1,9 +1,17 @@
|
||||
package fault
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/alcionai/corso/src/cli/print"
|
||||
)
|
||||
|
||||
// AddSkipper presents an interface that allows callers to
|
||||
// write additional skipped items to the complying struct.
|
||||
type AddSkipper interface {
|
||||
AddSkip(ctx context.Context, s *Skipped)
|
||||
}
|
||||
|
||||
// skipCause identifies the well-known conditions to Skip an item. It is
|
||||
// important that skip cause enumerations do not overlap with general error
|
||||
// handling. Skips must be well known, well documented, and consistent.
|
||||
|
||||
@ -199,7 +199,8 @@ func (suite *DrivePagerIntgSuite) TestEnumerateDriveItems() {
|
||||
Select: api.DefaultDriveItemProps(),
|
||||
})
|
||||
|
||||
for page, reset, done := pager.NextPage(); !done; {
|
||||
page, reset, done := pager.NextPage()
|
||||
for ; !done; page, reset, done = pager.NextPage() {
|
||||
items = append(items, page...)
|
||||
|
||||
assert.False(t, reset, "should not reset")
|
||||
|
||||
@ -223,8 +223,9 @@ func batchEnumerateItems[T any](
|
||||
|
||||
go enumerateItems[T](ctx, pager, &npr)
|
||||
|
||||
for is, _, done := npr.NextPage(); !done; {
|
||||
items = append(items, is...)
|
||||
page, _, done := npr.NextPage()
|
||||
for ; !done; page, _, done = npr.NextPage() {
|
||||
items = append(items, page...)
|
||||
}
|
||||
|
||||
_, err := npr.Results()
|
||||
@ -346,12 +347,13 @@ func batchDeltaEnumerateItems[T any](
|
||||
|
||||
go deltaEnumerateItems[T](ctx, pager, &npr, prevDeltaLink)
|
||||
|
||||
for is, reset, done := npr.NextPage(); !done; {
|
||||
page, reset, done := npr.NextPage()
|
||||
for ; !done; page, reset, done = npr.NextPage() {
|
||||
if reset {
|
||||
results = []T{}
|
||||
}
|
||||
|
||||
results = append(results, is...)
|
||||
results = append(results, page...)
|
||||
}
|
||||
|
||||
du, err := npr.Results()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user