From 2786fadb256e94ef2772be1883874687aeb50335 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Wed, 29 Jan 2025 20:12:54 +0300 Subject: [PATCH] [#326] pool: Add test for concurrent client deletion Signed-off-by: Alex Vanin --- pool/tree/pool_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pool/tree/pool_test.go b/pool/tree/pool_test.go index 607e037b..5814a77c 100644 --- a/pool/tree/pool_test.go +++ b/pool/tree/pool_test.go @@ -10,6 +10,7 @@ import ( cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap" + netmaptest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool" "git.frostfs.info/TrueCloudLab/hrw" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" @@ -416,6 +417,21 @@ func TestRetryContainerNodes(t *testing.T) { }) } +func TestDeleteClientTwice(t *testing.T) { + p := Pool{ + clientMap: makeClientMap([]netmap.NodeInfo{netmaptest.NodeInfo()}), + } + // emulate concurrent requests as consecutive requests + // to delete the same client from the map twice + for idToDelete := range p.clientMap { + p.deleteClientFromMap(idToDelete) + require.NotPanics(t, func() { + p.deleteClientFromMap(idToDelete) + }) + } + require.Empty(t, p.clientMap) +} + func makeInnerPool(nodes [][]string) []*innerPool { res := make([]*innerPool, len(nodes))