KevinStephenson
Adding in weaviate code
b110593
raw
history blame
3.78 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package sharding
import (
"encoding/json"
"errors"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_Config(t *testing.T) {
type test struct {
name string
input interface{}
expected Config
expectedErr error
}
tests := []test{
{
name: "nothing specified, all defaults",
input: nil,
expected: Config{
VirtualPerPhysical: DefaultVirtualPerPhysical,
DesiredCount: 7, // cluster size
DesiredVirtualCount: DefaultVirtualPerPhysical * 7,
ActualCount: 7, // cluster size
ActualVirtualCount: DefaultVirtualPerPhysical * 7,
Key: DefaultKey,
Strategy: DefaultStrategy,
Function: DefaultFunction,
},
},
{
name: "everything specified, everything legal",
input: map[string]interface{}{
"virtualPerPhysical": json.Number("64"),
"desiredCount": json.Number("3"),
"desiredVirtualCount": json.Number("192"),
"replicas": json.Number("3"),
"key": "_id",
"strategy": "hash",
"function": "murmur3",
},
expected: Config{
VirtualPerPhysical: 64,
DesiredCount: 3,
DesiredVirtualCount: 192,
ActualCount: 3,
ActualVirtualCount: 192,
Key: "_id",
Strategy: "hash",
Function: "murmur3",
},
},
{
name: "everything specified, everything legal, from disk using floats for numbers",
input: map[string]interface{}{
"virtualPerPhysical": float64(64),
"desiredCount": float64(3),
"desiredVirtualCount": float64(192),
"replicas": float64(4),
"key": "_id",
"strategy": "hash",
"function": "murmur3",
},
expected: Config{
VirtualPerPhysical: 64,
DesiredCount: 3,
DesiredVirtualCount: 192,
ActualCount: 3,
ActualVirtualCount: 192,
Key: "_id",
Strategy: "hash",
Function: "murmur3",
},
},
{
name: "unsupported sharding key",
input: map[string]interface{}{
"key": "myCustomField",
"strategy": "hash",
"function": "murmur3",
},
expectedErr: errors.New("sharding only supported on key '_id' " +
"for now, got: myCustomField"),
},
{
name: "unsupported sharding strategy",
input: map[string]interface{}{
"key": "_id",
"strategy": "range",
"function": "murmur3",
},
expectedErr: errors.New("sharding only supported with strategy 'hash' " +
"for now, got: range"),
},
{
name: "unsupported sharding function",
input: map[string]interface{}{
"key": "_id",
"strategy": "hash",
"function": "md5",
},
expectedErr: errors.New("sharding only supported with function 'murmur3' " +
"for now, got: md5"),
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
cfg, err := ParseConfig(test.input, 7) // pretend cluster size is 7
if test.expectedErr == nil {
assert.Nil(t, err)
assert.Equal(t, test.expected, cfg)
} else {
require.NotNil(t, err, "should have error'd")
assert.Equal(t, test.expectedErr.Error(), err.Error())
}
})
}
}