X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d491de72bb56e7ca09570d4cc7cca02e217c5bf5..86e1730f97383b3ae1685445323aa253b99ee821:/services/datamanager/datamanager_test.go diff --git a/services/datamanager/datamanager_test.go b/services/datamanager/datamanager_test.go index 75950d1314..0ff6b77734 100644 --- a/services/datamanager/datamanager_test.go +++ b/services/datamanager/datamanager_test.go @@ -12,6 +12,7 @@ import ( "net/http" "os" "os/exec" + "path" "regexp" "strings" "testing" @@ -538,11 +539,31 @@ func TestPutAndGetBlocks_NoErrorDuringSingleRun(t *testing.T) { } func TestPutAndGetBlocks_ErrorDuringGetCollectionsBadWriteTo(t *testing.T) { - testOldBlocksNotDeletedOnDataManagerError(t, "/badwritetofile", "", true, true) + badpath, err := arvadostest.CreateBadPath() + if err != nil { + t.Fatalf(err.Error()) + } + defer func() { + err = arvadostest.DestroyBadPath(badpath) + if err != nil { + t.Fatalf(err.Error()) + } + }() + testOldBlocksNotDeletedOnDataManagerError(t, path.Join(badpath, "writetofile"), "", true, true) } func TestPutAndGetBlocks_ErrorDuringGetCollectionsBadHeapProfileFilename(t *testing.T) { - testOldBlocksNotDeletedOnDataManagerError(t, "", "/badheapprofilefile", true, true) + badpath, err := arvadostest.CreateBadPath() + if err != nil { + t.Fatalf(err.Error()) + } + defer func() { + err = arvadostest.DestroyBadPath(badpath) + if err != nil { + t.Fatalf(err.Error()) + } + }() + testOldBlocksNotDeletedOnDataManagerError(t, "", path.Join(badpath, "heapprofilefile"), true, true) } // Create some blocks and backdate some of them. @@ -613,7 +634,7 @@ func createMultiStreamBlockCollection(t *testing.T, data string, numStreams, num } var locs []string - for k, _ := range locators { + for k := range locators { locs = append(locs, k) } @@ -624,17 +645,22 @@ func createMultiStreamBlockCollection(t *testing.T, data string, numStreams, num // Also, create stray block and backdate it. // After datamanager run: expect blocks from the collection, but not the stray block. func TestManifestWithMultipleStreamsAndBlocks(t *testing.T) { - testManifestWithMultipleStreamsAndBlocks(t, 100, 10, "") + testManifestWithMultipleStreamsAndBlocks(t, 100, 10, "", false) } // Same test as TestManifestWithMultipleStreamsAndBlocks with an additional // keepstore of a service type other than "disk". Only the "disk" type services // will be indexed by datamanager and hence should work the same way. func TestManifestWithMultipleStreamsAndBlocks_WithOneUnsupportedKeepServer(t *testing.T) { - testManifestWithMultipleStreamsAndBlocks(t, 2, 2, "testblobstore") + testManifestWithMultipleStreamsAndBlocks(t, 2, 2, "testblobstore", false) +} + +// Test datamanager with dry-run. Expect no block to be deleted. +func TestManifestWithMultipleStreamsAndBlocks_DryRun(t *testing.T) { + testManifestWithMultipleStreamsAndBlocks(t, 2, 2, "", true) } -func testManifestWithMultipleStreamsAndBlocks(t *testing.T, numStreams, numBlocks int, createExtraKeepServerWithType string) { +func testManifestWithMultipleStreamsAndBlocks(t *testing.T, numStreams, numBlocks int, createExtraKeepServerWithType string, isDryRun bool) { defer TearDownDataManagerTest(t) SetupDataManagerTest(t) @@ -669,10 +695,16 @@ func testManifestWithMultipleStreamsAndBlocks(t *testing.T, numStreams, numBlock } // run datamanager + dryRun = isDryRun dataManagerSingleRun(t) - // verify that strayOldBlock is not to be found, but the collections blocks are still there - verifyBlocks(t, []string{strayOldBlock}, oldBlocks, 2) + if dryRun { + // verify that all blocks, including strayOldBlock, are still to be found + verifyBlocks(t, nil, expected, 2) + } else { + // verify that strayOldBlock is not to be found, but the collections blocks are still there + verifyBlocks(t, []string{strayOldBlock}, oldBlocks, 2) + } } // Add one more keepstore with the given service type