forked from TrueCloudLab/frostfs-s3-gw
69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCopiesNumberPicker(t *testing.T) {
|
|
var locConstraints = map[string][]uint32{}
|
|
locationConstraint1 := "one"
|
|
locationConstraint2 := "two"
|
|
locConstraints[locationConstraint1] = []uint32{2, 3, 4}
|
|
|
|
config := &Config{
|
|
DefaultCopiesNumbers: []uint32{1},
|
|
CopiesNumbers: locConstraints,
|
|
}
|
|
h := handler{
|
|
cfg: config,
|
|
}
|
|
|
|
metadata := map[string]string{}
|
|
|
|
t.Run("pick default copies number", func(t *testing.T) {
|
|
metadata["somekey1"] = "5, 6, 7"
|
|
expectedCopiesNumbers := []uint32{1}
|
|
|
|
actualCopiesNumbers, err := h.pickCopiesNumbers(metadata, locationConstraint2)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedCopiesNumbers, actualCopiesNumbers)
|
|
})
|
|
|
|
t.Run("pick copies number vector according to location constraint", func(t *testing.T) {
|
|
metadata["somekey2"] = "6, 7, 8"
|
|
expectedCopiesNumbers := []uint32{2, 3, 4}
|
|
|
|
actualCopiesNumbers, err := h.pickCopiesNumbers(metadata, locationConstraint1)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedCopiesNumbers, actualCopiesNumbers)
|
|
})
|
|
|
|
t.Run("pick copies number from metadata", func(t *testing.T) {
|
|
metadata["frostfs-copies-number"] = "7, 8, 9"
|
|
expectedCopiesNumbers := []uint32{7, 8, 9}
|
|
|
|
actualCopiesNumbers, err := h.pickCopiesNumbers(metadata, locationConstraint2)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedCopiesNumbers, actualCopiesNumbers)
|
|
})
|
|
|
|
t.Run("pick copies number from metadata with no space", func(t *testing.T) {
|
|
metadata["frostfs-copies-number"] = "7,8,9"
|
|
expectedCopiesNumbers := []uint32{7, 8, 9}
|
|
|
|
actualCopiesNumbers, err := h.pickCopiesNumbers(metadata, locationConstraint2)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedCopiesNumbers, actualCopiesNumbers)
|
|
})
|
|
|
|
t.Run("pick copies number from metadata with trailing comma", func(t *testing.T) {
|
|
metadata["frostfs-copies-number"] = "11, 12, 13, "
|
|
expectedCopiesNumbers := []uint32{11, 12, 13}
|
|
|
|
actualCopiesNumbers, err := h.pickCopiesNumbers(metadata, locationConstraint2)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedCopiesNumbers, actualCopiesNumbers)
|
|
})
|
|
}
|