Issue 902 onedriveindividual (#1140)
## Description Added an additional set of test suites to load_test to focus on the backup of a single user who will have their account prepared with a significant amount of data (many emails, many events, large files, etc). ## Type of change - [x] 🤖 Test ## Issue(s) * #902 ## Test Plan - [x] 💪 Manual - [x] 💚 E2E
This commit is contained in:
parent
39f9c7f50f
commit
7facdf1cc3
@ -34,7 +34,6 @@ var users = []string{
|
|||||||
"IsaiahL@8qzvrj.onmicrosoft.com",
|
"IsaiahL@8qzvrj.onmicrosoft.com",
|
||||||
"JohannaL@8qzvrj.onmicrosoft.com",
|
"JohannaL@8qzvrj.onmicrosoft.com",
|
||||||
"JoniS@8qzvrj.onmicrosoft.com",
|
"JoniS@8qzvrj.onmicrosoft.com",
|
||||||
"LeeG@8qzvrj.onmicrosoft.com",
|
|
||||||
"LidiaH@8qzvrj.onmicrosoft.com",
|
"LidiaH@8qzvrj.onmicrosoft.com",
|
||||||
"LynneR@8qzvrj.onmicrosoft.com",
|
"LynneR@8qzvrj.onmicrosoft.com",
|
||||||
"MeganB@8qzvrj.onmicrosoft.com",
|
"MeganB@8qzvrj.onmicrosoft.com",
|
||||||
@ -46,8 +45,15 @@ var users = []string{
|
|||||||
"Rfinders@8qzvrj.onmicrosoft.com",
|
"Rfinders@8qzvrj.onmicrosoft.com",
|
||||||
"vkarma@8qzvrj.onmicrosoft.com",
|
"vkarma@8qzvrj.onmicrosoft.com",
|
||||||
"greg.sanders@8qzvrj.onmicrosoft.com",
|
"greg.sanders@8qzvrj.onmicrosoft.com",
|
||||||
|
|
||||||
|
// avoid adding the following users
|
||||||
|
// they are reserved for other purposes
|
||||||
|
|
||||||
|
// "LeeG@8qzvrj.onmicrosoft.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var largeDatasetUser = []string{"LeeG@8qzvrj.onmicrosoft.com"}
|
||||||
|
|
||||||
func initM365Repo(t *testing.T) (
|
func initM365Repo(t *testing.T) (
|
||||||
context.Context, repository.Repository, account.Account, storage.Storage,
|
context.Context, repository.Repository, account.Account, storage.Storage,
|
||||||
) {
|
) {
|
||||||
@ -73,12 +79,17 @@ func initM365Repo(t *testing.T) (
|
|||||||
return ctx, repo, ac, st
|
return ctx, repo, ac, st
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Common
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
//revive:disable:context-as-argument
|
//revive:disable:context-as-argument
|
||||||
func runBackupLoadTest(
|
func runBackupLoadTest(
|
||||||
t *testing.T,
|
t *testing.T,
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
b *operations.BackupOperation,
|
b *operations.BackupOperation,
|
||||||
name string,
|
name string,
|
||||||
|
users []string,
|
||||||
) {
|
) {
|
||||||
//revive:enable:context-as-argument
|
//revive:enable:context-as-argument
|
||||||
t.Run("backup_"+name, func(t *testing.T) {
|
t.Run("backup_"+name, func(t *testing.T) {
|
||||||
@ -147,6 +158,7 @@ func runBackupDetailsLoadTest(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
r repository.Repository,
|
r repository.Repository,
|
||||||
name, backupID string,
|
name, backupID string,
|
||||||
|
users []string,
|
||||||
) {
|
) {
|
||||||
//revive:enable:context-as-argument
|
//revive:enable:context-as-argument
|
||||||
require.NotEmpty(t, backupID, "backup ID to retrieve deails")
|
require.NotEmpty(t, backupID, "backup ID to retrieve deails")
|
||||||
@ -171,7 +183,7 @@ func runBackupDetailsLoadTest(
|
|||||||
b.ItemsWritten, len(noFolders(t, ds.Entries)),
|
b.ItemsWritten, len(noFolders(t, ds.Entries)),
|
||||||
"items written to backup must match the count of entries, minus folder entries")
|
"items written to backup must match the count of entries, minus folder entries")
|
||||||
|
|
||||||
ensureAllUsersInDetails(t, ds, "backup", name)
|
ensureAllUsersInDetails(t, users, ds, "backup", name)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,6 +194,7 @@ func runRestoreLoadTest(
|
|||||||
r operations.RestoreOperation,
|
r operations.RestoreOperation,
|
||||||
name string,
|
name string,
|
||||||
expectItemCount int,
|
expectItemCount int,
|
||||||
|
users []string,
|
||||||
) {
|
) {
|
||||||
//revive:enable:context-as-argument
|
//revive:enable:context-as-argument
|
||||||
t.Run("restore_"+name, func(t *testing.T) {
|
t.Run("restore_"+name, func(t *testing.T) {
|
||||||
@ -202,12 +215,12 @@ func runRestoreLoadTest(
|
|||||||
assert.Equal(t, r.Results.ItemsWritten, len(ds.Entries), "count of items written matches restored entries in details")
|
assert.Equal(t, r.Results.ItemsWritten, len(ds.Entries), "count of items written matches restored entries in details")
|
||||||
assert.Less(t, 0, r.Results.ItemsRead, "items read")
|
assert.Less(t, 0, r.Results.ItemsRead, "items read")
|
||||||
assert.Less(t, 0, r.Results.ItemsWritten, "items written")
|
assert.Less(t, 0, r.Results.ItemsWritten, "items written")
|
||||||
assert.Less(t, 0, r.Results.ResourceOwners, "resource owners")
|
assert.Equal(t, len(users), r.Results.ResourceOwners, "resource owners")
|
||||||
assert.Zero(t, r.Results.ReadErrors, "read errors")
|
assert.Zero(t, r.Results.ReadErrors, "read errors")
|
||||||
assert.Zero(t, r.Results.WriteErrors, "write errors")
|
assert.Zero(t, r.Results.WriteErrors, "write errors")
|
||||||
assert.Equal(t, expectItemCount, r.Results.ItemsWritten, "backup and restore wrote the same count of items")
|
assert.Equal(t, expectItemCount, r.Results.ItemsWritten, "backup and restore wrote the same count of items")
|
||||||
|
|
||||||
ensureAllUsersInDetails(t, ds, "restore", name)
|
ensureAllUsersInDetails(t, users, ds, "restore", name)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,6 +241,7 @@ func noFolders(t *testing.T, des []details.DetailsEntry) []*details.DetailsEntry
|
|||||||
|
|
||||||
func ensureAllUsersInDetails(
|
func ensureAllUsersInDetails(
|
||||||
t *testing.T,
|
t *testing.T,
|
||||||
|
users []string,
|
||||||
ds *details.Details,
|
ds *details.Details,
|
||||||
prefix, name string,
|
prefix, name string,
|
||||||
) {
|
) {
|
||||||
@ -283,6 +297,8 @@ func ensureAllUsersInDetails(
|
|||||||
// Exchange
|
// Exchange
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// multiple users
|
||||||
|
|
||||||
type RepositoryLoadTestExchangeSuite struct {
|
type RepositoryLoadTestExchangeSuite struct {
|
||||||
suite.Suite
|
suite.Suite
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
@ -317,22 +333,23 @@ func (suite *RepositoryLoadTestExchangeSuite) TestExchange() {
|
|||||||
t = suite.T()
|
t = suite.T()
|
||||||
r = suite.repo
|
r = suite.repo
|
||||||
service = "exchange"
|
service = "exchange"
|
||||||
|
usersUnderTest = users
|
||||||
)
|
)
|
||||||
|
|
||||||
// backup
|
// backup
|
||||||
bsel := selectors.NewExchangeBackup()
|
bsel := selectors.NewExchangeBackup()
|
||||||
bsel.Include(bsel.MailFolders(users, []string{exchange.DefaultMailFolder}))
|
bsel.Include(bsel.MailFolders(usersUnderTest, []string{exchange.DefaultMailFolder}))
|
||||||
bsel.Include(bsel.ContactFolders(users, []string{exchange.DefaultContactFolder}))
|
bsel.Include(bsel.ContactFolders(usersUnderTest, []string{exchange.DefaultContactFolder}))
|
||||||
bsel.Include(bsel.EventCalendars(users, []string{exchange.DefaultCalendar}))
|
bsel.Include(bsel.EventCalendars(usersUnderTest, []string{exchange.DefaultCalendar}))
|
||||||
|
|
||||||
b, err := r.NewBackup(ctx, bsel.Selector)
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
runBackupLoadTest(t, ctx, &b, service)
|
runBackupLoadTest(t, ctx, &b, service, usersUnderTest)
|
||||||
bid := string(b.Results.BackupID)
|
bid := string(b.Results.BackupID)
|
||||||
|
|
||||||
runBackupListLoadTest(t, ctx, r, service, bid)
|
runBackupListLoadTest(t, ctx, r, service, bid)
|
||||||
runBackupDetailsLoadTest(t, ctx, r, service, bid)
|
runBackupDetailsLoadTest(t, ctx, r, service, bid, usersUnderTest)
|
||||||
|
|
||||||
// restore
|
// restore
|
||||||
rsel, err := bsel.ToExchangeRestore()
|
rsel, err := bsel.ToExchangeRestore()
|
||||||
@ -343,7 +360,73 @@ func (suite *RepositoryLoadTestExchangeSuite) TestExchange() {
|
|||||||
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten)
|
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten, usersUnderTest)
|
||||||
|
}
|
||||||
|
|
||||||
|
// single user, lots of data
|
||||||
|
|
||||||
|
type RepositoryIndividualLoadTestExchangeSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
ctx context.Context
|
||||||
|
repo repository.Repository
|
||||||
|
acct account.Account
|
||||||
|
st storage.Storage
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRepositoryIndividualLoadTestExchangeSuite(t *testing.T) {
|
||||||
|
if err := tester.RunOnAny(tester.CorsoLoadTests); err != nil {
|
||||||
|
t.Skip(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
suite.Run(t, new(RepositoryIndividualLoadTestExchangeSuite))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestExchangeSuite) SetupSuite() {
|
||||||
|
t := suite.T()
|
||||||
|
t.Parallel()
|
||||||
|
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestExchangeSuite) TeardownSuite() {
|
||||||
|
suite.repo.Close(suite.ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestExchangeSuite) TestExchange() {
|
||||||
|
ctx, flush := tester.NewContext()
|
||||||
|
defer flush()
|
||||||
|
|
||||||
|
var (
|
||||||
|
t = suite.T()
|
||||||
|
r = suite.repo
|
||||||
|
service = "exchange"
|
||||||
|
usersUnderTest = largeDatasetUser
|
||||||
|
)
|
||||||
|
|
||||||
|
// backup
|
||||||
|
bsel := selectors.NewExchangeBackup()
|
||||||
|
bsel.Include(bsel.MailFolders(usersUnderTest, []string{exchange.DefaultMailFolder}))
|
||||||
|
bsel.Include(bsel.ContactFolders(usersUnderTest, []string{exchange.DefaultContactFolder}))
|
||||||
|
bsel.Include(bsel.EventCalendars(usersUnderTest, []string{exchange.DefaultCalendar}))
|
||||||
|
|
||||||
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
runBackupLoadTest(t, ctx, &b, service, usersUnderTest)
|
||||||
|
bid := string(b.Results.BackupID)
|
||||||
|
|
||||||
|
runBackupListLoadTest(t, ctx, r, service, bid)
|
||||||
|
runBackupDetailsLoadTest(t, ctx, r, service, bid, usersUnderTest)
|
||||||
|
|
||||||
|
// restore
|
||||||
|
rsel, err := bsel.ToExchangeRestore()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
dest := tester.DefaultTestRestoreDestination()
|
||||||
|
|
||||||
|
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten, usersUnderTest)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@ -385,20 +468,21 @@ func (suite *RepositoryLoadTestOneDriveSuite) TestOneDrive() {
|
|||||||
t = suite.T()
|
t = suite.T()
|
||||||
r = suite.repo
|
r = suite.repo
|
||||||
service = "one_drive"
|
service = "one_drive"
|
||||||
|
usersUnderTest = users
|
||||||
)
|
)
|
||||||
|
|
||||||
// backup
|
// backup
|
||||||
bsel := selectors.NewOneDriveBackup()
|
bsel := selectors.NewOneDriveBackup()
|
||||||
bsel.Include(bsel.Users(users))
|
bsel.Include(bsel.Users(usersUnderTest))
|
||||||
|
|
||||||
b, err := r.NewBackup(ctx, bsel.Selector)
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
runBackupLoadTest(t, ctx, &b, service)
|
runBackupLoadTest(t, ctx, &b, service, usersUnderTest)
|
||||||
bid := string(b.Results.BackupID)
|
bid := string(b.Results.BackupID)
|
||||||
|
|
||||||
runBackupListLoadTest(t, ctx, r, service, bid)
|
runBackupListLoadTest(t, ctx, r, service, bid)
|
||||||
runBackupDetailsLoadTest(t, ctx, r, service, bid)
|
runBackupDetailsLoadTest(t, ctx, r, service, bid, usersUnderTest)
|
||||||
|
|
||||||
// restore
|
// restore
|
||||||
rsel, err := bsel.ToOneDriveRestore()
|
rsel, err := bsel.ToOneDriveRestore()
|
||||||
@ -409,5 +493,68 @@ func (suite *RepositoryLoadTestOneDriveSuite) TestOneDrive() {
|
|||||||
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten)
|
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten, usersUnderTest)
|
||||||
|
}
|
||||||
|
|
||||||
|
type RepositoryIndividualLoadTestOneDriveSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
ctx context.Context
|
||||||
|
repo repository.Repository
|
||||||
|
acct account.Account
|
||||||
|
st storage.Storage
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRepositoryIndividualLoadTestOneDriveSuite(t *testing.T) {
|
||||||
|
if err := tester.RunOnAny(tester.CorsoLoadTests); err != nil {
|
||||||
|
t.Skip(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
suite.Run(t, new(RepositoryIndividualLoadTestOneDriveSuite))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestOneDriveSuite) SetupSuite() {
|
||||||
|
t := suite.T()
|
||||||
|
t.Skip("temp issue-902-live")
|
||||||
|
t.Parallel()
|
||||||
|
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestOneDriveSuite) TeardownSuite() {
|
||||||
|
suite.repo.Close(suite.ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIndividualLoadTestOneDriveSuite) TestOneDrive() {
|
||||||
|
ctx, flush := tester.NewContext()
|
||||||
|
defer flush()
|
||||||
|
|
||||||
|
var (
|
||||||
|
t = suite.T()
|
||||||
|
r = suite.repo
|
||||||
|
service = "one_drive"
|
||||||
|
usersUnderTest = largeDatasetUser
|
||||||
|
)
|
||||||
|
|
||||||
|
// backup
|
||||||
|
bsel := selectors.NewOneDriveBackup()
|
||||||
|
bsel.Include(bsel.Users(usersUnderTest))
|
||||||
|
|
||||||
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
runBackupLoadTest(t, ctx, &b, service, usersUnderTest)
|
||||||
|
bid := string(b.Results.BackupID)
|
||||||
|
|
||||||
|
runBackupListLoadTest(t, ctx, r, service, bid)
|
||||||
|
runBackupDetailsLoadTest(t, ctx, r, service, bid, usersUnderTest)
|
||||||
|
|
||||||
|
// restore
|
||||||
|
rsel, err := bsel.ToOneDriveRestore()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
dest := tester.DefaultTestRestoreDestination()
|
||||||
|
|
||||||
|
rst, err := r.NewRestore(ctx, bid, rsel.Selector, dest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
runRestoreLoadTest(t, ctx, rst, service, b.Results.ItemsWritten, usersUnderTest)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user