diff --git a/src/internal/connector/graph_connector_helper_test.go b/src/internal/connector/graph_connector_helper_test.go index 628c68d36..6934162ab 100644 --- a/src/internal/connector/graph_connector_helper_test.go +++ b/src/internal/connector/graph_connector_helper_test.go @@ -722,14 +722,14 @@ func permissionEqual(expected metadata.Permission, got metadata.Permission) bool return true } -func compareOneDriveItem( +func compareDriveItem( t *testing.T, expected map[string][]byte, item data.Stream, restorePermissions bool, rootDir bool, ) bool { - // Skip OneDrive permissions in the folder that used to be the root. We don't + // Skip Drive permissions in the folder that used to be the root. We don't // have a good way to materialize these in the test right now. if rootDir && item.UUID() == metadata.DirMetaFileSuffix { return false @@ -747,7 +747,7 @@ func compareOneDriveItem( ) if isMeta { - var itemType *onedrive.MetadataItem + var itemType *metadata.Item assert.IsType(t, itemType, item) } else { @@ -824,8 +824,7 @@ func compareOneDriveItem( t, expectedMeta.Permissions, itemPerms, - permissionEqual, - ) + permissionEqual) return true } @@ -887,7 +886,7 @@ func compareItem( } case path.OneDriveService: - return compareOneDriveItem(t, expected, item, restorePermissions, rootDir) + return compareDriveItem(t, expected, item, restorePermissions, rootDir) case path.SharePointService: if category != path.LibrariesCategory { @@ -895,7 +894,7 @@ func compareItem( } // SharePoint libraries reuses OneDrive code. - return compareOneDriveItem(t, expected, item, restorePermissions, rootDir) + return compareDriveItem(t, expected, item, restorePermissions, rootDir) default: assert.FailNowf(t, "unexpected service: %s", service.String()) diff --git a/src/internal/connector/onedrive/collection.go b/src/internal/connector/onedrive/collection.go index 2a827ce27..5dfbf5deb 100644 --- a/src/internal/connector/onedrive/collection.go +++ b/src/internal/connector/onedrive/collection.go @@ -37,8 +37,8 @@ var ( _ data.Stream = &Item{} _ data.StreamInfo = &Item{} _ data.StreamModTime = &Item{} - _ data.Stream = &MetadataItem{} - _ data.StreamModTime = &MetadataItem{} + _ data.Stream = &metadata.Item{} + _ data.StreamModTime = &metadata.Item{} ) // Collection represents a set of OneDrive objects retrieved from M365 @@ -306,53 +306,14 @@ type Item struct { info details.ItemInfo } -func (od *Item) UUID() string { - return od.id -} - -func (od *Item) ToReader() io.ReadCloser { - return od.data -} - // Deleted implements an interface function. However, OneDrive items are marked // as deleted by adding them to the exclude list so this can always return // false. -func (od Item) Deleted() bool { - return false -} - -func (od *Item) Info() details.ItemInfo { - return od.info -} - -func (od *Item) ModTime() time.Time { - return od.info.Modified() -} - -type MetadataItem struct { - id string - data io.ReadCloser - modTime time.Time -} - -func (od *MetadataItem) UUID() string { - return od.id -} - -func (od *MetadataItem) ToReader() io.ReadCloser { - return od.data -} - -// Deleted implements an interface function. However, OneDrive items are marked -// as deleted by adding them to the exclude list so this can always return -// false. -func (od MetadataItem) Deleted() bool { - return false -} - -func (od *MetadataItem) ModTime() time.Time { - return od.modTime -} +func (i Item) Deleted() bool { return false } +func (i *Item) UUID() string { return i.id } +func (i *Item) ToReader() io.ReadCloser { return i.data } +func (i *Item) Info() details.ItemInfo { return i.info } +func (i *Item) ModTime() time.Time { return i.info.Modified() } // getDriveItemContent fetch drive item's contents with retries func (oc *Collection) getDriveItemContent( @@ -602,12 +563,12 @@ func (oc *Collection) populateItems(ctx context.Context, errs *fault.Bus) { return progReader, nil }) - oc.data <- &MetadataItem{ - id: metaFileName + metaSuffix, - data: metaReader, + oc.data <- &metadata.Item{ + ID: metaFileName + metaSuffix, + Data: metaReader, // Metadata file should always use the latest time as // permissions change does not update mod time. - modTime: time.Now(), + Mod: time.Now(), } // Item read successfully, add to collection diff --git a/src/internal/connector/onedrive/metadata/metadata.go b/src/internal/connector/onedrive/metadata/metadata.go index 51e9105d5..32fb33707 100644 --- a/src/internal/connector/onedrive/metadata/metadata.go +++ b/src/internal/connector/onedrive/metadata/metadata.go @@ -1,5 +1,10 @@ package metadata +import ( + "io" + "time" +) + // ItemMeta contains metadata about the Item. It gets stored in a // separate file in kopia type Metadata struct { @@ -10,3 +15,17 @@ type Metadata struct { SharingMode SharingMode `json:"permissionMode,omitempty"` Permissions []Permission `json:"permissions,omitempty"` } + +type Item struct { + ID string + Data io.ReadCloser + Mod time.Time +} + +// Deleted implements an interface function. However, OneDrive items are marked +// as deleted by adding them to the exclude list so this can always return +// false. +func (i *Item) Deleted() bool { return false } +func (i *Item) UUID() string { return i.ID } +func (i *Item) ToReader() io.ReadCloser { return i.Data } +func (i *Item) ModTime() time.Time { return i.Mod }