X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/863570108a2c901a8eff22dc8a9bc72635ba7b95..fb6909efa81aa96af7e4bf5b29438de1e21b3068:/services/keepstore/trash_worker_test.go diff --git a/services/keepstore/trash_worker_test.go b/services/keepstore/trash_worker_test.go index 267175d6d2..c5a410b06f 100644 --- a/services/keepstore/trash_worker_test.go +++ b/services/keepstore/trash_worker_test.go @@ -1,3 +1,7 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package main import ( @@ -22,7 +26,8 @@ type TrashWorkerTestData struct { UseTrashLifeTime bool DifferentMtimes bool - DeleteLocator string + DeleteLocator string + SpecifyMountUUID bool ExpectLocator1 bool ExpectLocator2 bool @@ -139,6 +144,29 @@ func TestTrashWorkerIntegration_MtimeMatchesForLocator1ButNotForLocator2(t *test performTrashWorkerTest(testData, t) } +// Delete a block that exists on both volumes with matching mtimes, +// but specify a MountUUID in the request so it only gets deleted from +// the first volume. +func TestTrashWorkerIntegration_SpecifyMountUUID(t *testing.T) { + theConfig.EnableDelete = true + testData := TrashWorkerTestData{ + Locator1: TestHash, + Block1: TestBlock, + + Locator2: TestHash, + Block2: TestBlock, + + CreateData: true, + + DeleteLocator: TestHash, + SpecifyMountUUID: true, + + ExpectLocator1: true, + ExpectLocator2: true, + } + performTrashWorkerTest(testData, t) +} + /* Two different locators in volume 1. Delete one of them. Expect the other unaffected. @@ -220,15 +248,15 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { // Put test content vols := KeepVM.AllWritable() if testData.CreateData { - vols[0].Put(testData.Locator1, testData.Block1) - vols[0].Put(testData.Locator1+".meta", []byte("metadata")) + vols[0].Put(context.Background(), testData.Locator1, testData.Block1) + vols[0].Put(context.Background(), testData.Locator1+".meta", []byte("metadata")) if testData.CreateInVolume1 { - vols[0].Put(testData.Locator2, testData.Block2) - vols[0].Put(testData.Locator2+".meta", []byte("metadata")) + vols[0].Put(context.Background(), testData.Locator2, testData.Block2) + vols[0].Put(context.Background(), testData.Locator2+".meta", []byte("metadata")) } else { - vols[1].Put(testData.Locator2, testData.Block2) - vols[1].Put(testData.Locator2+".meta", []byte("metadata")) + vols[1].Put(context.Background(), testData.Locator2, testData.Block2) + vols[1].Put(context.Background(), testData.Locator2+".meta", []byte("metadata")) } } @@ -239,6 +267,9 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { Locator: testData.DeleteLocator, BlockMtime: oldBlockTime.UnixNano(), } + if testData.SpecifyMountUUID { + trashRequest.MountUUID = KeepVM.Mounts()[0].UUID + } // Run trash worker and put the trashRequest on trashq trashList := list.New() @@ -292,7 +323,7 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { // Verify Locator1 to be un/deleted as expected buf := make([]byte, BlockSize) - size, err := GetBlock(context.TODO(), testData.Locator1, buf, nil) + size, err := GetBlock(context.Background(), testData.Locator1, buf, nil) if testData.ExpectLocator1 { if size == 0 || err != nil { t.Errorf("Expected Locator1 to be still present: %s", testData.Locator1) @@ -305,7 +336,7 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { // Verify Locator2 to be un/deleted as expected if testData.Locator1 != testData.Locator2 { - size, err = GetBlock(context.TODO(), testData.Locator2, buf, nil) + size, err = GetBlock(context.Background(), testData.Locator2, buf, nil) if testData.ExpectLocator2 { if size == 0 || err != nil { t.Errorf("Expected Locator2 to be still present: %s", testData.Locator2) @@ -324,7 +355,7 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { locatorFoundIn := 0 for _, volume := range KeepVM.AllReadable() { buf := make([]byte, BlockSize) - if _, err := volume.Get(context.TODO(), testData.Locator1, buf); err == nil { + if _, err := volume.Get(context.Background(), testData.Locator1, buf); err == nil { locatorFoundIn = locatorFoundIn + 1 } }