forked from TrueCloudLab/frostfs-sdk-go
[#231] netmap: Add LIKE
operation for filter
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
parent
92c7596157
commit
2077b35736
9 changed files with 228 additions and 103 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
mrand "math/rand"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||
|
@ -251,6 +252,92 @@ func TestPlacementPolicy_ProcessSelectors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestPlacementPolicy_Like(t *testing.T) {
|
||||
nodes := []NodeInfo{
|
||||
nodeInfoFromAttributes("Country", "Russia"),
|
||||
nodeInfoFromAttributes("Country", "Germany"),
|
||||
nodeInfoFromAttributes("Country", "Belarus"),
|
||||
}
|
||||
|
||||
var nm NetMap
|
||||
nm.SetNodes(nodes)
|
||||
|
||||
t.Run("LIKE all", func(t *testing.T) {
|
||||
ssNamed := []Selector{newSelector("X", "Country", 4, "FromRU", (*Selector).SelectDistinct)}
|
||||
fsNamed := []Filter{newFilter("FromRU", "Country", "*", netmap.LIKE)}
|
||||
rsNamed := []ReplicaDescriptor{newReplica(4, "X")}
|
||||
pNamed := newPlacementPolicy(0, rsNamed, ssNamed, fsNamed)
|
||||
|
||||
n, err := nm.ContainerNodes(pNamed, []byte{1})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 3, len(n[0]))
|
||||
for _, n := range n[0] {
|
||||
require.True(t, strings.Contains("GermanyRussiaBelarus", n.Attribute("Country")))
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("LIKE no wildcard", func(t *testing.T) {
|
||||
ssNamed := []Selector{newSelector("X", "Country", 1, "FromRU", (*Selector).SelectDistinct)}
|
||||
fsNamed := []Filter{newFilter("FromRU", "Country", "Russia", netmap.LIKE)}
|
||||
rsNamed := []ReplicaDescriptor{newReplica(1, "X")}
|
||||
pNamed := newPlacementPolicy(0, rsNamed, ssNamed, fsNamed)
|
||||
|
||||
n, err := nm.ContainerNodes(pNamed, []byte{1})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(n[0]))
|
||||
for _, n := range n[0] {
|
||||
require.True(t, n.Attribute("Country") == "Russia")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("LIKE prefix", func(t *testing.T) {
|
||||
ssNamed := []Selector{newSelector("X", "Country", 1, "FromRU", (*Selector).SelectDistinct)}
|
||||
fsNamed := []Filter{newFilter("FromRU", "Country", "Ge*", netmap.LIKE)}
|
||||
rsNamed := []ReplicaDescriptor{newReplica(1, "X")}
|
||||
pNamed := newPlacementPolicy(0, rsNamed, ssNamed, fsNamed)
|
||||
|
||||
n, err := nm.ContainerNodes(pNamed, []byte{1})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(n[0]))
|
||||
for _, n := range n[0] {
|
||||
require.True(t, n.Attribute("Country") == "Germany")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("LIKE suffix", func(t *testing.T) {
|
||||
ssNamed := []Selector{newSelector("X", "Country", 1, "FromRU", (*Selector).SelectDistinct)}
|
||||
fsNamed := []Filter{newFilter("FromRU", "Country", "*sia", netmap.LIKE)}
|
||||
rsNamed := []ReplicaDescriptor{newReplica(1, "X")}
|
||||
pNamed := newPlacementPolicy(0, rsNamed, ssNamed, fsNamed)
|
||||
|
||||
n, err := nm.ContainerNodes(pNamed, []byte{1})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 1, len(n[0]))
|
||||
for _, n := range n[0] {
|
||||
require.True(t, n.Attribute("Country") == "Russia")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("LIKE middle", func(t *testing.T) {
|
||||
ssNamed := []Selector{newSelector("X", "Country", 2, "FromRU", (*Selector).SelectDistinct)}
|
||||
fsNamed := []Filter{newFilter("FromRU", "Country", "*us*", netmap.LIKE)}
|
||||
rsNamed := []ReplicaDescriptor{newReplica(2, "X")}
|
||||
pNamed := newPlacementPolicy(0, rsNamed, ssNamed, fsNamed)
|
||||
|
||||
n, err := nm.ContainerNodes(pNamed, []byte{1})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 2, len(n[0]))
|
||||
for _, n := range n[0] {
|
||||
require.True(t, strings.Contains("RussiaBelarus", n.Attribute("Country")))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestPlacementPolicy_Unique(t *testing.T) {
|
||||
p := newPlacementPolicy(2,
|
||||
[]ReplicaDescriptor{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue