From 4f09136c0c60abfa2dc2314d26816636f9bb7c2c Mon Sep 17 00:00:00 2001 From: chaitalisg Date: Mon, 17 Jun 2024 12:20:25 -0700 Subject: [PATCH] test(general): add delete actions to robustness suite (#3879) The robustness framework runs do not cover delete actions at the moment. This change adds the following actions to the robustness jobs - delete random subdirectories - delete contents of directories --- .../multiclient_test/multiclient_test.go | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/tests/robustness/multiclient_test/multiclient_test.go b/tests/robustness/multiclient_test/multiclient_test.go index ab7bb73d2..c13e8b011 100644 --- a/tests/robustness/multiclient_test/multiclient_test.go +++ b/tests/robustness/multiclient_test/multiclient_test.go @@ -20,29 +20,43 @@ "github.com/kopia/kopia/tests/robustness/fiofilewriter" ) -const defaultTestDur = 5 * time.Minute +const ( + defaultTestDur = 5 * time.Minute + deleteContentsPercentage = 50 +) var randomizedTestDur = flag.Duration("rand-test-duration", defaultTestDur, "Set the duration for the randomized test") func TestManySmallFiles(t *testing.T) { const ( - fileSize = 4096 - numFiles = 10000 - numClients = 4 + fileSize = 4096 + numFiles = 10000 + numClients = 4 + maxDirDepth = 1 ) fileWriteOpts := map[string]string{ - fiofilewriter.MaxDirDepthField: strconv.Itoa(1), + fiofilewriter.MaxDirDepthField: strconv.Itoa(maxDirDepth), fiofilewriter.MaxFileSizeField: strconv.Itoa(fileSize), fiofilewriter.MinFileSizeField: strconv.Itoa(fileSize), fiofilewriter.MaxNumFilesPerWriteField: strconv.Itoa(numFiles), fiofilewriter.MinNumFilesPerWriteField: strconv.Itoa(numFiles), } + deleteDirOpts := map[string]string{ + fiofilewriter.MaxDirDepthField: strconv.Itoa(maxDirDepth), + fiofilewriter.DeletePercentOfContentsField: strconv.Itoa(deleteContentsPercentage), + } f := func(ctx context.Context, t *testing.T) { //nolint:thelper err := tryRestoreIntoDataDirectory(ctx, t) require.NoError(t, err) + _, err = eng.ExecAction(ctx, engine.DeleteRandomSubdirectoryActionKey, deleteDirOpts) + require.NoError(t, err) + + _, err = eng.ExecAction(ctx, engine.DeleteDirectoryContentsActionKey, deleteDirOpts) + require.NoError(t, err) + _, err = eng.ExecAction(ctx, engine.WriteRandomFilesActionKey, fileWriteOpts) require.NoError(t, err) @@ -98,21 +112,32 @@ func TestManySmallFilesAcrossDirecoryTree(t *testing.T) { filesPerWrite = 10 actionRepeats = numFiles / filesPerWrite numClients = 4 + maxDirDepth = 15 ) fileWriteOpts := map[string]string{ - fiofilewriter.MaxDirDepthField: strconv.Itoa(15), + fiofilewriter.MaxDirDepthField: strconv.Itoa(maxDirDepth), fiofilewriter.MaxFileSizeField: strconv.Itoa(fileSize), fiofilewriter.MinFileSizeField: strconv.Itoa(fileSize), fiofilewriter.MaxNumFilesPerWriteField: strconv.Itoa(filesPerWrite), fiofilewriter.MinNumFilesPerWriteField: strconv.Itoa(filesPerWrite), engine.ActionRepeaterField: strconv.Itoa(actionRepeats), } + deleteDirOpts := map[string]string{ + fiofilewriter.MaxDirDepthField: strconv.Itoa(maxDirDepth), + fiofilewriter.DeletePercentOfContentsField: strconv.Itoa(deleteContentsPercentage), + } f := func(ctx context.Context, t *testing.T) { //nolint:thelper err := tryRestoreIntoDataDirectory(ctx, t) require.NoError(t, err) + _, err = eng.ExecAction(ctx, engine.DeleteRandomSubdirectoryActionKey, deleteDirOpts) + require.NoError(t, err) + + _, err = eng.ExecAction(ctx, engine.DeleteDirectoryContentsActionKey, deleteDirOpts) + require.NoError(t, err) + _, err = eng.ExecAction(ctx, engine.WriteRandomFilesActionKey, fileWriteOpts) require.NoError(t, err) @@ -132,6 +157,8 @@ func TestRandomizedSmall(t *testing.T) { st := timetrack.StartTimer() + maxDirDepth := 3 + opts := engine.ActionOpts{ engine.ActionControlActionKey: map[string]string{ string(engine.SnapshotDirActionKey): strconv.Itoa(2), @@ -139,12 +166,16 @@ func TestRandomizedSmall(t *testing.T) { string(engine.DeleteRandomSnapshotActionKey): strconv.Itoa(1), string(engine.WriteRandomFilesActionKey): strconv.Itoa(8), string(engine.DeleteRandomSubdirectoryActionKey): strconv.Itoa(1), + string(engine.DeleteDirectoryContentsActionKey): strconv.Itoa(1), }, engine.WriteRandomFilesActionKey: map[string]string{ fiofilewriter.IOLimitPerWriteAction: strconv.Itoa(512 * 1024 * 1024), fiofilewriter.MaxNumFilesPerWriteField: strconv.Itoa(100), fiofilewriter.MaxFileSizeField: strconv.Itoa(64 * 1024 * 1024), - fiofilewriter.MaxDirDepthField: strconv.Itoa(3), + fiofilewriter.MaxDirDepthField: strconv.Itoa(maxDirDepth), + }, + engine.DeleteDirectoryContentsActionKey: map[string]string{ + fiofilewriter.DeletePercentOfContentsField: strconv.Itoa(deleteContentsPercentage), }, }