Merge fields in the backup bases struct since we assume they need to be tracked together anyway This PR attempts to keep the API as close to what it currently is as possible. A future PR will go through and update the API/tests/mocks --- #### Does this PR need a docs update or release note? - [ ] ✅ Yes, it's included - [ ] 🕐 Yes, but in a later PR - [x] ⛔ No #### Type of change - [ ] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Supportability/Tests - [ ] 💻 CI/Deployment - [x] 🧹 Tech Debt/Cleanup #### Issue(s) * #3943 #### Test Plan - [ ] 💪 Manual - [x] ⚡ Unit test - [x] 💚 E2E
200 lines
5.0 KiB
Go
200 lines
5.0 KiB
Go
package kopia
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/kopia/kopia/repo/manifest"
|
|
"github.com/kopia/kopia/snapshot"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/alcionai/corso/src/internal/model"
|
|
"github.com/alcionai/corso/src/pkg/backup"
|
|
)
|
|
|
|
// TODO(ashmrtn): Temp function until all PRs in the series merge.
|
|
func backupsMatch(t *testing.T, expect, got []BackupEntry, dataType string) {
|
|
expectBups := make([]*backup.Backup, 0, len(expect))
|
|
gotBups := make([]*backup.Backup, 0, len(got))
|
|
gotBasesByID := map[model.StableID]BackupEntry{}
|
|
|
|
for _, e := range expect {
|
|
if e.Backup != nil {
|
|
expectBups = append(expectBups, e.Backup)
|
|
}
|
|
}
|
|
|
|
for _, g := range got {
|
|
if g.Backup != nil {
|
|
gotBups = append(gotBups, g.Backup)
|
|
gotBasesByID[g.Backup.ID] = g
|
|
}
|
|
}
|
|
|
|
assert.ElementsMatch(t, expectBups, gotBups, dataType+" backup model")
|
|
|
|
// Need to compare Reasons separately since they're also a slice.
|
|
for _, e := range expect {
|
|
if e.Backup == nil {
|
|
continue
|
|
}
|
|
|
|
b, ok := gotBasesByID[e.Backup.ID]
|
|
if !ok {
|
|
// Missing bases will be reported above.
|
|
continue
|
|
}
|
|
|
|
assert.ElementsMatch(t, e.Reasons, b.Reasons)
|
|
}
|
|
}
|
|
|
|
// TODO(ashmrtn): Temp function until all PRs in the series merge.
|
|
func manifestsMatch(t *testing.T, expect, got []ManifestEntry, dataType string) {
|
|
expectMans := make([]*snapshot.Manifest, 0, len(expect))
|
|
gotMans := make([]*snapshot.Manifest, 0, len(got))
|
|
gotBasesByID := map[manifest.ID]ManifestEntry{}
|
|
|
|
for _, e := range expect {
|
|
if e.Manifest != nil {
|
|
expectMans = append(expectMans, e.Manifest)
|
|
}
|
|
}
|
|
|
|
for _, g := range got {
|
|
if g.Manifest != nil {
|
|
gotMans = append(gotMans, g.Manifest)
|
|
gotBasesByID[g.Manifest.ID] = g
|
|
}
|
|
}
|
|
|
|
assert.ElementsMatch(t, expectMans, gotMans, dataType+" item data snapshot")
|
|
|
|
// Need to compare Reasons separately since they're also a slice.
|
|
for _, e := range expect {
|
|
if e.Manifest == nil {
|
|
continue
|
|
}
|
|
|
|
b, ok := gotBasesByID[e.Manifest.ID]
|
|
if !ok {
|
|
// Missing bases will be reported above.
|
|
continue
|
|
}
|
|
|
|
assert.ElementsMatch(t, e.Reasons, b.Reasons)
|
|
}
|
|
}
|
|
|
|
func AssertBackupBasesEqual(t *testing.T, expect, got BackupBases) {
|
|
if expect == nil && got == nil {
|
|
return
|
|
}
|
|
|
|
if expect == nil {
|
|
assert.Empty(t, got.Backups(), "backups")
|
|
assert.Empty(t, got.MergeBases(), "merge bases")
|
|
assert.Empty(t, got.UniqueAssistBackups(), "assist backups")
|
|
assert.Empty(t, got.UniqueAssistBases(), "assist bases")
|
|
assert.Empty(t, got.SnapshotAssistBases(), "snapshot assist bases")
|
|
|
|
return
|
|
}
|
|
|
|
if got == nil {
|
|
if len(expect.Backups()) > 0 ||
|
|
len(expect.MergeBases()) > 0 ||
|
|
len(expect.UniqueAssistBackups()) > 0 ||
|
|
len(expect.UniqueAssistBases()) > 0 ||
|
|
len(expect.SnapshotAssistBases()) > 0 {
|
|
assert.Fail(t, "got was nil but expected non-nil result %v", expect)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
backupsMatch(t, expect.Backups(), got.Backups(), "merge backups")
|
|
manifestsMatch(t, expect.MergeBases(), got.MergeBases(), "merge manifests")
|
|
backupsMatch(t, expect.UniqueAssistBackups(), got.UniqueAssistBackups(), "assist backups")
|
|
manifestsMatch(t, expect.UniqueAssistBases(), got.UniqueAssistBases(), "assist manifests")
|
|
manifestsMatch(t, expect.SnapshotAssistBases(), got.SnapshotAssistBases(), "snapshot assist bases")
|
|
}
|
|
|
|
func NewMockBackupBases() *MockBackupBases {
|
|
return &MockBackupBases{backupBases: &backupBases{}}
|
|
}
|
|
|
|
type MockBackupBases struct {
|
|
*backupBases
|
|
}
|
|
|
|
func (bb *MockBackupBases) WithBackups(b ...BackupEntry) *MockBackupBases {
|
|
bases := make([]BackupBase, 0, len(b))
|
|
for _, base := range b {
|
|
bases = append(bases, BackupBase{
|
|
Backup: base.Backup,
|
|
Reasons: base.Reasons,
|
|
})
|
|
}
|
|
|
|
bb.backupBases.mergeBases = append(bb.NewMergeBases(), bases...)
|
|
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) WithMergeBases(m ...ManifestEntry) *MockBackupBases {
|
|
bases := make([]BackupBase, 0, len(m))
|
|
for _, base := range m {
|
|
bases = append(bases, BackupBase{
|
|
ItemDataSnapshot: base.Manifest,
|
|
Reasons: base.Reasons,
|
|
})
|
|
}
|
|
|
|
bb.backupBases.mergeBases = append(bb.NewMergeBases(), bases...)
|
|
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) WithAssistBackups(b ...BackupEntry) *MockBackupBases {
|
|
bases := make([]BackupBase, 0, len(b))
|
|
for _, base := range b {
|
|
bases = append(bases, BackupBase{
|
|
Backup: base.Backup,
|
|
Reasons: base.Reasons,
|
|
})
|
|
}
|
|
|
|
bb.backupBases.assistBases = append(bb.NewUniqueAssistBases(), bases...)
|
|
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) WithAssistBases(m ...ManifestEntry) *MockBackupBases {
|
|
bases := make([]BackupBase, 0, len(m))
|
|
for _, base := range m {
|
|
bases = append(bases, BackupBase{
|
|
ItemDataSnapshot: base.Manifest,
|
|
Reasons: base.Reasons,
|
|
})
|
|
}
|
|
|
|
bb.backupBases.assistBases = append(bb.NewUniqueAssistBases(), bases...)
|
|
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) NewWithMergeBases(b ...BackupBase) *MockBackupBases {
|
|
bb.backupBases.mergeBases = append(bb.NewMergeBases(), b...)
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) MockDisableAssistBases() *MockBackupBases {
|
|
bb.DisableAssistBases()
|
|
return bb
|
|
}
|
|
|
|
func (bb *MockBackupBases) MockDisableMergeBases() *MockBackupBases {
|
|
bb.DisableMergeBases()
|
|
return bb
|
|
}
|