From 43c9ad4a016fc76a08f9179863e2e3d92416484f Mon Sep 17 00:00:00 2001 From: Keepers Date: Thu, 13 Apr 2023 01:15:30 -0600 Subject: [PATCH] clean up cli e2e tests (#3068) deduplicate some e2e boilerplate setup. Also, transitions exchange e2e tests from an in- test loop over categories, to a well-defined test func per category. The former design doesn't play well with go test --run ./testName, and causes all tests to run even if they don't match the string. --- #### Does this PR need a docs update or release note? - [x] :no_entry: No #### Type of change - [x] :robot: Supportability/Tests - [x] :broom: Tech Debt/Cleanup #### Test Plan - [x] :green_heart: E2E --- src/cli/backup/exchange_e2e_test.go | 528 ++++++++++++------------- src/cli/backup/help_e2e_test.go | 53 +++ src/cli/backup/onedrive_e2e_test.go | 78 +--- src/cli/backup/sharepoint_e2e_test.go | 66 +--- src/internal/tester/resource_owners.go | 20 +- 5 files changed, 362 insertions(+), 383 deletions(-) create mode 100644 src/cli/backup/help_e2e_test.go diff --git a/src/cli/backup/exchange_e2e_test.go b/src/cli/backup/exchange_e2e_test.go index b2f93439e..759258058 100644 --- a/src/cli/backup/exchange_e2e_test.go +++ b/src/cli/backup/exchange_e2e_test.go @@ -1,12 +1,14 @@ package backup_test import ( + "context" "fmt" "strings" "testing" "github.com/alcionai/clues" "github.com/google/uuid" + "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -21,7 +23,6 @@ import ( "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" - "github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/path" "github.com/alcionai/corso/src/pkg/repository" "github.com/alcionai/corso/src/pkg/selectors" @@ -34,8 +35,6 @@ var ( events = path.EventsCategory ) -var backupDataSets = []path.CategoryType{email, contacts, events} - // --------------------------------------------------------------------------- // tests with no backups // --------------------------------------------------------------------------- @@ -60,33 +59,19 @@ func TestNoBackupExchangeE2ESuite(t *testing.T) { } func (suite *NoBackupExchangeE2ESuite) SetupSuite() { - t := suite.T() ctx, flush := tester.NewContext() - defer flush() - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) - suite.recorder = strings.Builder{} + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - - ctx = config.SetViper(ctx, suite.vpr) + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.recorder = recorder + suite.cfgFP = cfgFilePath suite.m365UserID = tester.M365UserID(t) - - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) } func (suite *NoBackupExchangeE2ESuite) TestExchangeBackupListCmd_empty() { @@ -140,110 +125,94 @@ func TestBackupExchangeE2ESuite(t *testing.T) { } func (suite *BackupExchangeE2ESuite) SetupSuite() { - t := suite.T() ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + acct, st, repo, vpr, _, cfgFilePath := prepM365Test(t, ctx) + + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.cfgFP = cfgFilePath + suite.m365UserID = tester.M365UserID(t) +} + +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_email() { + runExchangeBackupCategoryTest(suite, "email") +} + +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_contacts() { + runExchangeBackupCategoryTest(suite, "contacts") +} + +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_events() { + runExchangeBackupCategoryTest(suite, "events") +} + +func runExchangeBackupCategoryTest(suite *BackupExchangeE2ESuite, category string) { + recorder := strings.Builder{} + recorder.Reset() + + t := suite.T() + + ctx, flush := tester.NewContext() + ctx = config.SetViper(ctx, suite.vpr) defer flush() - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) + cmd, ctx := buildExchangeBackupCmd(ctx, suite.cfgFP, suite.m365UserID, category, &recorder) - cfg, err := suite.st.S3Config() + // run the command + err := cmd.ExecuteContext(ctx) require.NoError(t, err, clues.ToCore(err)) - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } + result := recorder.String() + t.Log("backup results", result) - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) + // as an offhand check: the result should contain the m365 user id + assert.Contains(t, result, suite.m365UserID) +} +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_userNotFound_email() { + runExchangeBackupUserNotFoundTest(suite, "email") +} + +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_userNotFound_contacts() { + runExchangeBackupUserNotFoundTest(suite, "contacts") +} + +func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_userNotFound_events() { + runExchangeBackupUserNotFoundTest(suite, "events") +} + +func runExchangeBackupUserNotFoundTest(suite *BackupExchangeE2ESuite, category string) { + recorder := strings.Builder{} + recorder.Reset() + + t := suite.T() + + ctx, flush := tester.NewContext() ctx = config.SetViper(ctx, suite.vpr) - suite.m365UserID = tester.M365UserID(t) - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) -} + defer flush() -func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd() { - recorder := strings.Builder{} + cmd, ctx := buildExchangeBackupCmd(ctx, suite.cfgFP, "foo@not-there.com", category, &recorder) - for _, set := range backupDataSets { - recorder.Reset() + // run the command + err := cmd.ExecuteContext(ctx) + require.Error(t, err, clues.ToCore(err)) + assert.Contains( + t, + err.Error(), + "not found in tenant", "error missing user not found") + assert.NotContains(t, err.Error(), "runtime error", "panic happened") - suite.Run(set.String(), func() { - t := suite.T() + t.Logf("backup error message: %s", err.Error()) - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - - cmd := tester.StubRootCmd( - "backup", "create", "exchange", - "--config-file", suite.cfgFP, - "--"+utils.UserFN, suite.m365UserID, - "--"+utils.CategoryDataFN, set.String()) - cli.BuildCommandTree(cmd) - - cmd.SetOut(&recorder) - - ctx = print.SetRootCmd(ctx, cmd) - - // run the command - err := cmd.ExecuteContext(ctx) - require.NoError(t, err, clues.ToCore(err)) - - result := recorder.String() - t.Log("backup results", result) - - // as an offhand check: the result should contain the m365 user id - assert.Contains(t, result, suite.m365UserID) - }) - } -} - -func (suite *BackupExchangeE2ESuite) TestExchangeBackupCmd_UserNotInTenant() { - recorder := strings.Builder{} - - for _, set := range backupDataSets { - recorder.Reset() - - suite.Run(set.String(), func() { - t := suite.T() - - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - - cmd := tester.StubRootCmd( - "backup", "create", "exchange", - "--config-file", suite.cfgFP, - "--"+utils.UserFN, "foo@nothere.com", - "--"+utils.CategoryDataFN, set.String()) - cli.BuildCommandTree(cmd) - - cmd.SetOut(&recorder) - - ctx = print.SetRootCmd(ctx, cmd) - - // run the command - err := cmd.ExecuteContext(ctx) - require.Error(t, err, clues.ToCore(err)) - assert.Contains( - t, - err.Error(), - "not found in tenant", "error missing user not found") - assert.NotContains(t, err.Error(), "runtime error", "panic happened") - - t.Logf("backup error message: %s", err.Error()) - - result := recorder.String() - t.Log("backup results", result) - }) - } + result := recorder.String() + t.Log("backup results", result) } // --------------------------------------------------------------------------- @@ -271,34 +240,19 @@ func TestPreparedBackupExchangeE2ESuite(t *testing.T) { } func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { - t := suite.T() - - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) - suite.recorder = strings.Builder{} - - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - suite.m365UserID = strings.ToLower(tester.M365UserID(t)) - - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.recorder = recorder + suite.cfgFP = cfgFilePath + suite.m365UserID = tester.M365UserID(t) suite.backupOps = make(map[path.CategoryType]string) var ( @@ -311,7 +265,7 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { } ) - for _, set := range backupDataSets { + for _, set := range []path.CategoryType{email, contacts, events} { var ( sel = selectors.NewExchangeBackup(users) scopes []selectors.ExchangeScope @@ -342,6 +296,7 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { b, err := suite.repo.Backup(ctx, string(bop.Results.BackupID)) require.NoError(t, err, "retrieving recent backup by ID") require.Equal(t, bIDs, string(b.ID), "repo backup matches results id") + _, b, errs := suite.repo.GetBackupDetails(ctx, bIDs) require.NoError(t, errs.Failure(), "retrieving recent backup details by ID") require.Empty(t, errs.Recovered(), "retrieving recent backup details by ID") @@ -351,151 +306,173 @@ func (suite *PreparedBackupExchangeE2ESuite) SetupSuite() { } } -func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd() { - for _, set := range backupDataSets { - suite.recorder.Reset() - - suite.Run(set.String(), func() { - t := suite.T() - - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - - cmd := tester.StubRootCmd( - "backup", "list", "exchange", - "--config-file", suite.cfgFP) - cli.BuildCommandTree(cmd) - - cmd.SetOut(&suite.recorder) - - ctx = print.SetRootCmd(ctx, cmd) - - // run the command - err := cmd.ExecuteContext(ctx) - require.NoError(t, err, clues.ToCore(err)) - - // compare the output - result := suite.recorder.String() - assert.Contains(t, result, suite.backupOps[set]) - }) - } +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_email() { + runExchangeListCmdTest(suite, email) } -func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_singleID() { - for _, set := range backupDataSets { - suite.recorder.Reset() +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_contacts() { + runExchangeListCmdTest(suite, contacts) +} - suite.Run(set.String(), func() { - t := suite.T() +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_events() { + runExchangeListCmdTest(suite, events) +} - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() +func runExchangeListCmdTest(suite *PreparedBackupExchangeE2ESuite, category path.CategoryType) { + suite.recorder.Reset() - bID := suite.backupOps[set] + t := suite.T() - cmd := tester.StubRootCmd( - "backup", "list", "exchange", - "--config-file", suite.cfgFP, - "--backup", string(bID)) - cli.BuildCommandTree(cmd) + ctx, flush := tester.NewContext() + ctx = config.SetViper(ctx, suite.vpr) - cmd.SetOut(&suite.recorder) + defer flush() - ctx = print.SetRootCmd(ctx, cmd) + cmd := tester.StubRootCmd( + "backup", "list", "exchange", + "--config-file", suite.cfgFP) + cli.BuildCommandTree(cmd) + cmd.SetOut(&suite.recorder) - // run the command - err := cmd.ExecuteContext(ctx) - require.NoError(t, err, clues.ToCore(err)) + ctx = print.SetRootCmd(ctx, cmd) - // compare the output - result := suite.recorder.String() - assert.Contains(t, result, bID) - }) - } + // run the command + err := cmd.ExecuteContext(ctx) + require.NoError(t, err, clues.ToCore(err)) + + // compare the output + result := suite.recorder.String() + assert.Contains(t, result, suite.backupOps[category]) +} + +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_singleID_email() { + runExchangeListSingleCmdTest(suite, email) +} + +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_singleID_contacts() { + runExchangeListSingleCmdTest(suite, contacts) +} + +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_singleID_events() { + runExchangeListSingleCmdTest(suite, events) +} + +func runExchangeListSingleCmdTest(suite *PreparedBackupExchangeE2ESuite, category path.CategoryType) { + suite.recorder.Reset() + + t := suite.T() + + ctx, flush := tester.NewContext() + ctx = config.SetViper(ctx, suite.vpr) + + defer flush() + + bID := suite.backupOps[category] + + cmd := tester.StubRootCmd( + "backup", "list", "exchange", + "--config-file", suite.cfgFP, + "--backup", string(bID)) + cli.BuildCommandTree(cmd) + + cmd.SetOut(&suite.recorder) + + ctx = print.SetRootCmd(ctx, cmd) + + // run the command + err := cmd.ExecuteContext(ctx) + require.NoError(t, err, clues.ToCore(err)) + + // compare the output + result := suite.recorder.String() + assert.Contains(t, result, bID) } func (suite *PreparedBackupExchangeE2ESuite) TestExchangeListCmd_badID() { - for _, set := range backupDataSets { - suite.Run(set.String(), func() { - t := suite.T() + t := suite.T() - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() + ctx, flush := tester.NewContext() + ctx = config.SetViper(ctx, suite.vpr) - cmd := tester.StubRootCmd( - "backup", "list", "exchange", - "--config-file", suite.cfgFP, - "--backup", "smarfs") - cli.BuildCommandTree(cmd) + defer flush() - ctx = print.SetRootCmd(ctx, cmd) + cmd := tester.StubRootCmd( + "backup", "list", "exchange", + "--config-file", suite.cfgFP, + "--backup", "smarfs") + cli.BuildCommandTree(cmd) - // run the command - err := cmd.ExecuteContext(ctx) - require.Error(t, err, clues.ToCore(err)) - }) - } + ctx = print.SetRootCmd(ctx, cmd) + + // run the command + err := cmd.ExecuteContext(ctx) + require.Error(t, err, clues.ToCore(err)) } -func (suite *PreparedBackupExchangeE2ESuite) TestExchangeDetailsCmd() { - for _, set := range backupDataSets { - suite.recorder.Reset() +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeDetailsCmd_email() { + runExchangeDetailsCmdTest(suite, email) +} - suite.Run(set.String(), func() { - t := suite.T() +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeDetailsCmd_contacts() { + runExchangeDetailsCmdTest(suite, contacts) +} - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() +func (suite *PreparedBackupExchangeE2ESuite) TestExchangeDetailsCmd_events() { + runExchangeDetailsCmdTest(suite, events) +} - bID := suite.backupOps[set] +func runExchangeDetailsCmdTest(suite *PreparedBackupExchangeE2ESuite, category path.CategoryType) { + suite.recorder.Reset() - // fetch the details from the repo first - deets, _, errs := suite.repo.GetBackupDetails(ctx, string(bID)) - require.NoError(t, errs.Failure(), clues.ToCore(errs.Failure())) - require.Empty(t, errs.Recovered()) + t := suite.T() - cmd := tester.StubRootCmd( - "backup", "details", "exchange", - "--config-file", suite.cfgFP, - "--"+utils.BackupFN, string(bID)) - cli.BuildCommandTree(cmd) + ctx, flush := tester.NewContext() + ctx = config.SetViper(ctx, suite.vpr) - cmd.SetOut(&suite.recorder) + defer flush() - ctx = print.SetRootCmd(ctx, cmd) + bID := suite.backupOps[category] - // run the command - err := cmd.ExecuteContext(ctx) - require.NoError(t, err, clues.ToCore(err)) + // fetch the details from the repo first + deets, _, errs := suite.repo.GetBackupDetails(ctx, string(bID)) + require.NoError(t, errs.Failure(), clues.ToCore(errs.Failure())) + require.Empty(t, errs.Recovered()) - // compare the output - result := suite.recorder.String() + cmd := tester.StubRootCmd( + "backup", "details", "exchange", + "--config-file", suite.cfgFP, + "--"+utils.BackupFN, string(bID)) + cli.BuildCommandTree(cmd) + cmd.SetOut(&suite.recorder) - i := 0 - foundFolders := 0 + ctx = print.SetRootCmd(ctx, cmd) - for _, ent := range deets.Entries { - // Skip folders as they don't mean anything to the end user. - if ent.Folder != nil { - foundFolders++ - continue - } + // run the command + err := cmd.ExecuteContext(ctx) + require.NoError(t, err, clues.ToCore(err)) - suite.Run(fmt.Sprintf("detail %d", i), func() { - assert.Contains(suite.T(), result, ent.ShortRef) - }) + // compare the output + result := suite.recorder.String() - i++ - } + i := 0 + foundFolders := 0 - // At least the prefix of the path should be encoded as folders. - assert.Greater(t, foundFolders, 4) + for _, ent := range deets.Entries { + // Skip folders as they don't mean anything to the end user. + if ent.Folder != nil { + foundFolders++ + continue + } + + suite.Run(fmt.Sprintf("detail %d", i), func() { + assert.Contains(suite.T(), result, ent.ShortRef) }) + + i++ } + + // At least the prefix of the path should be encoded as folders. + assert.Greater(t, foundFolders, 4) } // --------------------------------------------------------------------------- @@ -523,30 +500,17 @@ func TestBackupDeleteExchangeE2ESuite(t *testing.T) { } func (suite *BackupDeleteExchangeE2ESuite) SetupSuite() { - t := suite.T() - - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) - - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) + t := suite.T() + acct, st, repo, vpr, _, cfgFilePath := prepM365Test(t, ctx) + + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.cfgFP = cfgFilePath m365UserID := tester.M365UserID(t) users := []string{m365UserID} @@ -555,9 +519,11 @@ func (suite *BackupDeleteExchangeE2ESuite) SetupSuite() { sel := selectors.NewExchangeBackup(users) sel.Include(sel.MailFolders([]string{exchange.DefaultMailFolder}, selectors.PrefixMatch())) - suite.backupOp, err = suite.repo.NewBackup(ctx, sel.Selector) + backupOp, err := suite.repo.NewBackup(ctx, sel.Selector) require.NoError(t, err, clues.ToCore(err)) + suite.backupOp = backupOp + err = suite.backupOp.Run(ctx) require.NoError(t, err, clues.ToCore(err)) } @@ -607,3 +573,23 @@ func (suite *BackupDeleteExchangeE2ESuite) TestExchangeBackupDeleteCmd_UnknownID err := cmd.ExecuteContext(ctx) require.Error(t, err, clues.ToCore(err)) } + +// --------------------------------------------------------------------------- +// helpers +// --------------------------------------------------------------------------- + +func buildExchangeBackupCmd( + ctx context.Context, + configFile, user, category string, + recorder *strings.Builder, +) (*cobra.Command, context.Context) { + cmd := tester.StubRootCmd( + "backup", "create", "exchange", + "--config-file", configFile, + "--"+utils.UserFN, user, + "--"+utils.CategoryDataFN, category) + cli.BuildCommandTree(cmd) + cmd.SetOut(recorder) + + return cmd, print.SetRootCmd(ctx, cmd) +} diff --git a/src/cli/backup/help_e2e_test.go b/src/cli/backup/help_e2e_test.go new file mode 100644 index 000000000..9fec46934 --- /dev/null +++ b/src/cli/backup/help_e2e_test.go @@ -0,0 +1,53 @@ +package backup_test + +import ( + "context" + "strings" + "testing" + + "github.com/alcionai/clues" + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + + "github.com/alcionai/corso/src/cli/config" + "github.com/alcionai/corso/src/internal/tester" + "github.com/alcionai/corso/src/pkg/account" + "github.com/alcionai/corso/src/pkg/control" + "github.com/alcionai/corso/src/pkg/repository" + "github.com/alcionai/corso/src/pkg/storage" +) + +func prepM365Test( + t *testing.T, + ctx context.Context, //revive:disable-line:context-as-argument +) ( + account.Account, + storage.Storage, + repository.Repository, + *viper.Viper, + strings.Builder, + string, +) { + var ( + acct = tester.NewM365Account(t) + st = tester.NewPrefixedS3Storage(t) + recorder = strings.Builder{} + ) + + cfg, err := st.S3Config() + require.NoError(t, err, clues.ToCore(err)) + + force := map[string]string{ + tester.TestCfgAccountProvider: "M365", + tester.TestCfgStorageProvider: "S3", + tester.TestCfgPrefix: cfg.Prefix, + } + + vpr, cfgFP := tester.MakeTempTestConfigClone(t, force) + ctx = config.SetViper(ctx, vpr) + + repo, err := repository.Initialize(ctx, acct, st, control.Options{}) + require.NoError(t, err, clues.ToCore(err)) + + return acct, st, repo, vpr, recorder, cfgFP +} diff --git a/src/cli/backup/onedrive_e2e_test.go b/src/cli/backup/onedrive_e2e_test.go index b1c47808e..e3d20f5ff 100644 --- a/src/cli/backup/onedrive_e2e_test.go +++ b/src/cli/backup/onedrive_e2e_test.go @@ -20,7 +20,6 @@ import ( "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" - "github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/repository" "github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/storage" @@ -52,38 +51,19 @@ func TestNoBackupOneDriveE2ESuite(t *testing.T) { } func (suite *NoBackupOneDriveE2ESuite) SetupSuite() { - t := suite.T() ctx, flush := tester.NewContext() - defer flush() - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - - ctx = config.SetViper(ctx, suite.vpr) + suite.acct = acct + suite.st = st + suite.repo = repo + suite.recorder = recorder + suite.vpr = vpr + suite.cfgFP = cfgFilePath suite.m365UserID = tester.M365UserID(t) - - // init the repo first - suite.repo, err = repository.Initialize( - ctx, - suite.acct, - suite.st, - control.Options{ - ToggleFeatures: control.Toggles{}, - }) - require.NoError(t, err, clues.ToCore(err)) } func (suite *NoBackupOneDriveE2ESuite) TestOneDriveBackupListCmd_empty() { @@ -175,39 +155,21 @@ func TestBackupDeleteOneDriveE2ESuite(t *testing.T) { } func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() { - t := suite.T() - - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) - - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - // init the repo first - suite.repo, err = repository.Initialize( - ctx, - suite.acct, - suite.st, - control.Options{ - ToggleFeatures: control.Toggles{}, - }) - require.NoError(t, err, clues.ToCore(err)) + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) + + suite.acct = acct + suite.st = st + suite.repo = repo + suite.recorder = recorder + suite.vpr = vpr + suite.cfgFP = cfgFilePath var ( - m365UserID = strings.ToLower(tester.M365UserID(t)) + m365UserID = tester.M365UserID(t) users = []string{m365UserID} idToName = map[string]string{m365UserID: m365UserID} nameToID = map[string]string{m365UserID: m365UserID} @@ -221,9 +183,11 @@ func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() { sel := selectors.NewOneDriveBackup(users) sel.Include(sel.Folders(selectors.Any())) - suite.backupOp, err = suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) + backupOp, err := suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) + suite.backupOp = backupOp + err = suite.backupOp.Run(ctx) require.NoError(t, err, clues.ToCore(err)) } diff --git a/src/cli/backup/sharepoint_e2e_test.go b/src/cli/backup/sharepoint_e2e_test.go index 20b870af9..2ece84b2d 100644 --- a/src/cli/backup/sharepoint_e2e_test.go +++ b/src/cli/backup/sharepoint_e2e_test.go @@ -20,7 +20,6 @@ import ( "github.com/alcionai/corso/src/internal/operations" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/account" - "github.com/alcionai/corso/src/pkg/control" "github.com/alcionai/corso/src/pkg/repository" "github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/selectors/testdata" @@ -51,32 +50,19 @@ func TestNoBackupSharePointE2ESuite(t *testing.T) { } func (suite *NoBackupSharePointE2ESuite) SetupSuite() { - t := suite.T() ctx, flush := tester.NewContext() - defer flush() - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - - ctx = config.SetViper(ctx, suite.vpr) + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.recorder = recorder + suite.cfgFP = cfgFilePath suite.m365SiteID = tester.M365SiteID(t) - - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) } func (suite *NoBackupSharePointE2ESuite) TestSharePointBackupListCmd_empty() { @@ -133,33 +119,21 @@ func TestBackupDeleteSharePointE2ESuite(t *testing.T) { } func (suite *BackupDeleteSharePointE2ESuite) SetupSuite() { - t := suite.T() - - // prepare common details - suite.acct = tester.NewM365Account(t) - suite.st = tester.NewPrefixedS3Storage(t) - - cfg, err := suite.st.S3Config() - require.NoError(t, err, clues.ToCore(err)) - - force := map[string]string{ - tester.TestCfgAccountProvider: "M365", - tester.TestCfgStorageProvider: "S3", - tester.TestCfgPrefix: cfg.Prefix, - } - suite.vpr, suite.cfgFP = tester.MakeTempTestConfigClone(t, force) - ctx, flush := tester.NewContext() - ctx = config.SetViper(ctx, suite.vpr) - defer flush() - // init the repo first - suite.repo, err = repository.Initialize(ctx, suite.acct, suite.st, control.Options{}) - require.NoError(t, err, clues.ToCore(err)) + t := suite.T() + acct, st, repo, vpr, recorder, cfgFilePath := prepM365Test(t, ctx) + + suite.acct = acct + suite.st = st + suite.repo = repo + suite.vpr = vpr + suite.recorder = recorder + suite.cfgFP = cfgFilePath var ( - m365SiteID = strings.ToLower(tester.M365SiteID(t)) + m365SiteID = tester.M365SiteID(t) sites = []string{m365SiteID} idToName = map[string]string{m365SiteID: m365SiteID} nameToID = map[string]string{m365SiteID: m365SiteID} @@ -173,9 +147,11 @@ func (suite *BackupDeleteSharePointE2ESuite) SetupSuite() { sel := selectors.NewSharePointBackup(sites) sel.Include(testdata.SharePointBackupFolderScope(sel)) - suite.backupOp, err = suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) + backupOp, err := suite.repo.NewBackupWithLookup(ctx, sel.Selector, ins) require.NoError(t, err, clues.ToCore(err)) + suite.backupOp = backupOp + err = suite.backupOp.Run(ctx) require.NoError(t, err, clues.ToCore(err)) } diff --git a/src/internal/tester/resource_owners.go b/src/internal/tester/resource_owners.go index 19c73f8e1..a4afb97ff 100644 --- a/src/internal/tester/resource_owners.go +++ b/src/internal/tester/resource_owners.go @@ -20,7 +20,7 @@ func M365TenantID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving m365 tenant ID from test configuration", clues.ToCore(err)) - return cfg[TestCfgAzureTenantID] + return strings.ToLower(cfg[TestCfgAzureTenantID]) } // M365TenantID returns a tenantID string representing the azureTenantID described @@ -33,7 +33,7 @@ func GetM365TenantID(ctx context.Context) string { logger.Ctx(ctx).Error(err, "retrieving m365 tenant ID from test configuration") } - return cfg[TestCfgAzureTenantID] + return strings.ToLower(cfg[TestCfgAzureTenantID]) } // M365UserID returns an userID string representing the m365UserID described @@ -44,7 +44,7 @@ func M365UserID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving m365 user id from test configuration", clues.ToCore(err)) - return cfg[TestCfgUserID] + return strings.ToLower(cfg[TestCfgUserID]) } // GetM365UserID returns an userID string representing the m365UserID described @@ -57,7 +57,7 @@ func GetM365UserID(ctx context.Context) string { logger.Ctx(ctx).Error(err, "retrieving m365 user id from test configuration") } - return cfg[TestCfgUserID] + return strings.ToLower(cfg[TestCfgUserID]) } // SecondaryM365UserID returns an userID string representing the m365UserID @@ -69,7 +69,7 @@ func SecondaryM365UserID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving secondary m365 user id from test configuration", clues.ToCore(err)) - return cfg[TestCfgSecondaryUserID] + return strings.ToLower(cfg[TestCfgSecondaryUserID]) } // LoadTestM365SiteID returns a siteID string representing the m365SiteID @@ -81,7 +81,7 @@ func LoadTestM365SiteID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving load test m365 site id from test configuration", clues.ToCore(err)) - return cfg[TestCfgSiteID] + return strings.ToLower(cfg[TestCfgSiteID]) } // LoadTestM365UserID returns an userID string representing the m365UserID @@ -93,7 +93,7 @@ func LoadTestM365UserID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving load test m365 user id from test configuration", clues.ToCore(err)) - return cfg[TestCfgLoadTestUserID] + return strings.ToLower(cfg[TestCfgLoadTestUserID]) } // expects cfg value to be a string representing an array such as: @@ -113,7 +113,7 @@ func LoadTestM365OrgSites(t *testing.T) []string { // return strings.Split(sites, ",") - return []string{cfg[TestCfgSiteID]} + return []string{strings.ToLower(cfg[TestCfgSiteID])} } // expects cfg value to be a string representing an array such as: @@ -159,7 +159,7 @@ func M365SiteID(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving m365 site id from test configuration", clues.ToCore(err)) - return cfg[TestCfgSiteID] + return strings.ToLower(cfg[TestCfgSiteID]) } // M365SiteURL returns a site webURL string representing the m365SiteURL described @@ -170,5 +170,5 @@ func M365SiteURL(t *testing.T) string { cfg, err := readTestConfig() require.NoError(t, err, "retrieving m365 site url from test configuration", clues.ToCore(err)) - return cfg[TestCfgSiteURL] + return strings.ToLower(cfg[TestCfgSiteURL]) }