GC Restore: Event pipeline not working [FIX] (#780)

Bug Fix to ensure E2E testing. Test suite expanded.
This commit is contained in:
Danny 2022-09-07 17:14:40 -04:00 committed by GitHub
parent 35c6f2b6b0
commit 6640d42aac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 76 additions and 9 deletions

View File

@ -508,3 +508,77 @@ func (suite *ExchangeServiceSuite) TestGetRestoreContainer() {
}) })
} }
} }
// TestRestoreExchangeObject verifies path.Category usage for restored objects
func (suite *ExchangeServiceSuite) TestRestoreExchangeObject() {
ctx := context.Background()
t := suite.T()
userID := tester.M365UserID(t)
service := loadService(t)
now := time.Now()
tests := []struct {
name string
bytes []byte
category path.CategoryType
cleanupFunc func(graph.Service, string, string) error
destination func() string
}{
{
name: "Test Mail",
bytes: mockconnector.GetMockMessageBytes("Restore Exchange Object"),
category: path.EmailCategory,
cleanupFunc: DeleteMailFolder,
destination: func() string {
folderName := "TestRestoreMailObject: " + common.FormatSimpleDateTime(now)
folder, err := CreateMailFolder(suite.es, userID, folderName)
require.NoError(t, err)
return *folder.GetId()
},
},
{
name: "Test Contact",
bytes: mockconnector.GetMockContactBytes("Test_Omega"),
category: path.ContactsCategory,
cleanupFunc: DeleteContactFolder,
destination: func() string {
folderName := "TestRestoreContactObject: " + common.FormatSimpleDateTime(now)
folder, err := CreateContactFolder(suite.es, userID, folderName)
require.NoError(t, err)
return *folder.GetId()
},
},
{
name: "Test Events",
bytes: mockconnector.GetMockEventBytes("Restored Event Object"),
category: path.EventsCategory,
cleanupFunc: DeleteCalendar,
destination: func() string {
calendarName := "TestRestoreEventObject: " + common.FormatSimpleDateTime(now)
calendar, err := CreateCalendar(suite.es, userID, calendarName)
require.NoError(t, err)
return *calendar.GetId()
},
},
}
for _, test := range tests {
suite.T().Run(test.name, func(t *testing.T) {
destination := test.destination()
err := RestoreExchangeObject(
ctx,
test.bytes,
test.category,
control.Copy,
service,
destination,
userID,
)
assert.NoError(t, err)
cleanupError := test.cleanupFunc(service, userID, destination)
assert.NoError(t, cleanupError)
})
}
}

View File

@ -353,19 +353,12 @@ func RestoreExchangeObject(
service graph.Service, service graph.Service,
destination, user string, destination, user string,
) error { ) error {
var setting optionIdentifier
switch category {
case path.EmailCategory, path.ContactsCategory:
setting = categoryToOptionIdentifier(category)
default:
return fmt.Errorf("type: %s not supported for exchange restore", category)
}
if policy != control.Copy { if policy != control.Copy {
return fmt.Errorf("restore policy: %s not supported", policy) return fmt.Errorf("restore policy: %s not supported", policy)
} }
setting := categoryToOptionIdentifier(category)
switch setting { switch setting {
case messages: case messages:
return RestoreMailMessage(ctx, bits, service, control.Copy, destination, user) return RestoreMailMessage(ctx, bits, service, control.Copy, destination, user)