Skip to content

Commit 653d9f8

Browse files
authored
Fixes for merging single SearchV2 result (#3155)
2 parents d0284a0 + 0751b44 commit 653d9f8

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

pkg/core/object/metadata.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ func MergeSearchResults(lim uint16, withAttr, cmpInt bool, sets [][]client.Searc
2727
return nil, false, nil
2828
}
2929
if len(sets) == 1 {
30-
n := min(uint16(len(sets[0])), lim)
31-
return sets[0][:n], n < lim || slices.Contains(mores, true), nil
30+
ul := uint16(len(sets[0]))
31+
return sets[0][:min(ul, lim)], ul > lim || ul == lim && slices.Contains(mores, true), nil
3232
}
3333
lim = calcMaxUniqueSearchResults(lim, sets)
3434
res := make([]client.SearchResultItem, 0, lim)

pkg/core/object/metadata_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,41 @@ func TestMergeSearchResults(t *testing.T) {
5858
require.NoError(t, err)
5959
require.Empty(t, res)
6060
require.False(t, more)
61+
t.Run("single", func(t *testing.T) {
62+
// https://github.com/nspcc-dev/neofs-node/issues/3154
63+
expRes := make([]client.SearchResultItem, 0)
64+
res, more, err := MergeSearchResults(1, false, false, [][]client.SearchResultItem{expRes}, nil)
65+
assertMergeResult(t, res, expRes, more, false, err)
66+
})
67+
})
68+
t.Run("single set", func(t *testing.T) {
69+
expRes := searchResultFromIDs(4)
70+
t.Run("less than limit", func(t *testing.T) {
71+
res, more, err := MergeSearchResults(5, false, false, [][]client.SearchResultItem{expRes}, []bool{false})
72+
assertMergeResult(t, res, expRes, more, false, err)
73+
})
74+
t.Run("exactly limit", func(t *testing.T) {
75+
t.Run("no more", func(t *testing.T) {
76+
res, more, err := MergeSearchResults(4, false, false, [][]client.SearchResultItem{expRes}, []bool{false})
77+
assertMergeResult(t, res, expRes, more, false, err)
78+
})
79+
t.Run("more", func(t *testing.T) {
80+
res, more, err := MergeSearchResults(4, false, false, [][]client.SearchResultItem{expRes}, []bool{true})
81+
assertMergeResult(t, res, expRes, more, true, err)
82+
})
83+
})
84+
t.Run("more than limit", func(t *testing.T) {
85+
t.Run("no more", func(t *testing.T) {
86+
res, more, err := MergeSearchResults(3, false, false, [][]client.SearchResultItem{expRes}, []bool{false})
87+
require.Len(t, res, 3)
88+
assertMergeResult(t, res[:3:3], expRes[:3], more, true, err)
89+
})
90+
t.Run("more", func(t *testing.T) {
91+
res, more, err := MergeSearchResults(3, false, false, [][]client.SearchResultItem{expRes}, []bool{true})
92+
require.Len(t, res, 3)
93+
assertMergeResult(t, res[:3:3], expRes[:3], more, true, err)
94+
})
95+
})
6196
})
6297
t.Run("with empty sets", func(t *testing.T) {
6398
all := []client.SearchResultItem{

0 commit comments

Comments
 (0)