From 2a72335716c972d2e7435117a7de5f8702b1db55 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Fri, 10 Feb 2023 23:55:21 +0530 Subject: [PATCH] Treat empty prev delta as invalid (#2475) ## Description Empty delta values are treated as invalid and follow similar rules. ## Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [x] :clock1: Yes, but in a later PR - [ ] :no_entry: No ## Type of change - [ ] :sunflower: Feature - [x] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup ## Issue(s) * https://github.com/alcionai/corso/issues/2123 ## Test Plan - [ ] :muscle: Manual - [x] :zap: Unit test - [ ] :green_heart: E2E --- .../connector/onedrive/collections_test.go | 46 +++++++++++++++++-- src/internal/connector/onedrive/drive.go | 2 +- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/internal/connector/onedrive/collections_test.go b/src/internal/connector/onedrive/collections_test.go index da42beec5..35406c174 100644 --- a/src/internal/connector/onedrive/collections_test.go +++ b/src/internal/connector/onedrive/collections_test.go @@ -1561,8 +1561,33 @@ func (suite *OneDriveCollectionsSuite) TestGet() { c.drivePagerFunc = drivePagerFunc c.itemPagerFunc = itemPagerFunc - // TODO(ashmrtn): Allow passing previous metadata. - cols, delList, err := c.Get(ctx, nil) + mc, err := graph.MakeMetadataCollection( + tenant, + user, + path.OneDriveService, + path.FilesCategory, + []graph.MetadataCollectionEntry{ + graph.NewMetadataEntry( + graph.DeltaURLsFileName, + map[string]string{ + driveID1: "prev-delta", + driveID2: "prev-delta", + }, + ), + graph.NewMetadataEntry( + graph.PreviousPathFileName, + map[string]map[string]string{ + driveID1: {}, + driveID2: {}, + }, + ), + }, + func(*support.ConnectorOperationStatus) {}, + ) + assert.NoError(t, err, "creating metadata collection") + + prevMetadata := []data.RestoreCollection{data.NotFoundRestoreCollection{Collection: mc}} + cols, delList, err := c.Get(ctx, prevMetadata) test.errCheck(t, err) if err != nil { @@ -1688,12 +1713,14 @@ func getDeltaError() error { func (suite *OneDriveCollectionsSuite) TestCollectItems() { next := "next" delta := "delta" + prevDelta := "prev-delta" table := []struct { name string items []deltaPagerResult deltaURL string prevDeltaSuccess bool + prevDelta string err error }{ { @@ -1703,6 +1730,16 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() { {deltaLink: &delta}, }, prevDeltaSuccess: true, + prevDelta: prevDelta, + }, + { + name: "empty prev delta", + deltaURL: delta, + items: []deltaPagerResult{ + {deltaLink: &delta}, + }, + prevDeltaSuccess: false, + prevDelta: "", }, { name: "next then delta", @@ -1712,6 +1749,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() { {deltaLink: &delta}, }, prevDeltaSuccess: true, + prevDelta: prevDelta, }, { name: "invalid prev delta", @@ -1720,6 +1758,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() { {err: getDeltaError()}, {deltaLink: &delta}, // works on retry }, + prevDelta: prevDelta, prevDeltaSuccess: false, }, { @@ -1728,6 +1767,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() { {nextLink: &next}, {err: assert.AnError}, }, + prevDelta: prevDelta, prevDeltaSuccess: true, err: assert.AnError, }, @@ -1759,7 +1799,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() { "", "General", collectorFunc, - "", + test.prevDelta, ) require.ErrorIs(suite.T(), err, test.err, "delta fetch err") diff --git a/src/internal/connector/onedrive/drive.go b/src/internal/connector/onedrive/drive.go index 471a42aad..0418262ae 100644 --- a/src/internal/connector/onedrive/drive.go +++ b/src/internal/connector/onedrive/drive.go @@ -194,7 +194,7 @@ func collectItems( oldPaths = map[string]string{} newPaths = map[string]string{} excluded = map[string]struct{}{} - invalidPrevDelta = false + invalidPrevDelta = len(prevDelta) == 0 ) maps.Copy(newPaths, oldPaths)