normalize folders restored in testing (#3363)
Normalize all test folders to use a constant prefix: Corso_Test. This cleans up and centralizes all per- test variations on the restore destination. --- #### Does this PR need a docs update or release note? - [x] ⛔ No #### Type of change - [x] 🤖 Supportability/Tests #### Test Plan - [x] ⚡ Unit test - [x] 💚 E2E
This commit is contained in:
parent
7b378f6013
commit
833216c8ae
22
.github/workflows/sanity-test.yaml
vendored
22
.github/workflows/sanity-test.yaml
vendored
@ -126,7 +126,7 @@ jobs:
|
|||||||
go run . exchange emails \
|
go run . exchange emails \
|
||||||
--user ${TEST_USER} \
|
--user ${TEST_USER} \
|
||||||
--tenant ${{ env.AZURE_TENANT_ID }} \
|
--tenant ${{ env.AZURE_TENANT_ID }} \
|
||||||
--destination Corso_Restore_st_${{ steps.repo-init.outputs.result }} \
|
--destination Corso_Test_sanity${{ steps.repo-init.outputs.result }} \
|
||||||
--count 4
|
--count 4
|
||||||
|
|
||||||
- name: Backup exchange test
|
- name: Backup exchange test
|
||||||
@ -192,7 +192,7 @@ jobs:
|
|||||||
echo -e "\nBackup Exchange restore test\n" >> ${CORSO_LOG_FILE}
|
echo -e "\nBackup Exchange restore test\n" >> ${CORSO_LOG_FILE}
|
||||||
./corso restore exchange \
|
./corso restore exchange \
|
||||||
--no-stats \
|
--no-stats \
|
||||||
--email-folder Corso_Restore_st_${{ steps.repo-init.outputs.result }} \
|
--email-folder Corso_Test_sanity${{ steps.repo-init.outputs.result }} \
|
||||||
--hide-progress \
|
--hide-progress \
|
||||||
--backup "${{ steps.exchange-test.outputs.result }}" \
|
--backup "${{ steps.exchange-test.outputs.result }}" \
|
||||||
2>&1 | tee $TEST_RESULT/exchange-restore-test.txt
|
2>&1 | tee $TEST_RESULT/exchange-restore-test.txt
|
||||||
@ -202,7 +202,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SANITY_RESTORE_FOLDER: ${{ steps.exchange-restore-test.outputs.result }}
|
SANITY_RESTORE_FOLDER: ${{ steps.exchange-restore-test.outputs.result }}
|
||||||
SANITY_RESTORE_SERVICE: "exchange"
|
SANITY_RESTORE_SERVICE: "exchange"
|
||||||
TEST_DATA: Corso_Restore_st_${{ steps.repo-init.outputs.result }}
|
TEST_DATA: Corso_Test_sanity${{ steps.repo-init.outputs.result }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
./sanityTest
|
./sanityTest
|
||||||
@ -239,7 +239,7 @@ jobs:
|
|||||||
--no-stats \
|
--no-stats \
|
||||||
--hide-progress \
|
--hide-progress \
|
||||||
--backup "${{ steps.exchange-incremental-test.outputs.result }}" \
|
--backup "${{ steps.exchange-incremental-test.outputs.result }}" \
|
||||||
--email-folder Corso_Restore_st_${{ steps.repo-init.outputs.result }} \
|
--email-folder Corso_Test_sanity${{ steps.repo-init.outputs.result }} \
|
||||||
2>&1 | tee $TEST_RESULT/exchange-incremantal-restore-test.txt
|
2>&1 | tee $TEST_RESULT/exchange-incremantal-restore-test.txt
|
||||||
echo result=$(grep -i -e 'Restoring to folder ' $TEST_RESULT/exchange-incremantal-restore-test.txt | sed "s/Restoring to folder//" ) >> $GITHUB_OUTPUT
|
echo result=$(grep -i -e 'Restoring to folder ' $TEST_RESULT/exchange-incremantal-restore-test.txt | sed "s/Restoring to folder//" ) >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SANITY_RESTORE_FOLDER: ${{ steps.exchange-incremantal-restore-test.outputs.result }}
|
SANITY_RESTORE_FOLDER: ${{ steps.exchange-incremantal-restore-test.outputs.result }}
|
||||||
SANITY_RESTORE_SERVICE: "exchange"
|
SANITY_RESTORE_SERVICE: "exchange"
|
||||||
TEST_DATA: Corso_Restore_st_${{ steps.repo-init.outputs.result }}
|
TEST_DATA: Corso_Test_sanity${{ steps.repo-init.outputs.result }}
|
||||||
BASE_BACKUP: ${{ steps.exchange-restore-test.outputs.result }}
|
BASE_BACKUP: ${{ steps.exchange-restore-test.outputs.result }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@ -272,7 +272,7 @@ jobs:
|
|||||||
--user ${TEST_USER} \
|
--user ${TEST_USER} \
|
||||||
--secondaryuser ${{ env.SECONDARY_TEST_USER }} \
|
--secondaryuser ${{ env.SECONDARY_TEST_USER }} \
|
||||||
--tenant ${{ env.AZURE_TENANT_ID }} \
|
--tenant ${{ env.AZURE_TENANT_ID }} \
|
||||||
--destination Corso_Restore_st_$suffix \
|
--destination Corso_Test_sanity$suffix \
|
||||||
--count 4
|
--count 4
|
||||||
|
|
||||||
echo result="$suffix" >> $GITHUB_OUTPUT
|
echo result="$suffix" >> $GITHUB_OUTPUT
|
||||||
@ -341,7 +341,7 @@ jobs:
|
|||||||
./corso restore onedrive \
|
./corso restore onedrive \
|
||||||
--no-stats \
|
--no-stats \
|
||||||
--restore-permissions \
|
--restore-permissions \
|
||||||
--folder Corso_Restore_st_${{ steps.new-data-creation-onedrive.outputs.result }} \
|
--folder Corso_Test_sanity${{ steps.new-data-creation-onedrive.outputs.result }} \
|
||||||
--hide-progress \
|
--hide-progress \
|
||||||
--backup "${{ steps.onedrive-test.outputs.result }}" \
|
--backup "${{ steps.onedrive-test.outputs.result }}" \
|
||||||
2>&1 | tee $TEST_RESULT/onedrive-restore-test.txt
|
2>&1 | tee $TEST_RESULT/onedrive-restore-test.txt
|
||||||
@ -351,7 +351,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SANITY_RESTORE_FOLDER: ${{ steps.onedrive-restore-test.outputs.result }}
|
SANITY_RESTORE_FOLDER: ${{ steps.onedrive-restore-test.outputs.result }}
|
||||||
SANITY_RESTORE_SERVICE: "onedrive"
|
SANITY_RESTORE_SERVICE: "onedrive"
|
||||||
TEST_DATA: Corso_Restore_st_${{ steps.new-data-creation-onedrive.outputs.result }}
|
TEST_DATA: Corso_Test_sanity${{ steps.new-data-creation-onedrive.outputs.result }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
./sanityTest
|
./sanityTest
|
||||||
@ -368,7 +368,7 @@ jobs:
|
|||||||
--user ${TEST_USER} \
|
--user ${TEST_USER} \
|
||||||
--secondaryuser ${{ env.SECONDARY_TEST_USER }} \
|
--secondaryuser ${{ env.SECONDARY_TEST_USER }} \
|
||||||
--tenant ${{ env.AZURE_TENANT_ID }} \
|
--tenant ${{ env.AZURE_TENANT_ID }} \
|
||||||
--destination Corso_Restore_st_${{ steps.new-data-creation-onedrive.outputs.result }} \
|
--destination Corso_Test_sanity${{ steps.new-data-creation-onedrive.outputs.result }} \
|
||||||
--count 4
|
--count 4
|
||||||
|
|
||||||
# incremental backup
|
# incremental backup
|
||||||
@ -404,7 +404,7 @@ jobs:
|
|||||||
--no-stats \
|
--no-stats \
|
||||||
--restore-permissions \
|
--restore-permissions \
|
||||||
--hide-progress \
|
--hide-progress \
|
||||||
--folder Corso_Restore_st_${{ steps.new-data-creation-onedrive.outputs.result }} \
|
--folder Corso_Test_sanity${{ steps.new-data-creation-onedrive.outputs.result }} \
|
||||||
--backup "${{ steps.onedrive-incremental-test.outputs.result }}" \
|
--backup "${{ steps.onedrive-incremental-test.outputs.result }}" \
|
||||||
2>&1 | tee $TEST_RESULT/onedrive-incremental-restore-test.txt
|
2>&1 | tee $TEST_RESULT/onedrive-incremental-restore-test.txt
|
||||||
echo result=$(grep -i -e 'Restoring to folder ' $TEST_RESULT/onedrive-incremental-restore-test.txt | sed "s/Restoring to folder//") >> $GITHUB_OUTPUT
|
echo result=$(grep -i -e 'Restoring to folder ' $TEST_RESULT/onedrive-incremental-restore-test.txt | sed "s/Restoring to folder//") >> $GITHUB_OUTPUT
|
||||||
@ -413,7 +413,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SANITY_RESTORE_FOLDER: ${{ steps.onedrive-incremental-restore-test.outputs.result }}
|
SANITY_RESTORE_FOLDER: ${{ steps.onedrive-incremental-restore-test.outputs.result }}
|
||||||
SANITY_RESTORE_SERVICE: "onedrive"
|
SANITY_RESTORE_SERVICE: "onedrive"
|
||||||
TEST_DATA: Corso_Restore_st_${{ steps.new-data-creation-onedrive.outputs.result }}
|
TEST_DATA: Corso_Test_sanity${{ steps.new-data-creation-onedrive.outputs.result }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
./sanityTest
|
./sanityTest
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import (
|
|||||||
"github.com/alcionai/corso/src/pkg/account"
|
"github.com/alcionai/corso/src/pkg/account"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors"
|
"github.com/alcionai/corso/src/pkg/selectors"
|
||||||
|
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||||
"github.com/alcionai/corso/src/pkg/storage"
|
"github.com/alcionai/corso/src/pkg/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -172,7 +173,7 @@ func (suite *BackupDeleteOneDriveE2ESuite) SetupSuite() {
|
|||||||
|
|
||||||
// some tests require an existing backup
|
// some tests require an existing backup
|
||||||
sel := selectors.NewOneDriveBackup(users)
|
sel := selectors.NewOneDriveBackup(users)
|
||||||
sel.Include(sel.Folders(selectors.Any()))
|
sel.Include(selTD.OneDriveBackupFolderScope(sel))
|
||||||
|
|
||||||
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))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import (
|
|||||||
"github.com/alcionai/corso/src/pkg/fault"
|
"github.com/alcionai/corso/src/pkg/fault"
|
||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors"
|
"github.com/alcionai/corso/src/pkg/selectors"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors/testdata"
|
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -160,7 +160,7 @@ func (suite *DataCollectionIntgSuite) TestDataCollections_invalidResourceOwner()
|
|||||||
name: "Invalid onedrive backup user",
|
name: "Invalid onedrive backup user",
|
||||||
getSelector: func(t *testing.T) selectors.Selector {
|
getSelector: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup(owners)
|
sel := selectors.NewOneDriveBackup(owners)
|
||||||
sel.Include(sel.Folders(selectors.Any()))
|
sel.Include(selTD.OneDriveBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -168,7 +168,7 @@ func (suite *DataCollectionIntgSuite) TestDataCollections_invalidResourceOwner()
|
|||||||
name: "Invalid sharepoint backup site",
|
name: "Invalid sharepoint backup site",
|
||||||
getSelector: func(t *testing.T) selectors.Selector {
|
getSelector: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewSharePointBackup(owners)
|
sel := selectors.NewSharePointBackup(owners)
|
||||||
sel.Include(testdata.SharePointBackupFolderScope(sel))
|
sel.Include(selTD.SharePointBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -185,7 +185,7 @@ func (suite *DataCollectionIntgSuite) TestDataCollections_invalidResourceOwner()
|
|||||||
name: "missing onedrive backup user",
|
name: "missing onedrive backup user",
|
||||||
getSelector: func(t *testing.T) selectors.Selector {
|
getSelector: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup(owners)
|
sel := selectors.NewOneDriveBackup(owners)
|
||||||
sel.Include(sel.Folders(selectors.Any()))
|
sel.Include(selTD.OneDriveBackupFolderScope(sel))
|
||||||
sel.DiscreteOwner = ""
|
sel.DiscreteOwner = ""
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
@ -194,7 +194,7 @@ func (suite *DataCollectionIntgSuite) TestDataCollections_invalidResourceOwner()
|
|||||||
name: "missing sharepoint backup site",
|
name: "missing sharepoint backup site",
|
||||||
getSelector: func(t *testing.T) selectors.Selector {
|
getSelector: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewSharePointBackup(owners)
|
sel := selectors.NewSharePointBackup(owners)
|
||||||
sel.Include(testdata.SharePointBackupFolderScope(sel))
|
sel.Include(selTD.SharePointBackupFolderScope(sel))
|
||||||
sel.DiscreteOwner = ""
|
sel.DiscreteOwner = ""
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
@ -239,7 +239,7 @@ func (suite *DataCollectionIntgSuite) TestSharePointDataCollection() {
|
|||||||
name: "Libraries",
|
name: "Libraries",
|
||||||
getSelector: func() selectors.Selector {
|
getSelector: func() selectors.Selector {
|
||||||
sel := selectors.NewSharePointBackup(selSites)
|
sel := selectors.NewSharePointBackup(selSites)
|
||||||
sel.Include(testdata.SharePointBackupFolderScope(sel))
|
sel.Include(selTD.SharePointBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -549,7 +549,7 @@ func (suite *FolderCacheIntegrationSuite) TestCreateContainerDestination() {
|
|||||||
var (
|
var (
|
||||||
user = tester.M365UserID(suite.T())
|
user = tester.M365UserID(suite.T())
|
||||||
directoryCaches = make(map[path.CategoryType]graph.ContainerResolver)
|
directoryCaches = make(map[path.CategoryType]graph.ContainerResolver)
|
||||||
folderName = tester.DefaultTestRestoreDestination().ContainerName
|
folderName = tester.DefaultTestRestoreDestination("").ContainerName
|
||||||
tests = []struct {
|
tests = []struct {
|
||||||
name string
|
name string
|
||||||
pathFunc1 func(t *testing.T) path.Path
|
pathFunc1 func(t *testing.T) path.Path
|
||||||
|
|||||||
@ -3,14 +3,12 @@ package exchange
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/alcionai/clues"
|
"github.com/alcionai/clues"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
|
||||||
"github.com/alcionai/corso/src/internal/common/ptr"
|
"github.com/alcionai/corso/src/internal/common/ptr"
|
||||||
"github.com/alcionai/corso/src/internal/connector/exchange/api"
|
"github.com/alcionai/corso/src/internal/connector/exchange/api"
|
||||||
exchMock "github.com/alcionai/corso/src/internal/connector/exchange/mock"
|
exchMock "github.com/alcionai/corso/src/internal/connector/exchange/mock"
|
||||||
@ -67,8 +65,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreContact() {
|
|||||||
var (
|
var (
|
||||||
t = suite.T()
|
t = suite.T()
|
||||||
userID = tester.M365UserID(t)
|
userID = tester.M365UserID(t)
|
||||||
now = time.Now()
|
folderName = tester.DefaultTestRestoreDestination("contact").ContainerName
|
||||||
folderName = "TestRestoreContact: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
aFolder, err := suite.ac.Contacts().CreateContactFolder(ctx, userID, folderName)
|
aFolder, err := suite.ac.Contacts().CreateContactFolder(ctx, userID, folderName)
|
||||||
@ -102,7 +99,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreEvent() {
|
|||||||
var (
|
var (
|
||||||
t = suite.T()
|
t = suite.T()
|
||||||
userID = tester.M365UserID(t)
|
userID = tester.M365UserID(t)
|
||||||
subject = "TestRestoreEvent: " + dttm.FormatNow(dttm.SafeForTesting)
|
subject = tester.DefaultTestRestoreDestination("event").ContainerName
|
||||||
)
|
)
|
||||||
|
|
||||||
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, subject)
|
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, subject)
|
||||||
@ -172,7 +169,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
userID := tester.M365UserID(suite.T())
|
userID := tester.M365UserID(suite.T())
|
||||||
now := time.Now()
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
bytes []byte
|
bytes []byte
|
||||||
@ -184,7 +181,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageBytes("Restore Exchange Object"),
|
bytes: exchMock.MessageBytes("Restore Exchange Object"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailObject: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailobj").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -196,7 +193,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithDirectAttachment("Restore 1 Attachment"),
|
bytes: exchMock.MessageWithDirectAttachment("Restore 1 Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailwithAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailwattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -208,7 +205,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithItemAttachmentEvent("Event Item Attachment"),
|
bytes: exchMock.MessageWithItemAttachmentEvent("Event Item Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreEventItemAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("eventwattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -220,7 +217,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithItemAttachmentMail("Mail Item Attachment"),
|
bytes: exchMock.MessageWithItemAttachmentMail("Mail Item Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailItemAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailitemattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -235,7 +232,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
),
|
),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailBasicItemAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailbasicattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -250,7 +247,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
),
|
),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "ItemMailAttachmentwAttachment " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailnestattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -265,7 +262,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
),
|
),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "ItemMailAttachment_Contact " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailcontactattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -277,7 +274,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithNestedItemAttachmentEvent("Nested Item Attachment"),
|
bytes: exchMock.MessageWithNestedItemAttachmentEvent("Nested Item Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreNestedEventItemAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("nestedattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -289,7 +286,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithLargeAttachment("Restore Large Attachment"),
|
bytes: exchMock.MessageWithLargeAttachment("Restore Large Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailwithLargeAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("maillargeattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -301,7 +298,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithTwoAttachments("Restore 2 Attachments"),
|
bytes: exchMock.MessageWithTwoAttachments("Restore 2 Attachments"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailwithAttachments: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailtwoattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -313,7 +310,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.MessageWithOneDriveAttachment("Restore Reference(OneDrive) Attachment"),
|
bytes: exchMock.MessageWithOneDriveAttachment("Restore Reference(OneDrive) Attachment"),
|
||||||
category: path.EmailCategory,
|
category: path.EmailCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreMailwithReferenceAttachment: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("mailrefattch").ContainerName
|
||||||
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Mail().CreateMailFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -326,7 +323,7 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.ContactBytes("Test_Omega"),
|
bytes: exchMock.ContactBytes("Test_Omega"),
|
||||||
category: path.ContactsCategory,
|
category: path.ContactsCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
folderName := "TestRestoreContactObject: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("contact").ContainerName
|
||||||
folder, err := suite.ac.Contacts().CreateContactFolder(ctx, userID, folderName)
|
folder, err := suite.ac.Contacts().CreateContactFolder(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -338,8 +335,8 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.EventBytes("Restored Event Object"),
|
bytes: exchMock.EventBytes("Restored Event Object"),
|
||||||
category: path.EventsCategory,
|
category: path.EventsCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
calendarName := "TestRestoreEventObject: " + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("event").ContainerName
|
||||||
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, calendarName)
|
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
return ptr.Val(calendar.GetId())
|
return ptr.Val(calendar.GetId())
|
||||||
@ -350,8 +347,8 @@ func (suite *ExchangeRestoreSuite) TestRestoreExchangeObject() {
|
|||||||
bytes: exchMock.EventWithAttachment("Restored Event Attachment"),
|
bytes: exchMock.EventWithAttachment("Restored Event Attachment"),
|
||||||
category: path.EventsCategory,
|
category: path.EventsCategory,
|
||||||
destination: func(t *testing.T, ctx context.Context) string {
|
destination: func(t *testing.T, ctx context.Context) string {
|
||||||
calendarName := "TestRestoreEventObject_" + dttm.FormatTo(now, dttm.SafeForTesting)
|
folderName := tester.DefaultTestRestoreDestination("eventobj").ContainerName
|
||||||
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, calendarName)
|
calendar, err := suite.ac.Events().CreateCalendar(ctx, userID, folderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
return ptr.Val(calendar.GetId())
|
return ptr.Val(calendar.GetId())
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/alcionai/corso/src/internal/connector/support"
|
"github.com/alcionai/corso/src/internal/connector/support"
|
||||||
"github.com/alcionai/corso/src/internal/tester"
|
"github.com/alcionai/corso/src/internal/tester"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors"
|
"github.com/alcionai/corso/src/pkg/selectors"
|
||||||
|
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
@ -82,19 +83,19 @@ func (suite *DisconnectedGraphConnectorSuite) TestVerifyBackupInputs_allServices
|
|||||||
checkError: assert.NoError,
|
checkError: assert.NoError,
|
||||||
excludes: func(t *testing.T) selectors.Selector {
|
excludes: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
||||||
sel.Exclude(sel.Folders(selectors.Any()))
|
sel.Exclude(selTD.OneDriveBackupFolderScope(sel))
|
||||||
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
filters: func(t *testing.T) selectors.Selector {
|
filters: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
||||||
sel.Filter(sel.Folders(selectors.Any()))
|
sel.Filter(selTD.OneDriveBackupFolderScope(sel))
|
||||||
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
includes: func(t *testing.T) selectors.Selector {
|
includes: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"elliotReid@someHospital.org", "foo@SomeCompany.org"})
|
||||||
sel.Include(sel.Folders(selectors.Any()))
|
sel.Include(selTD.OneDriveBackupFolderScope(sel))
|
||||||
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
sel.DiscreteOwner = "elliotReid@someHospital.org"
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
@ -104,17 +105,17 @@ func (suite *DisconnectedGraphConnectorSuite) TestVerifyBackupInputs_allServices
|
|||||||
checkError: assert.NoError,
|
checkError: assert.NoError,
|
||||||
excludes: func(t *testing.T) selectors.Selector {
|
excludes: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
||||||
sel.Exclude(sel.Folders(selectors.Any()))
|
sel.Exclude(selTD.OneDriveBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
filters: func(t *testing.T) selectors.Selector {
|
filters: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
||||||
sel.Filter(sel.Folders(selectors.Any()))
|
sel.Filter(selTD.OneDriveBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
includes: func(t *testing.T) selectors.Selector {
|
includes: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
sel := selectors.NewOneDriveBackup([]string{"foo@SomeCompany.org"})
|
||||||
sel.Include(sel.Folders(selectors.Any()))
|
sel.Include(selTD.OneDriveBackupFolderScope(sel))
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1099,7 +1099,7 @@ func makeSharePointBackupSel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// backupSelectorForExpected creates a selector that can be used to backup the
|
// backupSelectorForExpected creates a selector that can be used to backup the
|
||||||
// given items in expected based on the item paths. Fails the test if items from
|
// given dests based on the item paths. Fails the test if items from
|
||||||
// multiple services are in expected.
|
// multiple services are in expected.
|
||||||
func backupSelectorForExpected(
|
func backupSelectorForExpected(
|
||||||
t *testing.T,
|
t *testing.T,
|
||||||
|
|||||||
@ -295,7 +295,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() {
|
|||||||
var (
|
var (
|
||||||
t = suite.T()
|
t = suite.T()
|
||||||
acct = tester.NewM365Account(t)
|
acct = tester.NewM365Account(t)
|
||||||
dest = tester.DefaultTestRestoreDestination()
|
dest = tester.DefaultTestRestoreDestination("")
|
||||||
sel = selectors.Selector{
|
sel = selectors.Selector{
|
||||||
Service: selectors.ServiceUnknown,
|
Service: selectors.ServiceUnknown,
|
||||||
}
|
}
|
||||||
@ -323,7 +323,7 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreFailsBadService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() {
|
func (suite *GraphConnectorIntegrationSuite) TestEmptyCollections() {
|
||||||
dest := tester.DefaultTestRestoreDestination()
|
dest := tester.DefaultTestRestoreDestination("")
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
col []data.RestoreCollection
|
col []data.RestoreCollection
|
||||||
@ -579,7 +579,7 @@ func runRestoreBackupTest(
|
|||||||
service: test.service,
|
service: test.service,
|
||||||
tenant: tenant,
|
tenant: tenant,
|
||||||
resourceOwners: resourceOwners,
|
resourceOwners: resourceOwners,
|
||||||
dest: tester.DefaultTestRestoreDestination(),
|
dest: tester.DefaultTestRestoreDestination(""),
|
||||||
}
|
}
|
||||||
|
|
||||||
totalItems, totalKopiaItems, collections, expectedData := getCollectionsAndExpected(
|
totalItems, totalKopiaItems, collections, expectedData := getCollectionsAndExpected(
|
||||||
@ -625,7 +625,7 @@ func runRestoreTestWithVerion(
|
|||||||
service: test.service,
|
service: test.service,
|
||||||
tenant: tenant,
|
tenant: tenant,
|
||||||
resourceOwners: resourceOwners,
|
resourceOwners: resourceOwners,
|
||||||
dest: tester.DefaultTestRestoreDestination(),
|
dest: tester.DefaultTestRestoreDestination(""),
|
||||||
}
|
}
|
||||||
|
|
||||||
totalItems, _, collections, _ := getCollectionsAndExpected(
|
totalItems, _, collections, _ := getCollectionsAndExpected(
|
||||||
@ -664,7 +664,7 @@ func runRestoreBackupTestVersions(
|
|||||||
service: test.service,
|
service: test.service,
|
||||||
tenant: tenant,
|
tenant: tenant,
|
||||||
resourceOwners: resourceOwners,
|
resourceOwners: resourceOwners,
|
||||||
dest: tester.DefaultTestRestoreDestination(),
|
dest: tester.DefaultTestRestoreDestination(""),
|
||||||
}
|
}
|
||||||
|
|
||||||
totalItems, _, collections, _ := getCollectionsAndExpected(
|
totalItems, _, collections, _ := getCollectionsAndExpected(
|
||||||
@ -1042,7 +1042,7 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames
|
|||||||
|
|
||||||
for i, collection := range test.collections {
|
for i, collection := range test.collections {
|
||||||
// Get a dest per collection so they're independent.
|
// Get a dest per collection so they're independent.
|
||||||
dest := tester.DefaultTestRestoreDestination()
|
dest := tester.DefaultTestRestoreDestination("")
|
||||||
expectedDests = append(expectedDests, destAndCats{
|
expectedDests = append(expectedDests, destAndCats{
|
||||||
resourceOwner: suite.user,
|
resourceOwner: suite.user,
|
||||||
dest: dest.ContainerName,
|
dest: dest.ContainerName,
|
||||||
@ -1214,9 +1214,7 @@ func (suite *GraphConnectorIntegrationSuite) TestBackup_CreatesPrefixCollections
|
|||||||
resource: Users,
|
resource: Users,
|
||||||
selectorFunc: func(t *testing.T) selectors.Selector {
|
selectorFunc: func(t *testing.T) selectors.Selector {
|
||||||
sel := selectors.NewOneDriveBackup([]string{suite.user})
|
sel := selectors.NewOneDriveBackup([]string{suite.user})
|
||||||
sel.Include(
|
sel.Include(sel.Folders([]string{selectors.NoneTgt}))
|
||||||
sel.Folders([]string{selectors.NoneTgt}),
|
|
||||||
)
|
|
||||||
|
|
||||||
return sel.Selector
|
return sel.Selector
|
||||||
},
|
},
|
||||||
|
|||||||
@ -279,24 +279,24 @@ func (suite *OneDriveUnitSuite) TestDrives() {
|
|||||||
|
|
||||||
// Integration tests
|
// Integration tests
|
||||||
|
|
||||||
type OneDriveSuite struct {
|
type OneDriveIntgSuite struct {
|
||||||
tester.Suite
|
tester.Suite
|
||||||
userID string
|
userID string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOneDriveSuite(t *testing.T) {
|
func TestOneDriveSuite(t *testing.T) {
|
||||||
suite.Run(t, &OneDriveSuite{
|
suite.Run(t, &OneDriveIntgSuite{
|
||||||
Suite: tester.NewIntegrationSuite(
|
Suite: tester.NewIntegrationSuite(
|
||||||
t,
|
t,
|
||||||
[][]string{tester.M365AcctCredEnvs}),
|
[][]string{tester.M365AcctCredEnvs}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *OneDriveSuite) SetupSuite() {
|
func (suite *OneDriveIntgSuite) SetupSuite() {
|
||||||
suite.userID = tester.SecondaryM365UserID(suite.T())
|
suite.userID = tester.SecondaryM365UserID(suite.T())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
|
func (suite *OneDriveIntgSuite) TestCreateGetDeleteFolder() {
|
||||||
ctx, flush := tester.NewContext()
|
ctx, flush := tester.NewContext()
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
@ -401,7 +401,7 @@ func (fm testFolderMatcher) Matches(p string) bool {
|
|||||||
return fm.scope.Matches(selectors.OneDriveFolder, p)
|
return fm.scope.Matches(selectors.OneDriveFolder, p)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *OneDriveSuite) TestOneDriveNewCollections() {
|
func (suite *OneDriveIntgSuite) TestOneDriveNewCollections() {
|
||||||
creds, err := tester.NewM365Account(suite.T()).M365Config()
|
creds, err := tester.NewM365Account(suite.T()).M365Config()
|
||||||
require.NoError(suite.T(), err, clues.ToCore(err))
|
require.NoError(suite.T(), err, clues.ToCore(err))
|
||||||
|
|
||||||
|
|||||||
@ -128,8 +128,7 @@ func (suite *ItemIntegrationSuite) TestItemReader_oneDrive() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TestItemWriter is an integration test for uploading data to OneDrive
|
// TestItemWriter is an integration test for uploading data to OneDrive
|
||||||
// It creates a new `testfolder_<timestamp` folder with a new
|
// It creates a new folder with a new item and writes data to it
|
||||||
// testitem_<timestamp> item and writes data to it
|
|
||||||
func (suite *ItemIntegrationSuite) TestItemWriter() {
|
func (suite *ItemIntegrationSuite) TestItemWriter() {
|
||||||
table := []struct {
|
table := []struct {
|
||||||
name string
|
name string
|
||||||
@ -155,24 +154,20 @@ func (suite *ItemIntegrationSuite) TestItemWriter() {
|
|||||||
root, err := srv.Client().DrivesById(test.driveID).Root().Get(ctx, nil)
|
root, err := srv.Client().DrivesById(test.driveID).Root().Get(ctx, nil)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
// Test Requirement 2: "Test Folder" should exist
|
newFolderName := tester.DefaultTestRestoreDestination("folder").ContainerName
|
||||||
folder, err := api.GetFolderByName(ctx, srv, test.driveID, ptr.Val(root.GetId()), "Test Folder")
|
t.Logf("creating folder %s", newFolderName)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
|
||||||
|
|
||||||
newFolderName := "testfolder_" + dttm.FormatNow(dttm.SafeForTesting)
|
|
||||||
t.Logf("Test will create folder %s", newFolderName)
|
|
||||||
|
|
||||||
newFolder, err := CreateItem(
|
newFolder, err := CreateItem(
|
||||||
ctx,
|
ctx,
|
||||||
srv,
|
srv,
|
||||||
test.driveID,
|
test.driveID,
|
||||||
ptr.Val(folder.GetId()),
|
ptr.Val(root.GetId()),
|
||||||
newItem(newFolderName, true))
|
newItem(newFolderName, true))
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
require.NotNil(t, newFolder.GetId())
|
require.NotNil(t, newFolder.GetId())
|
||||||
|
|
||||||
newItemName := "testItem_" + dttm.FormatNow(dttm.SafeForTesting)
|
newItemName := "testItem_" + dttm.FormatNow(dttm.SafeForTesting)
|
||||||
t.Logf("Test will create item %s", newItemName)
|
t.Logf("creating item %s", newItemName)
|
||||||
|
|
||||||
newItem, err := CreateItem(
|
newItem, err := CreateItem(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
|
||||||
"github.com/alcionai/corso/src/internal/connector/sharepoint"
|
"github.com/alcionai/corso/src/internal/connector/sharepoint"
|
||||||
"github.com/alcionai/corso/src/internal/connector/sharepoint/api"
|
"github.com/alcionai/corso/src/internal/connector/sharepoint/api"
|
||||||
spMock "github.com/alcionai/corso/src/internal/connector/sharepoint/mock"
|
spMock "github.com/alcionai/corso/src/internal/connector/sharepoint/mock"
|
||||||
@ -81,7 +80,7 @@ func (suite *SharePointPageSuite) TestRestoreSinglePage() {
|
|||||||
|
|
||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
|
||||||
destName := "Corso_Restore_" + dttm.FormatNow(dttm.SafeForTesting)
|
destName := tester.DefaultTestRestoreDestination("").ContainerName
|
||||||
testName := "MockPage"
|
testName := "MockPage"
|
||||||
|
|
||||||
// Create Test Page
|
// Create Test Page
|
||||||
@ -98,8 +97,7 @@ func (suite *SharePointPageSuite) TestRestoreSinglePage() {
|
|||||||
suite.service,
|
suite.service,
|
||||||
pageData,
|
pageData,
|
||||||
suite.siteID,
|
suite.siteID,
|
||||||
destName,
|
destName)
|
||||||
)
|
|
||||||
|
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
require.NotNil(t, info)
|
require.NotNil(t, info)
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
|
||||||
"github.com/alcionai/corso/src/internal/common/ptr"
|
"github.com/alcionai/corso/src/internal/common/ptr"
|
||||||
"github.com/alcionai/corso/src/internal/connector/sharepoint/api"
|
"github.com/alcionai/corso/src/internal/connector/sharepoint/api"
|
||||||
spMock "github.com/alcionai/corso/src/internal/connector/sharepoint/mock"
|
spMock "github.com/alcionai/corso/src/internal/connector/sharepoint/mock"
|
||||||
@ -193,7 +192,7 @@ func (suite *SharePointCollectionSuite) TestListCollection_Restore() {
|
|||||||
info: sharePointListInfo(listing, int64(len(byteArray))),
|
info: sharePointListInfo(listing, int64(len(byteArray))),
|
||||||
}
|
}
|
||||||
|
|
||||||
destName := "Corso_Restore_" + dttm.FormatNow(dttm.SafeForTesting)
|
destName := tester.DefaultTestRestoreDestination("").ContainerName
|
||||||
|
|
||||||
deets, err := restoreListItem(ctx, service, listData, suite.siteID, destName)
|
deets, err := restoreListItem(ctx, service, listData, suite.siteID, destName)
|
||||||
assert.NoError(t, err, clues.ToCore(err))
|
assert.NoError(t, err, clues.ToCore(err))
|
||||||
|
|||||||
@ -125,7 +125,7 @@ func RestoreCollections(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// restoreListItem utility function restores a List to the siteID.
|
// restoreListItem utility function restores a List to the siteID.
|
||||||
// The name is changed to to Corso_Restore_{timeStame}_name
|
// The name is changed to to {DestName}_{name}
|
||||||
// API Reference: https://learn.microsoft.com/en-us/graph/api/list-create?view=graph-rest-1.0&tabs=http
|
// API Reference: https://learn.microsoft.com/en-us/graph/api/list-create?view=graph-rest-1.0&tabs=http
|
||||||
// Restored List can be verified within the Site contents.
|
// Restored List can be verified within the Site contents.
|
||||||
func restoreListItem(
|
func restoreListItem(
|
||||||
|
|||||||
@ -46,10 +46,13 @@ import (
|
|||||||
"github.com/alcionai/corso/src/pkg/fault"
|
"github.com/alcionai/corso/src/pkg/fault"
|
||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors"
|
"github.com/alcionai/corso/src/pkg/selectors"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors/testdata"
|
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||||
"github.com/alcionai/corso/src/pkg/store"
|
"github.com/alcionai/corso/src/pkg/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Does not use the tester.DefaultTestRestoreDestination syntax as some of these
|
||||||
|
// items are created directly, not as a result of restoration, and we want to ensure
|
||||||
|
// they get clearly selected without accidental overlap.
|
||||||
const incrementalsDestContainerPrefix = "incrementals_ci_"
|
const incrementalsDestContainerPrefix = "incrementals_ci_"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@ -1136,7 +1139,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_oneDrive() {
|
|||||||
osel = selectors.NewOneDriveBackup([]string{m365UserID})
|
osel = selectors.NewOneDriveBackup([]string{m365UserID})
|
||||||
)
|
)
|
||||||
|
|
||||||
osel.Include(osel.AllData())
|
osel.Include(selTD.OneDriveBackupFolderScope(osel))
|
||||||
|
|
||||||
bo, _, _, _, _, _, closer := prepNewTestBackupOp(t, ctx, mb, osel.Selector, control.Toggles{}, version.Backup)
|
bo, _, _, _, _, _, closer := prepNewTestBackupOp(t, ctx, mb, osel.Selector, control.Toggles{}, version.Backup)
|
||||||
defer closer()
|
defer closer()
|
||||||
@ -1694,7 +1697,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_oneDriveOwnerMigration() {
|
|||||||
uname := ptr.Val(userable.GetUserPrincipalName())
|
uname := ptr.Val(userable.GetUserPrincipalName())
|
||||||
|
|
||||||
oldsel := selectors.NewOneDriveBackup([]string{uname})
|
oldsel := selectors.NewOneDriveBackup([]string{uname})
|
||||||
oldsel.Include(oldsel.Folders([]string{"test"}, selectors.ExactMatch()))
|
oldsel.Include(selTD.OneDriveBackupFolderScope(oldsel))
|
||||||
|
|
||||||
bo, _, kw, ms, gc, sel, closer := prepNewTestBackupOp(t, ctx, mb, oldsel.Selector, ffs, 0)
|
bo, _, kw, ms, gc, sel, closer := prepNewTestBackupOp(t, ctx, mb, oldsel.Selector, ffs, 0)
|
||||||
defer closer()
|
defer closer()
|
||||||
@ -1716,7 +1719,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_oneDriveOwnerMigration() {
|
|||||||
runAndCheckBackup(t, ctx, &bo, mb, false)
|
runAndCheckBackup(t, ctx, &bo, mb, false)
|
||||||
|
|
||||||
newsel := selectors.NewOneDriveBackup([]string{uid})
|
newsel := selectors.NewOneDriveBackup([]string{uid})
|
||||||
newsel.Include(newsel.Folders([]string{"test"}, selectors.ExactMatch()))
|
newsel.Include(selTD.OneDriveBackupFolderScope(newsel))
|
||||||
sel = newsel.SetDiscreteOwnerIDName(uid, uname)
|
sel = newsel.SetDiscreteOwnerIDName(uid, uname)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -1795,7 +1798,7 @@ func (suite *BackupOpIntegrationSuite) TestBackup_Run_sharePoint() {
|
|||||||
sel = selectors.NewSharePointBackup([]string{suite.site})
|
sel = selectors.NewSharePointBackup([]string{suite.site})
|
||||||
)
|
)
|
||||||
|
|
||||||
sel.Include(testdata.SharePointBackupFolderScope(sel))
|
sel.Include(selTD.SharePointBackupFolderScope(sel))
|
||||||
|
|
||||||
bo, _, kw, _, _, sels, closer := prepNewTestBackupOp(t, ctx, mb, sel.Selector, control.Toggles{}, version.Backup)
|
bo, _, kw, _, _, sels, closer := prepNewTestBackupOp(t, ctx, mb, sel.Selector, control.Toggles{}, version.Backup)
|
||||||
defer closer()
|
defer closer()
|
||||||
|
|||||||
@ -55,7 +55,7 @@ func (suite *RestoreOpSuite) TestRestoreOperation_PersistResults() {
|
|||||||
gc = &mock.GraphConnector{}
|
gc = &mock.GraphConnector{}
|
||||||
acct = account.Account{}
|
acct = account.Account{}
|
||||||
now = time.Now()
|
now = time.Now()
|
||||||
dest = tester.DefaultTestRestoreDestination()
|
dest = tester.DefaultTestRestoreDestination("")
|
||||||
)
|
)
|
||||||
|
|
||||||
table := []struct {
|
table := []struct {
|
||||||
@ -220,7 +220,7 @@ func (suite *RestoreOpIntegrationSuite) TestNewRestoreOperation() {
|
|||||||
sw = &store.Wrapper{}
|
sw = &store.Wrapper{}
|
||||||
gc = &mock.GraphConnector{}
|
gc = &mock.GraphConnector{}
|
||||||
acct = tester.NewM365Account(suite.T())
|
acct = tester.NewM365Account(suite.T())
|
||||||
dest = tester.DefaultTestRestoreDestination()
|
dest = tester.DefaultTestRestoreDestination("")
|
||||||
opts = control.Defaults()
|
opts = control.Defaults()
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ func (suite *RestoreOpIntegrationSuite) TestRestore_Run() {
|
|||||||
{
|
{
|
||||||
name: "Exchange_Restore",
|
name: "Exchange_Restore",
|
||||||
owner: tester.M365UserID(suite.T()),
|
owner: tester.M365UserID(suite.T()),
|
||||||
dest: tester.DefaultTestRestoreDestination(),
|
dest: tester.DefaultTestRestoreDestination(""),
|
||||||
getSelector: func(t *testing.T, owners []string) selectors.Selector {
|
getSelector: func(t *testing.T, owners []string) selectors.Selector {
|
||||||
rsel := selectors.NewExchangeRestore(owners)
|
rsel := selectors.NewExchangeRestore(owners)
|
||||||
rsel.Include(rsel.AllData())
|
rsel.Include(rsel.AllData())
|
||||||
@ -464,7 +464,7 @@ func (suite *RestoreOpIntegrationSuite) TestRestore_Run_errorNoResults() {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
t = suite.T()
|
t = suite.T()
|
||||||
dest = tester.DefaultTestRestoreDestination()
|
dest = tester.DefaultTestRestoreDestination("")
|
||||||
mb = evmock.NewBus()
|
mb = evmock.NewBus()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,26 @@
|
|||||||
package tester
|
package tester
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
"github.com/alcionai/corso/src/internal/common/dttm"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DefaultTestRestoreDestination() control.RestoreDestination {
|
const RestoreFolderPrefix = "Corso_Test"
|
||||||
// Use microsecond granularity to help reduce collisions.
|
|
||||||
return control.DefaultRestoreDestination(dttm.SafeForTesting)
|
func DefaultTestRestoreDestination(namespace string) control.RestoreDestination {
|
||||||
|
var (
|
||||||
|
dest = control.DefaultRestoreDestination(dttm.SafeForTesting)
|
||||||
|
sft = dttm.FormatNow(dttm.SafeForTesting)
|
||||||
|
)
|
||||||
|
|
||||||
|
parts := []string{RestoreFolderPrefix, namespace, sft}
|
||||||
|
if len(namespace) == 0 {
|
||||||
|
parts = []string{RestoreFolderPrefix, sft}
|
||||||
|
}
|
||||||
|
|
||||||
|
dest.ContainerName = strings.Join(parts, "_")
|
||||||
|
|
||||||
|
return dest
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
"github.com/alcionai/corso/src/pkg/selectors"
|
"github.com/alcionai/corso/src/pkg/selectors"
|
||||||
|
selTD "github.com/alcionai/corso/src/pkg/selectors/testdata"
|
||||||
"github.com/alcionai/corso/src/pkg/storage"
|
"github.com/alcionai/corso/src/pkg/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -150,7 +151,7 @@ func runRestoreLoadTest(
|
|||||||
t.Skip("restore load test is toggled off")
|
t.Skip("restore load test is toggled off")
|
||||||
}
|
}
|
||||||
|
|
||||||
dest := tester.DefaultTestRestoreDestination()
|
dest := tester.DefaultTestRestoreDestination("")
|
||||||
|
|
||||||
rst, err := r.NewRestore(ctx, backupID, restSel, dest)
|
rst, err := r.NewRestore(ctx, backupID, restSel, dest)
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
@ -541,7 +542,7 @@ func (suite *LoadOneDriveSuite) TestOneDrive() {
|
|||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
bsel := selectors.NewOneDriveBackup(suite.usersUnderTest)
|
bsel := selectors.NewOneDriveBackup(suite.usersUnderTest)
|
||||||
bsel.Include(bsel.AllData())
|
bsel.Include(selTD.OneDriveBackupFolderScope(bsel))
|
||||||
sel := bsel.Selector
|
sel := bsel.Selector
|
||||||
|
|
||||||
runLoadTest(
|
runLoadTest(
|
||||||
@ -588,7 +589,7 @@ func (suite *IndividualLoadOneDriveSuite) TestOneDrive() {
|
|||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
bsel := selectors.NewOneDriveBackup(suite.usersUnderTest)
|
bsel := selectors.NewOneDriveBackup(suite.usersUnderTest)
|
||||||
bsel.Include(bsel.AllData())
|
bsel.Include(selTD.OneDriveBackupFolderScope(bsel))
|
||||||
sel := bsel.Selector
|
sel := bsel.Selector
|
||||||
|
|
||||||
runLoadTest(
|
runLoadTest(
|
||||||
|
|||||||
@ -242,7 +242,7 @@ func (suite *RepositoryIntegrationSuite) TestNewRestore() {
|
|||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
|
||||||
acct := tester.NewM365Account(t)
|
acct := tester.NewM365Account(t)
|
||||||
dest := tester.DefaultTestRestoreDestination()
|
dest := tester.DefaultTestRestoreDestination("")
|
||||||
|
|
||||||
// need to initialize the repository before we can test connecting to it.
|
// need to initialize the repository before we can test connecting to it.
|
||||||
st := tester.NewPrefixedS3Storage(t)
|
st := tester.NewPrefixedS3Storage(t)
|
||||||
|
|||||||
9
src/pkg/selectors/testdata/onedrive.go
vendored
Normal file
9
src/pkg/selectors/testdata/onedrive.go
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package testdata
|
||||||
|
|
||||||
|
import "github.com/alcionai/corso/src/pkg/selectors"
|
||||||
|
|
||||||
|
// OneDriveBackupFolderScope is the standard folder scope that should be used
|
||||||
|
// in integration backups with onedrive.
|
||||||
|
func OneDriveBackupFolderScope(sel *selectors.OneDriveBackup) []selectors.OneDriveScope {
|
||||||
|
return sel.Folders([]string{"test"}, selectors.PrefixMatch())
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user